Line 135: | Line 135: | ||
Dialog.show(Duration.Long); |
Dialog.show(Duration.Long); |
||
+ | } |
||
+ | </source> |
||
+ | |||
+ | |||
+ | ===Varargs === |
||
+ | * Variable size argument lists for method |
||
+ | |||
+ | <source lang="java"> |
||
+ | void orderCar(int modelNo, String... options) {} |
||
+ | |||
+ | orderCar(Benz.E_CLASS, "navigation", "hi pass"); |
||
+ | |||
+ | </source> |
||
+ | |||
+ | <source lang="java"> |
||
+ | public void foo(int i, String... strings) { |
||
+ | String[] someStrings = strings; |
||
+ | // rest of method body |
||
} |
} |
||
</source> |
</source> |
Revision as of 05:53, 17 November 2013
doc & reference
- http://howtodoinjava.com/ - how to do in java. A very good guy who share lots of his experience
- http://www.mkyong.com/ - Another site which you can find java dev experience
- http://www.careercup.com/ - career cup. A site you can find interview questions.
Singleton
- http://www.infoq.com/cn/articles/double-checked-locking-with-delay-initialization - singleton double check locking and lazy initialize
- http://en.wikipedia.org/wiki/Singleton_pattern#Lazy_initialization
static synchronized method
- difference between static synchronized method and non-static synchronized method
- The lock objects are difference between static synchronized method and non-static synchronized method. Static synchronized method lock object is class object (lock object: FooClass.class), non-static synchronized lock object is instance object (lock object: this).
public class Foo {
public static synchronized void methodA() {}
public synchronized void methodB() {}
}
It's roughly equals
public class Foo {
public static void methodA() {
synchronized(Foo.class) {
...
}
}
public void methodB() {
synchronized(this){
}
}
}
HashMap
- http://howtodoinjava.com/2012/10/09/how-hashmap-works-in-java/ - how HashMap work in java
- http://howtodoinjava.com/2012/10/09/working-with-hashcode-and-equals-methods-in-java/ - working with equals(), hashCode() in java
Java 5 new features
Generics
- Add compile time type safe
- Elimination drudgery class casting
old style:
List list = new ArrayList();
...
String s = (String)list.get(0);
new style:
List<String> list = new ArrayList<String>();
...
String s = list.get(0);
Enhance for Loop
- The new enhanced for loop provides a simple, consistent syntax for iterating over collections and arrays.
old style:
String[] arr = new String[]{"alpha", "beta"};
for (int i=0; i<=arr.length; i++) {
String t = arr[i];
System.out.println(t);
}
new style:
String[] arr = new String[]{"alpha", "beta"};
for (String s : arr) {
System.out.println(s);
}
- some limitation of enhance loop, some time we need index and iterator
example need index:
for (int i=0; i<numbers.length; i++) {
if (i !=0 && i != numbers.length - 1) {
System.out.println(",");
}
System.out.println(numbers[i]);
}
example need iterator:
for (Iterator<String> it = n.iterator(); it.hasNext(); ) {
if (it.next() < 0) it.remove();
}
Auto Boxing/ Auto un-boxing
- auto conversion between primitives and wrappers
Type safe Enums
- Enums are type safe.
- Enums are Serializable and Comparable by default
- Programmers doesn’t require to do extra work of implementing toString(), equals() and hashCode(). Enums provide implementation of these by default.
- Programmers can use Enums in switch-case statements.
- Enums are permitted to implement to interfaces.
old style:
public class Dialog {
public static final int SHORT = 0;
public static final int LONG = 1;
public static void show(int duration) {
if(duration == SHORT) ...
else if (duration == LONG) ...
}
....
Dialog.show(Dialog.LONG);
}
new style:
public class Dialog {
public enum Duration {LONG, SHORT};
public static void show(Duration e) {
if (e == Duration.SHORT) ...
else if (e == Duration.Long) ...
}
...
Dialog.show(Duration.Long);
}
Varargs
- Variable size argument lists for method
void orderCar(int modelNo, String... options) {}
orderCar(Benz.E_CLASS, "navigation", "hi pass");
public void foo(int i, String... strings) {
String[] someStrings = strings;
// rest of method body
}