21
Advanced Java Programming CS 537 – Data Structures and Algorithms

Advanced Java Programming CS 537 – Data Structures and Algorithms

Embed Size (px)

Citation preview

Page 1: Advanced Java Programming CS 537 – Data Structures and Algorithms

Advanced Java Programming

CS 537 – Data Structures and Algorithms

Page 2: Advanced Java Programming CS 537 – Data Structures and Algorithms

The Stack

• The stack is the place where all local variables are stored– a local variable is declared in some scope– Example

int x; // creates the variable x on the stack

• As soon as the scope ends, all local variables declared in that scope end– the variable name and its space are gone– this happens implicitly – the user has no control over

it

Page 3: Advanced Java Programming CS 537 – Data Structures and Algorithms

The Heap

• The heap is an area of memory that the user handles explicitly– user requests memory through new operator– java does garbage collection to reclaim

unused memory

• A user maintains a handle on memory allocated in the heap with a reference variable

Page 4: Advanced Java Programming CS 537 – Data Structures and Algorithms

Creating Objects

• All objects are created on the heap

• A reference to object is stored on the stack– simply declaring an object does not create it

• automatically set to null

– new operator allocates space on the heap

Page 5: Advanced Java Programming CS 537 – Data Structures and Algorithms

Creating Objects

• ExampleObject obj1 = new Object();

Object obj2;

mainx = 3

func1obj1 = 200obj2 = null

200

HeapStack

Object

Page 6: Advanced Java Programming CS 537 – Data Structures and Algorithms

Assigning Object References

• Reference can be assigned through new operator

• obj2 = new Object();

• Reference can assigned to another reference

• obj2 = obj1;

• WARNING– when assigning to another reference, both

references now refer to the same object

Page 7: Advanced Java Programming CS 537 – Data Structures and Algorithms

Assigning Object References

• Example• Object obj1 = new Object();• Object obj2 = obj1;

mainx = 3

func1obj1 = 200obj2 = 200

200

HeapStack

Object

Page 8: Advanced Java Programming CS 537 – Data Structures and Algorithms

Simple Class

class Foo implements Cloneable {

private int num;

public void Foo(int num) { this.num = num; }

public void setNum(int num) { this.num = num; }

public int getNum() { return num; }

}

Page 9: Advanced Java Programming CS 537 – Data Structures and Algorithms

Copying an Object

• Want to create and modify copy of object– remember, simple assignment not enough

Foo f1 = new Foo(5);

Foo f2 = f1; // still only one object – 2 references

f2.setNum(10);

System.out.println(“f1’s num = “ + f1.getNum()); // prints 10

System.out.println(“f2’s num = “ + f2.getNum()); // prints 10

– need to use the clone() method

Page 10: Advanced Java Programming CS 537 – Data Structures and Algorithms

clone() Method

• To use clone() must implement Cloneable• Object.clone() is automatically inherited by every

class– by default, it creates a new object and copies all fields

• ExampleFoo f1 = new Foo(5);

Foo f2 = f1.clone();

f2.setNum(10);

System.out.println(“f1’s num = “ + f1.getNum()); // prints 5

System.out.println(“f2’s num = “ + f2.getNum()); // prints 10

Page 11: Advanced Java Programming CS 537 – Data Structures and Algorithms

Shallow Clone• Only copies the fields

– does not copy what the fields reference

• Doesn’t work well for sophisticated objects• Example:

Class Foo {

private int [] nums;

public void Foo(int size) { nums = new int[size]; }

}

Foo f1 = new Foo(5);

Foo f2 = f1.clone();

Page 12: Advanced Java Programming CS 537 – Data Structures and Algorithms

Shallow Clone

Foo f1 = new Foo(5);

Foo f2 = f1.clone();

func1f1 = 200f2 = 100

200

HeapStack

nums = 50

50

Array

nums = 50

100

Page 13: Advanced Java Programming CS 537 – Data Structures and Algorithms

Deep Clone

• Copies fields and what they refer to

• Must reimplement the clone() methodclass Foo {

public Object clone() {

try {

Foo fobj = (Foo)super.clone(); // copies fields

fobj.nums = (int)nums.clone(); // arrays implement clone

return fobj;

} catch(CloneNotSupportedException e) { }

}

}

Page 14: Advanced Java Programming CS 537 – Data Structures and Algorithms

Inheritance

• lets one class inherit fields and methods from another class

• use keyword extends to explicitly inherit another classes public and protected fields/methods

• can only explicitly extend from one class

• all classes implicitly extend the Object class

Page 15: Advanced Java Programming CS 537 – Data Structures and Algorithms

Inheritance

• overriding a method– must have the same signature as original– declaring a method final means future derived

classes cannot override the method

• overloading a method– method has same name but different

signature– they are actually different methods

Page 16: Advanced Java Programming CS 537 – Data Structures and Algorithms

Inheritance

• abstract classes and methods– declaring a class abstract

• must have an abstract method• class cannot be directly used to create an object• class must be inherited to be used

– declaring a method abstract• method must be defined in derived class

Page 17: Advanced Java Programming CS 537 – Data Structures and Algorithms

Abstract Classabstract class Pixel {

. . .public abstract void refresh();

}

class ColorPixel extends Pixel {. . .public void refresh() {

do some work}

}

• Note: signature of method in derived class must be identical to parent declaration of the method

Page 18: Advanced Java Programming CS 537 – Data Structures and Algorithms

Interface

• basically an abstract class where all methods are abstract

• cannot use an interface to create an object

• class that uses an interface must implement all of the interfaces methods

• use the implements keyword

• a class can implement more than one interface

Page 19: Advanced Java Programming CS 537 – Data Structures and Algorithms

Interface

• simple exampleclass Tester implements Foo, Bar {

. . .

}

• Foo and Bar are interfaces

• Tester must define all methods declared in Foo and Bar

Page 20: Advanced Java Programming CS 537 – Data Structures and Algorithms

Array Review

• Consecutive blocks of memory

• Creation: int [] grades = new int[25];

• __.length: holds size of array

• __.clone(): makes copy of array data

• out-of-bounds exception: trying to access data outside of array bounds generates an exception

• Array size is fixed at creation

Page 21: Advanced Java Programming CS 537 – Data Structures and Algorithms

Vector Class

• Very similar to an array

• Major difference: vectors can grow beyond original size– if a certain capacity is exceeded, a new,

larger memory region is allocated for vector– copy all data to the new area

• See Java documentation on-line for complete details