Page 1
Institute for Visualization and Perception ResearchI VPR 1
© Copyright 1998 Haim Levkowitz
Reference type summary ...• All object & arrays are handled by reference
• = and == op's assign & test ref's to objects• clone() and equals() copy or test objects themselves• Necessary ref'ing and deref'ing of objects and arrays
handled automatically• Ref type can never be cast to primitive type• Primitive type can never be cast to ref type• No pointer arithmetic• No sizeof operator• null is special value, means "no object" or indicates
absence of reference
Page 2
Institute for Visualization and Perception ResearchI VPR 2
© Copyright 1998 Haim Levkowitz
Objects ...
• Creating objects ...• Accessing objects ...• Garbage collection ...
Page 3
Institute for Visualization and Perception ResearchI VPR 3
© Copyright 1998 Haim Levkowitz
Creating objects ...
• 1. new class (arg list)• java.awt.Button b = new java.awt.Button();• ComplexNumber c = new ComplexNumber(1.0,
1.414);• 2. String s = " This is a string";• 3. newInstance() method of a Class object
• generally only dynamically loading classes
Page 4
Institute for Visualization and Perception ResearchI VPR 4
© Copyright 1998 Haim Levkowitz
Accessing objects ...• ComplexNumber c = new ComplexNumber();• c.x = 1.0;• c.y = 1.414;• By ref ==> dot in Java more like -> in C• Object's methods as if fields in the object
• ComplexNumber c = new ComplexNumber(1.0, 1.414);
• double magnitude = c.magnitude();
Page 5
Institute for Visualization and Perception ResearchI VPR 5
© Copyright 1998 Haim Levkowitz
Garbage collection ...
• Automatic• When no longer referred to
Page 6
Institute for Visualization and Perception ResearchI VPR 6
© Copyright 1998 Haim Levkowitz
Arrays ...• Same as reference type an object,
mostly ...• Creating and destroying arrays ...• Multidimensional arrays ...• Accessing array elements ...• Are arrays objects? ...• Declaring array variables and arguments ...
Page 7
Institute for Visualization and Perception ResearchI VPR 7
© Copyright 1998 Haim Levkowitz
Same as reference type an object, mostly ...• Manipulated by reference• Dynamically created with new• Automatically garbage collected when
no longer referred to
Page 8
Institute for Visualization and Perception ResearchI VPR 8
© Copyright 1998 Haim Levkowitz
Creating and destroying arrays ...• 1. w / new, specify how large ...• 2. Static initializer (looks like C) ...
Page 9
Institute for Visualization and Perception ResearchI VPR 9
© Copyright 1998 Haim Levkowitz
1. w / new, specify how large ...• byte octet_buffer[] = new byte[1024];• Button buttons[] = new Button[10];• Doesn't create object stored in array
• ==> No constructor to call• No arg list• Elements initialized to default of type
Page 10
Institute for Visualization and Perception ResearchI VPR 10
© Copyright 1998 Haim Levkowitz
2. Static initializer (looks like C) ...• int lookup_table[] = {1, 2, 4, 8, 16, 32, 64,
128};• Dynamically create array• Initialize elements to specified values• Elements my be arbitrary expressions
(diff from C, where must be constant expressions)
Page 11
Institute for Visualization and Perception ResearchI VPR 11
© Copyright 1998 Haim Levkowitz
Multidimensional arrays ...
• Arrays-of-arrays• byte TwoDimArray[][] = new byte[256]
[16]; ...• Nested initializers• Need not be rectangular ...
Page 12
Institute for Visualization and Perception ResearchI VPR 12
© Copyright 1998 Haim Levkowitz
byte TwoDimArray[][] = new byte[256][16]; ...• 1. Declare var name TwoDimArray; type byte[][]• 2. Dynamically allocate array w/256 elements. Each
element is single-dim array of byte• 3. Dynamically allocate 256 arrays of byte, 16 bytes
ea. • 4. Store ref to array in 256 element array. • 5. Init values to default, 0• Don't have to spec number of elements in all ...
Page 13
Institute for Visualization and Perception ResearchI VPR 13
© Copyright 1998 Haim Levkowitz
Don't have to spec number of elements in all ...• byte ThreeDimArray[][][] = new
byte[256][][]; // legal• byte ThreeDimArray[][][] = new
byte[256][16][]; // legal• byte ThreeDimArray[][][] = new
byte[256][][16]; // illegal
Page 14
Institute for Visualization and Perception ResearchI VPR 14
© Copyright 1998 Haim Levkowitz
Need not be rectangular ...e.g., triangularshort triangle[][] = new short[10][]; // 1-D arrayfor (int i = 0; i < triangle.length; i++) { // for ea. elem.
triangle[i] = new short[i + 1]; // new arrayfor (int j = 0; j < i + 1; j++) // for ea. elem. of new
triangle[i][j] = i + j; // init to value}
Page 15
Institute for Visualization and Perception ResearchI VPR 15
© Copyright 1998 Haim Levkowitz
Accessing array elements ...• int a[] = new int[100];• a[0] = 0;• for (int i = 1; i < a.length; i++) a[i] = i + a[i - 1];• length: only field arrays support
• read-only• If index out of bounds ==>
ArrayIndexOutOfBoundsException
Page 16
Institute for Visualization and Perception ResearchI VPR 16
© Copyright 1998 Haim Levkowitz
Are arrays objects? ...• Yes ...
• Object syntax .length• May be assigned to var's of type Object• Methods of Object class may be invoked for arrays
• ... and no• Special syntax• ==> Useful to consider them diff
Page 17
Institute for Visualization and Perception ResearchI VPR 17
© Copyright 1998 Haim Levkowitz
Declaring array variables and arguments ...• C style ...• Array bracket after type name ...• Can mix styles• Size not part of type• ==> Can declare var of type String[]• Assign array of String object to it,
regardless of length
Page 18
Institute for Visualization and Perception ResearchI VPR 18
© Copyright 1998 Haim Levkowitz
C style ...
• void reverse(char strbuff[], int buffer_size) {• char buffer[500];• ...
• }• Have to declare buffer as array variable• Allocate array with new
Page 19
Institute for Visualization and Perception ResearchI VPR 19
© Copyright 1998 Haim Levkowitz
Array bracket after type name ...• void reverse(char[] strbuf, int
buffer_size) {• char[] buffer = new char[500];• ...
• }• Easier to read, understand
Page 20
Institute for Visualization and Perception ResearchI VPR 20
© Copyright 1998 Haim Levkowitz
Strings ...• NOT null-terminated array of characters• Almost primitive types (for compiler) …• Immutable …• Impossible to examine value of terminator
after last char of string• java.lang Package ...
Page 21
Institute for Visualization and Perception ResearchI VPR 21
© Copyright 1998 Haim Levkowitz
Almost primitive types (for compiler) ...• E.g., auto create String objects when
encounter double-quoted constant• Language defined operator on String
objects: + for string concatenation
Page 22
Institute for Visualization and Perception ResearchI VPR 22
© Copyright 1998 Haim Levkowitz
Immutable ...• No method to change contents of String• To modify contents
• Create StringBuffer from String object• Modify StringBuffer contents• Create new String from StringBuffer
contents
Page 23
Institute for Visualization and Perception ResearchI VPR 23
© Copyright 1998 Haim Levkowitz
java.lang Package ...
• Classes • E.g., String, StringBuffer
• and methods• E.g., length(), charAt(), equals(),
compareTo(), indexOf(), astIndexOf(), substring()
Page 24
Institute for Visualization and Perception ResearchI VPR 24
© Copyright 1998 Haim Levkowitz
Operators ...
• Almost all standard C operators• Differences …• New operators ...
Page 25
Institute for Visualization and Perception ResearchI VPR 25
© Copyright 1998 Haim Levkowitz
Differences ...
• No comma op to combine 2 expr'ns into 1• for statement simulates
• No *, &, sizeof• [ ] (array access), . (field access) not
considered operators
Page 26
Institute for Visualization and Perception ResearchI VPR 26
© Copyright 1998 Haim Levkowitz
New operators ...
• + applied to String values ...• instanceof ...• >>> ...• & and | …
Page 27
Institute for Visualization and Perception ResearchI VPR 27
© Copyright 1998 Haim Levkowitz
+ applied to String values ...• Concatenate them• If only one operand String, convert other• Automatic for primitive types• By calling toString() for non-primitive• Same precedence• += as expected for String values
Page 28
Institute for Visualization and Perception ResearchI VPR 28
© Copyright 1998 Haim Levkowitz
instanceof ...
• Return true if object on LHS is instance of class on RHS, or implements interface
• Return false if not, or if spec'd object is null
• Same precedence as <, <=, >, >=
Page 29
Institute for Visualization and Perception ResearchI VPR 29
© Copyright 1998 Haim Levkowitz
>>> ...
• All integral types signed ==> >> right shift w / sign extension
• >>> Treat value to be shifted as unsigned number
• Shift bits right with 0 extension• >>>= as expected
Page 30
Institute for Visualization and Perception ResearchI VPR 30
© Copyright 1998 Haim Levkowitz
& and | ...• Applied to integral types
• Bitwise AND and OR• Applied to boolean types
• Logical AND and OR• Always evaluate both operands
• Even when result determined by LHS• Useful for side effects in expressions to occur
• "Short-circuited" && and ||• &=, |= as expected
Page 31
Institute for Visualization and Perception ResearchI VPR 31
© Copyright 1998 Haim Levkowitz
Statements ...• The if/else, while, and do/while statements ...• The switch statement
• Same as in C• The for loop ...• Labeled break and continue statements
• Without labels: same as C• Labeled ...
• No goto statement ...• The synchronized statement ...• The package and import statements ...
Page 32
Institute for Visualization and Perception ResearchI VPR 32
© Copyright 1998 Haim Levkowitz
The if/else, while, and do/while statements ...• Boolean type cannot be cast to other
types• 0, null not same as false• non-0, non-null not same as true• ==> Conditional must be boolean
• e.g., while (i--) --> while (i-- > 0)
Page 33
Institute for Visualization and Perception ResearchI VPR 33
© Copyright 1998 Haim Levkowitz
The for loop ...
• Multiple comma-separated expressions ...
• Declare local loop var's in initialization (C++) ...
Page 34
Institute for Visualization and Perception ResearchI VPR 34
© Copyright 1998 Haim Levkowitz
Multiple comma-separated expressions ...• Only in initialization, increment section• Not in test section
Page 35
Institute for Visualization and Perception ResearchI VPR 35
© Copyright 1998 Haim Levkowitz
Declare local loop var's in initialization (C++) ...• for (int i = 0; i < my_array.length; i++)
• System.out.println("a[" + i + "] = " + my_array[i]);
• Var's declared so have for loop as scope
• ==> no effect on var's w / same name outside
Page 36
Institute for Visualization and Perception ResearchI VPR 36
© Copyright 1998 Haim Levkowitz
Labeled …
• break …• continue ...
Page 37
Institute for Visualization and Perception ResearchI VPR 37
© Copyright 1998 Haim Levkowitz
break ...
• Without label: terminate nearest enclosing for, while, do or switch
• Followed by label of enclosing statement: control xfer'd out of that statement
• Any req'd finally clauses executed• E.g., ...
Page 38
Institute for Visualization and Perception ResearchI VPR 38
© Copyright 1998 Haim Levkowitz
E.g., ...test: if (check(i)) {
try {for (int j = 0; j < 10; j++) {
if (j > i) break; // terminate this loopif (a{i][j] == null)
break test; // do the finally clause and} // terminate the if statement
}finally { cleanup(a, i, j); }
}
Page 39
Institute for Visualization and Perception ResearchI VPR 39
© Copyright 1998 Haim Levkowitz
continue ...
• Without label: stops iteration in progress ...
• Followed by label of enclosing loop ...
Page 40
Institute for Visualization and Perception ResearchI VPR 40
© Copyright 1998 Haim Levkowitz
Without label: stops iteration in progress ...• Resume execution after last statement
in while, do, for loop, just before loop iteration to begin again
Page 41
Institute for Visualization and Perception ResearchI VPR 41
© Copyright 1998 Haim Levkowitz
Followed by label of enclosing loop ...• skip execution to end of spec'd loop• finally clauses executed• E.g., ...
Page 42
Institute for Visualization and Perception ResearchI VPR 42
© Copyright 1998 Haim Levkowitz
E.g., ...
big_loop: while(!done) {if (test(a, b) == 0) continue // control goes to pt. 2try {
for (int i = 0; i < 10; i++) {if (b[i] == null)
continue; // control goes to pt. 1else if (b[i] == null)
continue big_loop; // control goes to pt. 2// after doing the finally block
doit(a[i], b[i]);// pt. 1. Increment and start loop again with
test}
}finally { cleanup(a, b); }
// pt. 2. Start loop again with the (!done) test
}
Page 43
Institute for Visualization and Perception ResearchI VPR 43
© Copyright 1998 Haim Levkowitz
No goto statement ...
• Reserved word, but not currently part of the language
• Labelled break, continue replace some uses
• try / catch / finally replace others
Page 44
Institute for Visualization and Perception ResearchI VPR 44
© Copyright 1998 Haim Levkowitz
The synchronized statement ...• Multithreaded ==> prevent corruption from
multiple modification• Critical sections: cannot execute
concurrently• synchronized (expression) { critical section
statements }• expression: must resolve to object / array
• Don't execute critical section till obtain lock• Used as method modifier
• Method is critical section
Page 45
Institute for Visualization and Perception ResearchI VPR 45
© Copyright 1998 Haim Levkowitz
The package and import statements ...• Already mentioned
Page 46
Institute for Visualization and Perception ResearchI VPR 46
© Copyright 1998 Haim Levkowitz
Exceptions and Exception Handling ...• Exceptions ...• Exception objects ...• Exception handling ...• Declaring exceptions ...• Defining and generating exceptions ...
Page 47
Institute for Visualization and Perception ResearchI VPR 47
© Copyright 1998 Haim Levkowitz
Exceptions ...
• Signal indicating exceptional condition• catch : handle it• Exceptions propagate up through
method, then up through method call stack, till caught
• ==> Error handling more regular
Page 48
Institute for Visualization and Perception ResearchI VPR 48
© Copyright 1998 Haim Levkowitz
Exception objects ...
• Instance of subclass of java.lang.Throwable• Throwable: two standard subclasses
• java.lang.Error Subclasses ...• java.lang.Exception Subclasses ...
• Contain data, define methods ...
Page 49
Institute for Visualization and Perception ResearchI VPR 49
© Copyright 1998 Haim Levkowitz
java.lang.Error Subclasses ...• Linkage problems related to dynamic
loading• VM problems
• e.g., out of memory• Almost always unrecoverable
• ==> Should not be caught
Page 50
Institute for Visualization and Perception ResearchI VPR 50
© Copyright 1998 Haim Levkowitz
java.lang.Exception Subclasses ...• May be caught and recovered from• E.g., java.io.EOFException• java.lang.ArrayAccessOutOFBounds
Page 51
Institute for Visualization and Perception ResearchI VPR 51
© Copyright 1998 Haim Levkowitz
Contain data, define methods ...• Throwable object: String message in def
• Set when exception object created• Pass arg to constructor method
• Inherited by all exception classes• Store error message to humans• Read w/ Throwable.getMessage()• Most exceptions contain only this• Some add, e.g., java.io.InterruptedIOException
• public in bytesTransferred• How much I/O completed before
Page 52
Institute for Visualization and Perception ResearchI VPR 52
© Copyright 1998 Haim Levkowitz
Exception handling ...
• try / catch / finally ...• try ...• catch ...• finally ...
Page 53
Institute for Visualization and Perception ResearchI VPR 53
© Copyright 1998 Haim Levkowitz
try {// normally, run top to bottom// sometimes exception, or exit // via break, continue, return
}catch (SomeException e1) {
// handle exception obj e1 of type SomeException or of subclass
}catch (AnotherException e2) {
// handle exception e2}finally {
// Always execute this after leave try clause// regardless of how left
}
try / catch / finally ...
Page 54
Institute for Visualization and Perception ResearchI VPR 54
© Copyright 1998 Haim Levkowitz
try ...
• Establish block of code • Handle its abnormal exits
• break, continue, return, exception• Doesn't do anything by itself
Page 55
Institute for Visualization and Perception ResearchI VPR 55
© Copyright 1998 Haim Levkowitz
catch ...
• Zero or more, following try block• Specify code to handle exceptions• Syntax: ea. clause w/ argument
• Type: Throwable / subclass• Exception invoke first catch w/ approp.
type arg• Code within implements handling
Page 56
Institute for Visualization and Perception ResearchI VPR 56
© Copyright 1998 Haim Levkowitz
finally ...
• Usually clean up after try• Guaranteed to execute always• Normally: at end of try block• Otherwise, executed before control
transfers to new destination• If there is catch block, xfer control to it
first
Page 57
Institute for Visualization and Perception ResearchI VPR 57
© Copyright 1998 Haim Levkowitz
Declaring exceptions ...
• Either catch exception, or specify type w/ throws clause in method declaration• E.g., ...
• Any subclass of Throwable that is not subclass of Error or RuntimeException
Defining and generating exceptions …
Page 58
Institute for Visualization and Perception ResearchI VPR 58
© Copyright 1998 Haim Levkowitz
E.g., …public void open_file() throws IOException {
// statements might generate uncaught// java.io.IOException
}public void myfunc(int arg) throws
MyException1, MyException2 ...
}
Page 59
Institute for Visualization and Perception ResearchI VPR 59
© Copyright 1998 Haim Levkowitz
Defining and generating exceptions ...• Can signal own exception with throw statement• Must be followed by Throwable object, or
subclass• throw new myException("condition occurred.");• ==> normal exec stopr; look for catch clause• finally blocks executed• Example 2-3
Page 60
Institute for Visualization and Perception ResearchI VPR 60
© Copyright 1998 Haim Levkowitz
Miscellaneous Differences ...
• Local variable declarations ...• Forward references ...• Method overloading ...• The void keyword ...• Modifiers ...• No structures or unions ...• No enumerated types ...• No bitfields ...• No typedef ...• No variable-length argument lists ...
Page 61
Institute for Visualization and Perception ResearchI VPR 61
© Copyright 1998 Haim Levkowitz
Local variable declarations ...• Anywhere in method body / block of
code• Not only as first statement in block
• Still, good style to group, usually at beg.
Page 62
Institute for Visualization and Perception ResearchI VPR 62
© Copyright 1998 Haim Levkowitz
Forward references ...
• Allowed, very flexible• Not allowed in variable initialization
Page 63
Institute for Visualization and Perception ResearchI VPR 63
© Copyright 1998 Haim Levkowitz
Method overloading ...
• Methods with same name, different signature• E.g., return different values• Take diff args (number, type, order)
• Usually same basic function• Diff ways, as convenient
Page 64
Institute for Visualization and Perception ResearchI VPR 64
© Copyright 1998 Haim Levkowitz
The void keyword ...
• Indicate function returns no value• Constructor methods diff
• Declare function(): no arguments• No void * type• No need (void) cast to ignore results
returned by non-void method
Page 65
Institute for Visualization and Perception ResearchI VPR 65
© Copyright 1998 Haim Levkowitz
Modifiers ...
• final ...• native ...• synchronized ...• transient ...• volatile ...
Page 66
Institute for Visualization and Perception ResearchI VPR 66
© Copyright 1998 Haim Levkowitz
final ...
• class: never subclassed• method: never overridden• variable: never have value set
Page 67
Institute for Visualization and Perception ResearchI VPR 67
© Copyright 1998 Haim Levkowitz
native ...
• Applied to method declaration• Indicates method implemented
elsewhere in C, or other platform dependent way
• Should have semicolon in place of body
Page 68
Institute for Visualization and Perception ResearchI VPR 68
© Copyright 1998 Haim Levkowitz
synchronized ...
• Mark critical section (seen already)• Indicates method modifies internal
state of class / instance of class ==> not thread-safe
• ==> Should obtain lock before running
Page 69
Institute for Visualization and Perception ResearchI VPR 69
© Copyright 1998 Haim Levkowitz
transient ...
• Applied to instance variables in class• Specified var no part of persistent
state of object• E.g., scratch var's
• Not currently used
Page 70
Institute for Visualization and Perception ResearchI VPR 70
© Copyright 1998 Haim Levkowitz
volatile ...• May be applied to variables• Specifices var changes asynchronously
• E.g., mem mapped H/W register on periph. dev.
• ==> Compiler should not attempt optimization
• read var's value from mem; shouldn't attempt save copy in register
Page 71
Institute for Visualization and Perception ResearchI VPR 71
© Copyright 1998 Haim Levkowitz
No structures or unions ...
• Class same as struct• Can simulate union features with
subclassing
Page 72
Institute for Visualization and Perception ResearchI VPR 72
© Copyright 1998 Haim Levkowitz
No enumerated types ...
• No enum keyword• Can partially simulated with static final
constant values
Page 73
Institute for Visualization and Perception ResearchI VPR 73
© Copyright 1998 Haim Levkowitz
No bitfields ...
• In C, mostly to interface with H/W devices
• Never needed in Java• Platform independent programming
model
Page 74
Institute for Visualization and Perception ResearchI VPR 74
© Copyright 1998 Haim Levkowitz
No typedef ...
• Cannot define aliases to type names• Much simpler type naming scheme ==>
no need
Page 75
Institute for Visualization and Perception ResearchI VPR 75
© Copyright 1998 Haim Levkowitz
No variable-length argument lists ...• Cannot define method w/ var number of
args• Strongly typed• No way to do type checking on method
with variable args• Can simulate with method overloading
for simple cases
Page 76
Institute for Visualization and Perception ResearchI VPR 76
© Copyright 1998 Haim Levkowitz
Variables...
• Fibonacci ...
Page 77
Institute for Visualization and Perception ResearchI VPR 77
© Copyright 1998 Haim Levkowitz
Fibonacci ...class Fibonacci {
/** Print out the Fibonacci sequence for values < 50 */public static void main(String[] args) {
int lo = 1;int hi = 1;
cont. ...System.out.println(lo);while (hi < 50) {
System.out.println(hi);hi = lo + hi; // new hilo = hi - lo; /* new lo is (sum - old lo)
i.e., the old hi */}
}}