2. Agenda
Java History Exception
OO Primitive Type / Wrapper
Object / Class / Interface Tea break
Inheritance / Java Architecture at a
Polymorphism Glance (Java 6)
Override / Overload New Features since JDK 5
Access Level / Visibility Generics
this / super / static Touch GC
Inner Class
6. Object / Class / Interface I
What is an object / class (interface)?
Human VS Jay
Template VS Instance
7. public class Human {
private int age; // default value?
private String name; // default value?
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
}
Human jay = new Human();
jay.setName(“Jay”);
jay.setAge(28);
8. Object / Class / Interface II
Why OO?
Cohesion / encapsulation
Direct
Human.say(“Hello”) VS say(&Human, “hello”)
Inheritance Unit
10. Polymorphism (Java VS C++)
public class Human{ class Human{
public void say(){ public:
System.out.println(“I virtual void say(){
am a human”); cout << “I am a human”;
} }
} };
public class Jay extends Human{ class Jay : public Human{
public void say(){ public:
System.out.println(“I void say(){
am Jay”); cout << “I am Jay”;
} }
} };
Human human = new Jay(); Human* human = new Jay();
human.say(); // which say()? human->say(); // which say()?
11. Overload / Override
Overload
Different Method Signature
Same Method Name
Different Parameters (?)
Different Return Type (?)
Override
Same Method Signature
12. public class SuperOverrideOverload {
public void overload(int number) {
System.out.println("super int overload");
}
public void overload(Integer number) {
System.out.println("super Integer overload");
}
public void overload(long number) {
System.out.println("super long overload");
}
public void overload(Long number) {
System.out.println("super Long overload");
}
public void overload(Object number) {
System.out.println("super Object overload");
}
public static void main(String[] args) {
new SuperOverrideOverload().overload(100);
}
}
13. public class OverrideOverload extends SuperOverrideOverload {
@Override
public void overload(int number) {
System.out.println("int overload");
}
@Override
public void overload(Integer number) {
System.out.println("Integer overload");
}
@Override
public void overload(long number) {
System.out.println("long overload");
}
@Override
public void overload(Long number) {
System.out.println("Long overload");
}
@Override
public void overload(Object number) {
System.out.println("Object overload");
}
public static void main(String[] args) {
new OverrideOverload().overload(100);
}
}
14. Access Level / Visibility
public
protected
private
(default)
15. super / this / static
super.xxx()
super()
this.xxx()
this()
static
public static void main(String[] args)
Instance initialize order
Default values
16. Inner Class
Types
Inner class
Static inner class
Anonymous (parameter) inner class
this
Access level
17. (Static) Inner Class
public class Outer {
private int id;
public class Inner {
private int id;
private int getID() {
return this.id; // which id?
}
}
}
new Outer().new Inner();
public class Outer {
public static class Inner {}
}
new Outer.Inner();
18. Anonymous (Parameter)
Inner Class
Runnable runnable = new Runnable() {
public void run() {
...
}
};
public void doRun(Runnable runnable) {...}
doRun(new Runnable() {
public void run() {
...
}
});
19. Primitive Type / Wrapper
byte - Byte char - Character
8 bit signed 16 bit unsigned
short - Short float - Float
16 bit signed 32 bit signed
int - Integer double - Double
32 bit signed 64 bit signed
long - Long boolean - Boolean
64 bit signed
20. Exception
Why Exception?
Error Code VS Exception
What’s in an Exception?
Message (String)
Cause (Throwable)
Stacktrace[]
exception location info. (log4j)
try / catch / finally
29. Enhanced for Loop
List <String> strings = ...;
for (int i = 0;i<strings.length();i++) {
String string = strings.get(i);
30. Enhanced for Loop
List <String> strings = ...;
for (int i = 0;i<strings.length();i++) {
String string = strings.get(i);
...
31. Enhanced for Loop
List <String> strings = ...;
for (int i = 0;i<strings.length();i++) {
String string = strings.get(i);
...
}
32. Enhanced for Loop
List <String> strings = ...;
for (int i = 0;i<strings.length();i++) {
String string = strings.get(i);
...
}
33. Enhanced for Loop
List <String> strings = ...;
for (int i = 0;i<strings.length();i++) {
String string = strings.get(i);
...
}
Iterator<String> iter = string.iterator();
34. Enhanced for Loop
List <String> strings = ...;
for (int i = 0;i<strings.length();i++) {
String string = strings.get(i);
...
}
Iterator<String> iter = string.iterator();
while(iter.hasNext()) {
35. Enhanced for Loop
List <String> strings = ...;
for (int i = 0;i<strings.length();i++) {
String string = strings.get(i);
...
}
Iterator<String> iter = string.iterator();
while(iter.hasNext()) {
String string = iter.next();
36. Enhanced for Loop
List <String> strings = ...;
for (int i = 0;i<strings.length();i++) {
String string = strings.get(i);
...
}
Iterator<String> iter = string.iterator();
while(iter.hasNext()) {
String string = iter.next();
...
37. Enhanced for Loop
List <String> strings = ...;
for (int i = 0;i<strings.length();i++) {
String string = strings.get(i);
...
}
Iterator<String> iter = string.iterator();
while(iter.hasNext()) {
String string = iter.next();
...
}
38. Enhanced for Loop
List <String> strings = ...;
for (int i = 0;i<strings.length();i++) {
String string = strings.get(i);
...
}
Iterator<String> iter = string.iterator();
while(iter.hasNext()) {
String string = iter.next();
...
}
39. Enhanced for Loop
List <String> strings = ...;
for (int i = 0;i<strings.length();i++) {
String string = strings.get(i);
...
}
Iterator<String> iter = string.iterator();
while(iter.hasNext()) {
String string = iter.next();
...
}
for(String string:strings) {
40. Enhanced for Loop
List <String> strings = ...;
for (int i = 0;i<strings.length();i++) {
String string = strings.get(i);
...
}
Iterator<String> iter = string.iterator();
while(iter.hasNext()) {
String string = iter.next();
...
}
for(String string:strings) {
...
41. Enhanced for Loop
List <String> strings = ...;
for (int i = 0;i<strings.length();i++) {
String string = strings.get(i);
...
}
Iterator<String> iter = string.iterator();
while(iter.hasNext()) {
String string = iter.next();
...
}
for(String string:strings) {
...
}
43. Auto Boxing / Unboxing
List<Integer> numbers = ...;
for(int i = 0;i<100;i++) {
numbers.add(i);
}
int sum = 0;
for(int number:numbers) {
sum += number;
}
44. Enum
public enum Gender { public abstract
MALE() { String toString();
public String }
toString() {
return “ ”; switch(gender) {
case MALE: ...
}
case FEMALE: ...
}, FEMALE() {
}
public String
toString() {
if(gender == MALE) {...}
return “ ”;
} gender.name();
};
Enum.valueOf(Gender.clas
s, “MALE”);
45. Static Import
public double calculate (double a, double b, double c){
return Math.sqrt(a * a + b * b) + 2 * Math.PI *
Math.sin(c);
}
import static java.lang.Math.*;
public double calculate (double a, double b, double c){
return sqrt(a * a + b * b) + 2 * PI * sin(c);
}
46. Generics
Type Template
String[] VS List (prev.)
Erasing (during compilation)
How to Use?
String[] VS List<String> (now)
?, extends
How to Define?
47. Generics I
List strings = ...;
strings.add(“hello”);
strings.add(Boolean.TRUE); // error?
for(int i = 0;i<strings.length();i++) {
String string = (String)strings.get(i);
...
}
List<String> strings = ...;
52. Generics II
public class List<T> {
public void add(T t) {...}
public T get(int index) {...}
....
53. Generics II
public class List<T> {
public void add(T t) {...}
public T get(int index) {...}
....
}
54. Generics II
public class List<T> {
public void add(T t) {...}
public T get(int index) {...}
....
}
55. Generics II
public class List<T> {
public void add(T t) {...}
public T get(int index) {...}
....
}
public static <T extends Enum<T>> T valueOf(Class<T> type,
String string) {...}
56. Generics II
public class List<T> {
public void add(T t) {...}
public T get(int index) {...}
....
}
public static <T extends Enum<T>> T valueOf(Class<T> type,
String string) {...}
57. Generics II
public class List<T> {
public void add(T t) {...}
public T get(int index) {...}
....
}
public static <T extends Enum<T>> T valueOf(Class<T> type,
String string) {...}
List<String> strings = ...;
58. Generics II
public class List<T> {
public void add(T t) {...}
public T get(int index) {...}
....
}
public static <T extends Enum<T>> T valueOf(Class<T> type,
String string) {...}
List<String> strings = ...;
public addObjects(List<Object> list) {...}
59. Generics II
public class List<T> {
public void add(T t) {...}
public T get(int index) {...}
....
}
public static <T extends Enum<T>> T valueOf(Class<T> type,
String string) {...}
List<String> strings = ...;
public addObjects(List<Object> list) {...}
addObjects(strings); // error?
60. Generics II
public class List<T> {
public void add(T t) {...}
public T get(int index) {...}
....
}
public static <T extends Enum<T>> T valueOf(Class<T> type,
String string) {...}
List<String> strings = ...;
public addObjects(List<Object> list) {...}
addObjects(strings); // error?
61. Generics II
public class List<T> {
public void add(T t) {...}
public T get(int index) {...}
....
}
public static <T extends Enum<T>> T valueOf(Class<T> type,
String string) {...}
List<String> strings = ...;
public addObjects(List<Object> list) {...}
addObjects(strings); // error?
public addObjects(List<? extends Object> list) {...}
62. Generics II
public class List<T> {
public void add(T t) {...}
public T get(int index) {...}
....
}
public static <T extends Enum<T>> T valueOf(Class<T> type,
String string) {...}
List<String> strings = ...;
public addObjects(List<Object> list) {...}
addObjects(strings); // error?
public addObjects(List<? extends Object> list) {...}
addObjects(strings); // error?
63. Touch GC
What is Garbage? “Generation”
Isolated Objects Memory Leak (in Java)?
How to Collect? Why?
Heap VS Stack How to Avoid?
Reference Count
Compress and Collect
Copy and Collect
64. Revision
Java History Inner Class
OO Exception
Object / Class / Interface Primitive Type / Wrapper
Inheritance / Java Architecture at a
Polymorphism Glance (Java 6)
Override / Overload New Features since JDK 5
Access Level / Visibility Generics
this / super / static Touch GC