1. 范型(Generic)
ArrayList<String> list = new ArrayList<String>();
list.add(aAaram); //这里的aParam必须是一个String
String list.get(aIndex); //回自动把返回类型转换成String
calss Test<E> extends ArrayList<E>{
//当父类用范型的时候, 子类也要用
2. For-Each
//假设有一个int[] intArray
for(int i : intArray){
i = 0; //不会改变数组, 这里得到的只是值, 不是引用
}
//假设有一个ArrayList<String> list
//ArrayList list2
for(String s : list){
}
for(Object o : list2){
}
//这样的遍历不会改变原来的集合, 而且在遍历结束前也不能由别的线程改变, 否则会抛出ConcurrentModificationException
3. 自装拆包(Autobaxing/unboxing)
//假设有一个ArrayList list, 可以执行
list.add(123);
System.out.println(list.get(0).getClass());
//输出java.lang.Integer, 说明在add的时候123被自动包装成Integer
//还没发现自动拆包在哪里体现出来
4. 枚举(Enum)
枚举是一个跟类差不多的东西, 例:
public enum Season{
spring,
summer,
autumn,
winter; //这四个就是可枚举的值
private int avgTemp; //可以有变量
private Season(){ //可以有默认构造函数, 但只能是private的
avgTemp = 10;
}
public void setAvgTemp(int temp){ //可以有方法
avgTemp = temp;
}
public int getAvgTemp(){
return avgTemp;
}
}
Color.sprint.setAvgTemp(14);
// 设置春天的平均温度为14度
Color.valueOf("summer").setAvgTemp(32);
// 设置夏天的平均温度为32度
for(Color c : Color.values()){
System.out.println(c + " : " + c.getAvgTemp()):
}
// spring : 14
// summer : 32
// autumn : 10
// winter : 10
5. 可变参数
public static void printParams(Object ... objs){
for(Object o : objs){ // 这里的objs是一个Object[]型的数组
System.out.println(o.getClass());
}
}
printParams("abc", 123, new ArrayList());
//输出:
//java.lang.String
//java.lang.Integer
//java.util.ArrayList
6. 静态导入
import java.lang.Math.*;
System.out.println(PI); //这样就可以向使用本地变量一样使用Math里的变量了
// 输出:3.141592653
// 正如很多人说的, 这样容易让人产生混淆