My OCJP Prep
Threading Example
import java.util.Collections; import java.util.Iterator; import java.util.LinkedList; import java.util.List; public class Fabric extends Thread { public static void main(String[] args) { Thread t = new Thread(new Fabric()); Thread t2 = new Thread(new Fabric()); t.start(); t2.start(); } public void run() { for(int i = 0; i < 2; i++) { System.out.print(Thread.currentThread().getName() + " "); } } }
Inner Class and Static Nested Class Example
public class OuterClass { private String outerInstanceVar; public void foo() { System.out.println("Outer class"); } public class InnerClass { public void printVars() { // in non-static inner class, it has reference of outer class. // so, outerInstanceVar can be printed here. System.out.println( "Print Outer Class Instance Var.:" + outerInstanceVar); } public void foo() { System.out.println("Inner class"); } public void test() { this.foo(); OuterClass.this.foo(); } } public static class StaticNestedClass { public void printPrivateVariables() { // in static inner class, it has no reference of outer class. // so, outerInstanceVar can be printed here only when you create OuterClass instance. OuterClass outerClass = new OuterClass(); System.out.println("Print Outer Class Instance Var.:" + outerClass.outerInstanceVar); } } public static void main(String[] args) { // for inner class, must instanciate OuterClass to create InnerClass object. OuterClass o = new OuterClass(); OuterClass.InnerClass i = o.new InnerClass(); i.test(); // but for static nested class, no need to instanciate OuterClass to create InnerClass object. OuterClass.StaticNestedClass nestedObject = new OuterClass.StaticNestedClass(); } }
mmahmoud@ubuntu:~/Desktop/OCJP/test$ java InnerClassTest
Inner class
Outer class