1. 靜態導入 import static java.lang.Math.*;
2. 可變參數 如: int add(int x,int … args)
3. for循環增強功能 for(type x: array) { System.out.println(x+” ”)}
4. 自動裝箱 Integer I = 10; (保證是同一個對象 -128~127) 自動拆箱 Integer I = 10; int x= I;
package java高新技術;
public class TestInteger {
public static void main(String[] args) {
int x1 = 1;
int x2 = 1;
Integer x3 = 1;
Integer x4 = 1;
Integer x5 = 128;
Integer x6 = 128;
int x7 = Integer.valueOf(128);
int x8 = Integer.valueOf(128);
System.out.println(x1==x2);
//System.out.println(x2==x3);
System.out.println(x3==x4);
System.out.println(x5==x6);
System.out.println(x7==x8);
}
}
5. 枚舉類
一個枚舉類中的對象就是這個枚舉類的子類對象,枚舉類中可以有構造方法,但是必須要是private。
package java高新技術;
/**
* 用枚舉可以簡單實現單例 ,一個枚舉中只有一個對象
*/
public class TestEnum {
public enum Week
{
SUN(1),MON(1),TUE(1),WED,THU,FRI,SAR; //都是Week的子類對象
//構造方法
private Week(){System.out.println("this is first constructor");};
private Week(int day){System.out.println("this is second constructor");};
}
public enum TrafficLamp{
RED (20){
@Override
public TrafficLamp nextLamp() {
return GREEN;
}
}, GREEN(30){
@Override
public TrafficLamp nextLamp() {
// TODO Auto-generated method stub
return YELLOW;
}
},YELLOW(40){
@Override
public TrafficLamp nextLamp() {
// TODO Auto-generated method stub
return RED;
}
};
public abstract TrafficLamp nextLamp();
private int time;
private TrafficLamp(int time){
this.time = time;
}
}
/**
* @param args
*/
public static void main(String[] args) {
System.out.println(Week.FRI);
System.out.println(Week.FRI.ordinal());
System.out.println(Week.valueOf("SUN"));
System.out.println(Week.values().length);
}
}
6. Class
8個基本類型 + void 都屬於9 個預定義的Class對象,原始類。
package java高新技術;
public class TestClass {
public static void main(String[] args)throws Exception {
/**
* 三種方法得到Class 字節碼,因爲是同一個字節碼 所以相同
*/
String s = "test";
Class c1 = s.getClass();
Class c2 = String.class;
Class c3 = Class.forName("java.lang.String");
System.out.println(c1 == c2);
System.out.println(c1 == c3);
System.out.println("int.class == Integer.class? "+(int.class == Integer.class));
System.out.println("int.class == Integer.TYPE? "+(int.class == Integer.TYPE));
System.out.println("int[].class is primitive? "+int[].class.isPrimitive());
System.out.println("int[].class is primitive? "+int[].class.isArray());
System.out.println("void.class is primitive?"+ void.class.isPrimitive());
}
}
7. 反射調用一個類中的域值
package java高新技術;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
class B{
private int x;
public B(){};
public B(int i){this.x = i;};
private int getX(){
return this.x;
}
}
public class TestReflect {
/**
* @param args
*/
public static void main(String[] args) throws Exception {
String s1 = new String(new StringBuffer("abc"));
Constructor<?> constructor = String.class.getConstructor(StringBuffer.class);
String s2 =(String)constructor.newInstance(new StringBuffer("abc"));
String s3 = new String(new StringBuffer("abc"));
System.out.println(s1.equals(s2)+" "+(s1 == s2));
System.out.println(s1.equals(s3));
B b = B.class.newInstance();
//System.out.println(b.getX()); //getX()爲私有的
B b2 = new B(10);
//Field field = B.class.getField("x");
Field field = B.class.getDeclaredField("x");
field.setAccessible(true);//暴力反射
System.out.println(field.get(b2) );
}
}
8. 利用反射調用一個類中的私有方法
package java高新技術;
import java.lang.reflect.Method;
/**
* 利用反射改變 一個類中字符串的單個字符 把所有的b 改成 a
* @author jzm
*/
class TestMethodClass{
private String x;
private String y;
public TestMethodClass(String x, String y) {
super();
this.x = x;
this.y = y;
}
private void print(int i){
System.out.println("hello"+ i);
}
@Override
public String toString() {
return "x="+x+" y="+y;
}
}
public class TestUserPrivateMethod {
/**
* @param args
*/
public static void main(String[] args) throws Exception{
TestMethodClass t2 = new TestMethodClass("1", "2");
//t.print();
Method method = TestMethodClass.class.getDeclaredMethod("print",new Class[]{int.class});
method.setAccessible(true);
method.invoke(t2,new Object[]{1});
}
}
9. 註解 Annotation
JDK1.5的新特性
包括三個註解類型
可以自定義註解 如:
@Retention(RetentionPolicy.RUNTIME)
public @ interface MyAnnotation {
String color() default "blue";
}
10. 泛型
11 類加載器
JVM 提供了三個類加載器 BootStrap(C++編寫的) -à ExtClassLoader(java類), à AppClassLOader(java類)
可以自己寫一個類加載器 。
12 動態代理 參照我的另一篇文章