Java Review
Java Review
Java Review
This document is copyright (C) Marty Stepp and Stanford Computer Science.
Licensed under Creave Commons A!ribuon 2.5 License. All rights reserved.
Variables
●
variable: A piece of the computer's memory that is given a
name and type, and can store a value.
●
A variable can be declared/inialized in one statement.
●
Syntax:
type name = value;
x 14
– double myGPA = 3.95;
myGPA 3.95
– int x = (11 % 3) + 12;
Java's primive types
primive types: 8 simple types for numbers, text, etc.
Java also has object types, which we'll talk about later
●
Syntax:
(type) expression
Examples:
double result = (double) 19 / 5; // 3.8
int result2 = (int) result; // 3
int x = (int) [Link](10, 3); // 1000
Increment and decrement
shortcuts to increase or decrease a variable's value by 1
int x = 2;
x++; // x = x + 1;
// x now stores 3
double gpa = 2.5;
gpa--; // gpa = gpa - 1;
// gpa now stores 1.5
Precedence
●
precedence: Order in which operators are evaluated.
– Generally operators evaluate le4-to-right.
1 - 2 - 3 is (1 - 2) - 3 which is -4
●
Syntax:
public static final type name = value;
– name is usually in ALL_UPPER_CASE
– Examples:
public static final int DAYS_IN_WEEK = 7;
public static final double INTEREST_RATE = 3.5;
public static final int SSN = 658234569;
Passing parameters
●
Declaraon:
public void name (type name, ..., type name) {
statement(s);
}
●
Call:
methodName (value, value, ..., value);
●
Example:
public static void main(String[] args) {
sayPassword(42); // The password is: 42
sayPassword(12345); // The password is: 12345
}
public static void sayPassword(int code) {
[Link]("The password is: " + code);
}
Return
●
return: To send out a value as the result of a method.
– The opposite of a parameter:
●
Parameters send informaon in from the caller to the method.
●
Return values send informaon out from a method to its caller.
-42 [Link](42)
42
main
2.71
3
[Link](2.71)
Java's Math class
Method name Descripon
[Link](value) absolute value
[Link](value) nearest whole number
[Link](value) rounds up
[Link](value) rounds down
Math.log10(value) logarithm, base 10
[Link](value1, value2) larger of two values
[Link](value1, value2) smaller of two values
[Link](base, exp) base to the exp power
[Link](value) square root
[Link](value) sine/cosine/tangent of
[Link](value) an angle in radians
Constant Descripon
[Link](value)
Math.E 2.7182818...
[Link](value) convert degrees to [Link] 3.1415926...
[Link](value) radians and back
●
Example:
// Returns the slope of the line between the given points.
public double slope(int x1, int y1, int x2, int y2) {
double dy = y2 - y1;
double dx = x2 - x1;
return dy / dx;
}
Strings
string: An object storing a sequence of text characters.
String name = "text";
String name = expression;
●
These methods are called using the dot notaon:
String gangsta = "Dr. Dre";
[Link]([Link]()); // 7
String test methods
Method Descripon
equals(str) whether two strings contain the same characters
equalsIgnoreCase(str) whether two strings contain the same characters, ignoring upper vs.
lower case
●
char values can be concatenated with strings.
char initial = 'P';
[Link](initial + " Diddy"); // P
Diddy
char vs. String
"h" is a String
'h' is a char (the two behave di8erently)
String is an object; it contains methods
String s = "h";
s = [Link](); // 'H'
int len = [Link](); // 1
char first = [Link](0); // 'H'
What is s + 1 ? What is c + 1 ?
What is s + s ? What is c + c ?
if/else
Executes one block if a test is true, another if false
if (test) {
statement(s);
} else {
statement(s);
}
● Example:
double gpa = [Link]();
if (gpa >= 2.0) {
[Link]("Welcome to Mars University!");
} else {
[Link]("Application denied.");
}
Relaonal expressions
● A test in an if is the same as in a for loop.
for (int i = 1; i <= 10; i++) { ...
if (i <= 10) { ...
– These are boolean expressions.
●
"Truth tables" for each, used with logical values p and q:
p q p && q p || q p !p
true true true true true false
true false false true false true
false true false true
false false false false
Type boolean
●
boolean: A logical type whose values are true and false.
– A test in an if, for, or while is a boolean expression.
– You can create boolean variables, pass boolean parameters, return
boolean values from methods, ...
●
Example:
int num = 1; // initialization
while (num <= 200) { // test
[Link](num + " ");
num = num * 2; // update
}
– OUTPUT:
1 2 4 8 16 32 64 128
do/while loops
● do/while loop: Executes statements repeatedly while a condion is true,
tesng it at the end of each repeon.
do {
statement(s);
} while (test);
Example:
// prompt until the user gets the right password
String phrase;
do {
[Link]("Password: ");
phrase = [Link]();
} while ();
The Random class
●
A Random object generates pseudo-random* numbers.
– Class Random is found in the [Link] package.
import [Link].*;
Method name Descripon
nextInt() returns a random integer
nextInt(max) returns a random integer in the range [0, max)
in other words, 0 to max-1 inclusive
– Example:
Random rand = new Random();
int randomNumber = [Link](10); // 0-9
break
●
break statement: Immediately exits a loop.
– Can be used to write a loop whose test is in the middle.
– Such loops are o4en called "forever" loops because their header's
boolean test is o4en changed to a trivial true.
while (true) {
statement(s);
if (test) {
break;
}
statement(s);
}
index 0 1 2 3 4 5 6 7 8 9
value 12 49 -2 26 5 17 -6 84 72 3
index 0 1 2 3 4 5 6 7 8 9
value 0 0 0 0 0 0 0 0 0 0
Accessing elements
name[index] // access
name[index] = value; // modify
– Example:
numbers[0] = 27;
numbers[3] = -6;
[Link](numbers[0]);
if (numbers[3] < 0) {
[Link]("Element 3 is negative.");
}
index 0 1 2 3 4 5 6 7 8 9
value 27
0 0 0 -6
0 0 0 0 0 0 0
Out-of-bounds
●
Legal indexes: between 0 and the array's length - 1.
– Reading or wring any index outside this range will throw an
ArrayIndexOutOfBoundsException.
●
Example:
int[] data = new int[10];
[Link](data[0]); // okay
[Link](data[9]); // okay
[Link](data[-1]); // exception
[Link](data[10]); // exception
index 0 1 2 3 4 5 6 7 8 9
value 0 0 0 0 0 0 0 0 0 0
The length 7eld
●
An array's length Eeld stores its number of elements.
[Link]
index 0 1 2 3 4 5 6
value 12 49 -2 26 5 17 -6
Useful when you know what the array's elements will be.
The compiler Egures out the size by counng the values.
The Arrays class
●
Class Arrays in package [Link] has useful stac
methods for manipulang arrays:
Method name Descripon
binarySearch(array, value) returns the index of the given value in a
sorted array (< 0 if not found)
equals(array1, array2) returns true if the two arrays contain the
same elements in the same order
Example:
public double average(int[] numbers) {
...
}
Call:
methodName(arrayName);
Example:
int[] scores = {13, 17, 12, 15, 11};
double avg = average(scores);
Arrays as return
• Declaring:
public type[] methodName(parameters) {
Example:
public int[] countDigits(int n) {
int[] counts = new int[10];
...
return counts;
}
• Calling:
type[] name = methodName(parameters);
Example:
public static void main(String[] args) {
int[] tally = countDigits(229231007);
[Link]([Link](tally));
}
Value semancs (primives)
●
value semancs: Behavior where values are copied when
assigned to each other or passed as parameters.
– When one primive variable is assigned to another,
its value is copied.
– Modifying the value of one variable does not a8ect others.
int x = 5;
x
int y = x; // x = 5, y = 5
y = 17; // x = 5, y = 17
x = 8; // x = 8, y = 17 y
Reference semancs (objects)
●
reference semancs: Behavior where variables actually store
the address of an object in memory.
– When one reference variable is assigned to another, the object is not
copied; both variables refer to the same object.
– Modifying the value of one variable will a8ect others.
value 4
7 5 2 12 14 14 9
a2
Null
● null : A reference that does not refer to any object.
– Fields of an object that refer to objects are inialized to null.
– The elements of an array of objects are inialized to null.
String[] words = new String[5];
Point[] points = new Point[3];
index 0 1 2 3 4
words
value null null null null null
index 0 1 2
points
value null null null
Null pointer excepon
●
dereference: To access data or methods of an object with the
dot notaon, such as [Link]().
– It is illegal to dereference null (causes an excepon).
– null is not any object, so it has no methods or data.
Output:
word is: null
Exception in thread "main"
[Link]
at [Link]([Link])
Classes and objects
class: A program enty that represents either:
1. A program / module, or
2. A template for a new type of objects.
●
Declaraon syntax:
private type name;
– Example:
public class Student {
private String name; // each object now has
private double gpa; // a name and gpa field
}
Instance methods
●
instance method: One that exists inside each object of a class
and deEnes behavior of that object.
Example:
public void shout() {
[Link]("HELLO THERE!");
}
A Point class
public class Point {
private int x;
private int y;
// Changes the location of this Point object.
public void draw(Graphics g) {
[Link](x, y, 3, 3);
[Link]("(" + x + ", " + y + ")", x, y);
}
}
– Each Point object contains data Eelds named x and y.
– Each Point object contains a method named draw that draws that
point at its current x/y posion.
The implicit parameter
●
implicit parameter:
The object on which an instance method is called.
– During the call [Link](g);
the object referred to by p1 is the implicit parameter.
– During the call [Link](g);
the object referred to by p2 is the implicit parameter.
●
accessor: A method that lets clients examine object state.
– Example: A distanceFromOrigin method that tells how far a
Point is away from (0, 0).
– Accessors o4en have a non-void return type.
●
mutator: A method that modiEes an object's state.
– Example: A translate method that shi4s the posion of a Point
by a given amount.
Constructors
●
constructor: Inializes the state of new objects.
public type(parameters) {
statements;
}
– Example:
public Point(int initialX, int initialY) {
x = initialX;
y = initialY;
}
●
Syntax for using this:
– To refer to a Eeld:
this.7eld
– To call a method:
[Link](parameters);
●
Declaraon syntax:
public static type name(parameters) {
statements;
}
Inheritance
●
inheritance: A way to form new classes based on exisng
classes, taking on their a!ributes/behavior.
– a way to group related classes
– a way to share code between two or more classes
●
One class can extend another, absorbing its data/behavior.
– superclass: The parent class that is being extended.
– subclass: The child class that extends the superclass and inherits its
behavior.
●
Subclass gets a copy of every Eeld and method from superclass
Inheritance syntax
public class name extends superclass {
Example:
●
A variable of type T can hold an object of any subclass of T.
Employee ed = new LegalSecretary();
●
When a method is called, it behaves as a LegalSecretary.
[Link]([Link]()); // 55000.0
[Link]([Link]()); // pink
Collecons and lists
●
collecon: an object that stores data ("elements")
import [Link].*; // to use Java's collections
●
list: a collecon of elements with 0-based indexes
– elements can be added to the front, back, or elsewhere
– a list has a size (number of elements that have been added)
– in Java, a list can be represented as an ArrayList object
Idea of a list
●
An ArrayList is like an array that resizes to Et its contents.
●
When a list is created, it is inially empty.
[]
●
You can add items to the list. (By default, adds at end of list)
[hello, ABC, goodbye, okay]
– The list object keeps track of the element values that have been added
to it, their order, indexes, and its total size.
– You can add, remove, get, set, ... any index at any me.
Type parameters (generics)
ArrayList<Type> name = new ArrayList<Type>();
●
When construcng an ArrayList, you must specify the
type of its elements in < >
– This is called a type parameter ; ArrayList is a generic class.
– Allows the ArrayList class to store lists of di8erent types.
●
Example:
// Returns count of plural words in the given list.
public int countPlural(ArrayList<String> list) {
int count = 0;
for (int i = 0; i < [Link](); i++) {
String str = [Link](i);
if ([Link]("s")) {
count++;
}
}
return count;
}
Throwing excepons
throw new ExceponType();
throw new ExceponType("message");
●
Generates an excepon that will crash the program,
unless it has code to handle ("catch") the excepon.
●
Common excepon types:
– ArithmecExcepon, ArrayIndexOutOfBoundsExcepon, FileNotFoundExcepon, IllegalArgumentExcepon,
IllegalStateExcepon, IOExcepon, NoSuchElementExcepon, NullPointerExcepon, RunmeExcepon,
UnsupportedOperaonExcepon
●
Why would anyone ever want a program to crash?
Sets
●
set: A collecon of unique values (no duplicates allowed)
that can perform the following operaons eOciently:
– add, remove, search (contains)
"the"
"if" "of"
[Link]("to") "to"
"down" "from" true
"by" "she"
[Link]("be") "you" false
"in"
"why" "him"
set
Set implementaon
●
in Java, sets are represented by Set type in [Link]
• Set is implemented by HashSet and TreeSet classes
●
Provides a clean syntax for looping over the elements of a Set,
List, array, or other collecon
Set<Double> grades = new HashSet<Double>();
...
●
basic map operaons:
– put(key, value ): Adds a
mapping from a key to
a value.
– remove(key ): Removes
the given key and its
[Link]("Juliet") returns "Capulet"
mapped value.
Map implementaon
●
in Java, maps are represented by Map type in [Link]
• Map is implemented by the HashMap and TreeMap classes
– HashMap: implemented using an array called a "hash table";
extremely fast: O(1) ; keys are stored in unpredictable order
– Later, we can supply only the key and get back the related value:
Allows us to ask: What is Suzy's phone number?
get("Suzy")
Map
"206-685-2181"
keySet and values
• keySet method returns a Set of all keys in the map
– can loop over the keys in a foreach loop
– can get each key's associated value by calling get on the map
Map<String, Integer> ages = new TreeMap<String, Integer>();
[Link]("Marty", 19);
[Link]("Geneva", 2); // [Link]() returns Set<String>
[Link]("Vicki", 57);
for (String name : [Link]()) { // Geneva -> 2
int age = [Link](name); // Marty -> 19
[Link](name + " -> " + age); // Vicki -> 57
}
●
A call of [Link](B) will return:
a value < 0 if A comes "before" B in the ordering,
a value > 0 if A comes "a4er" B in the ordering,
or 0 if A and B are considered "equal" in the ordering.
Using compareTo
• compareTo can be used as a test in an if statement.
String a = "alice";
String b = "bob";
if ([Link](b) < 0) { // true
...
}
Primitives Objects
if (a < b) { ... if ([Link](b) < 0) { ...
if (a <= b) { ... if ([Link](b) <= 0) { ...
if (a == b) { ... if ([Link](b) == 0) { ...
if (a != b) { ... if ([Link](b) != 0) { ...
if (a >= b) { ... if ([Link](b) >= 0) { ...
if (a > b) { ... if ([Link](b) > 0) { ...
compareTo and collecons
●
You can use an array or list of strings with Java's included binary
search method because it calls compareTo internally.
String[] a = {"al", "bob", "cari", "dan", "mike"};
int index = [Link](a, "dan"); // 3
●
Java's TreeSet/Map use compareTo internally for ordering.
Set<String> set = new TreeSet<String>();
for (String s : a) {
[Link](s);
}
[Link](s);
// [al, bob, cari, dan, mike]
Ordering our own types
●
We cannot binary search or make a TreeSet/Map of arbitrary
types, because Java doesn't know how to order the elements.
– The program compiles but crashes when we run it.
●
A class can implement the Comparable interface to deEne a
natural ordering funcon for its objects.
●
A call to your compareTo method should return:
a value < 0 if this object comes "before" the other object,
a value > 0 if this object comes "a4er" the other object,
or0 if this object is considered "equal" to the other.
• If you want mulple orderings, use a Comparator instead (see Ch. 13.1)
Comparable example
public class Point implements Comparable<Point> {
private int x;
private int y;
...
// sort by x and break ties by y
public int compareTo(Point other) {
if (x < other.x) {
return -1;
} else if (x > other.x) {
return 1;
} else if (y < other.y) {
return -1; // same x, smaller y
} else if (y > other.y) {
return 1; // same x, larger y
} else {
return 0; // same x and same y
}
}
}
Collections class
Method name Description
binarySearch(list, value) returns the index of the given value in a
sorted list (< 0 if not found)
copy(listTo, listFrom) copies listFrom's elements to listTo
emptyList(), emptyMap(), returns a read-only collection of the given
emptySet() type that has no elements
fill(list, value) sets every element in the list to have the
given value
max(collection), min(collection) returns largest/smallest element
●
override: To replace a superclass's method by wring a new
version of that method in a subclass.
public class Lawyer extends Employee {
// overrides getSalary in Employee; a raise!
public double getSalary() {
return 55000.00;
}
}
The super keyword
[Link](parameters)
super(parameters);
●
The Object class deEnes several methods
that become part of every class you write.
For example:
– public String toString()
Returns a text representaon of the object,
usually so that it can be printed.
Object methods
method description
protected Object clone() creates a copy of the object
public boolean equals(Object o) returns whether two objects have
the same state
protected void finalize() used for garbage collection
public Class<?> getClass() info about the object's type
public int hashCode() a code suitable for putting this
object into a hash collection
public String toString() text representation of object
public void notify() methods related to concurrency
public void notifyAll() and locking (seen later)
public void wait()
public void wait(...)
– What does this list of methods tell you about Java's design?
Using the Object class
●
You can store any object in a variable of type Object.
Object o1 = new Point(5, -3);
Object o2 = "hello there";
●
You can write methods that accept an Object parameter.
public void checkNotNull(Object o) {
if (o != null) {
throw new IllegalArgumentException();
}
●
You can make arrays or collecons of Objects.
Object[] a = new Object[5];
a[0] = "hello";
a[1] = new Random();
List<Object> list = new ArrayList<Object>();
Recall: comparing objects
●
The == operator does not work well with objects.
– It compares references, not objects' state.
– It produces true only when you compare an object to itself.
Point p1 = new Point(5, 3);
Point p2 = new Point(5, 3);
Point p3 = p2;
x 5 y 3
p1
// p1 == p2 is false; ...
// p1 == p3 is false;
// p2 == p3 is true
p2 x 5 y 3
// [Link](p2)? ...
// [Link](p3)? p3
Default equals method
●
The Object class's equals implementaon is very simple:
public class Object {
...
public boolean equals(Object o) {
return this == o;
}
}
●
However:
– When we have used equals with various objects, it didn't behave like
== . Why not? if ([Link](str2)) { ...
– The Java API documentaon for equals is elaborate. Why?
Implemenng equals
public boolean equals(Object name) {
statement(s) that return a boolean value ;
}
●
Casng references is di8erent than casng primives.
– Really casng an Object reference into a Point reference.
– Doesn't actually change the object that is referred to.
– Tells the compiler to assume that o1 refers to a Point object.
The instanceof keyword
if (variable instanceof type) {
statement(s);
}
expression result
s instanceof Point false
• Asks if a variable refers s instanceof String true
to an object of a given type. p instanceof Point true
p instanceof String false
– Used as a boolean test.
p instanceof Object true
s instanceof Object true
String s = "hello";
null instanceof String false
Point p = new Point();
null instanceof Object false
equals method for Points
// Returns whether o refers to a Point object with
// the same (x, y) coordinates as this Point.
public boolean equals(Object o) {
if (o instanceof Point) {
// o is a Point; cast and compare it
Point other = (Point) o;
return x == other.x && y == other.y;
} else {
// o is not a Point; cannot be equal
return false;
}
}
More about equals
●
Equality is expected to be reRexive, symmetric, and transive:
[Link](a) is true for every object a
[Link](b) ↔ [Link](a)
([Link](b) && [Link](c)) ↔ [Link](c)
●
No non-null object is equal to null:
[Link](null) is false for every object a
●
Two sets are equal if they contain the same elements:
Set<String> set1 = new HashSet<String>();
Set<String> set2 = new TreeSet<String>();
for (String s : "hi how are you".split(" ")) {
[Link](s); [Link](s);
}
[Link]([Link](set2)); // true
The hashCode method
public int hashCode()
Returns an integer hash code for this object, indicang its preferred to
place it in a hash table / hash set.
– Allows us to store non-int values in a hash set/map:
●
How is hashCode implemented?
– Depends on the type of object and its state.
●
Example: a String's hashCode adds the ASCII values of its le!ers.
– You can write your own hashCode methods in classes you write.
●
All classes come with a default version based on memory address.
Polymorphism
●
polymorphism: Ability for the same code to be used with
di8erent types of objects and behave di8erently with each.
●
A variable or parameter of type T can refer to any subclass of T.
Employee ed = new Lawyer();
Object otto = new Secretary();