-------
一、静态导入
通过使用 import static,就可以不用指定 Constants 类名而直接使用静态成员,包括静态方法。
import xxxx 和 import static xxxx的区别是前者一般导入的是类文件如import java.util.Scanner;后者一般是导入静态的方法,importstatic java.lang.System.out。
import static java.lang.Math.*;
public class StaticImport {
public static void main(String[] args) {
System.out.println(max(5, 1));
System.out.println(max(5, 9));
}
}
二、可变参数
特点:可变参数只能出现在参数列表的最后,调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中以数组的形式访问可变参数。
public class VariableParameter {
public static void main(String[] args) {
System.out.println(add(new int[] { 1, 2, 3 }));
}
public static int add(int... nums) {
int sum = 0;
for (int num : nums) {
sum += num;
}
return sum;
}
}
三、增强的for循环
增强的for循环的加入简化了集合的遍历
其语法如下
– for(type element :array) {
System.out.println(element)....
}
四、枚举(Enums)
JDK1.5加入了一个全新类型的“类”-枚举类型。为此JDK1.5引入了一个新关键字enum. 我们可以这样来定义一个枚举类型:
public enum Color
{ Red, White, Blue }
然后可以这样来使用Color myColor = Color.Red.
枚举类型可用于设计单例模式的类。
l 实例:定义有参构造函数、含抽象方法的枚举类型
public enum TrafficLamp {
RED(30) {
@Override
public TrafficLamp nextLamp() {
return GREEN;
}
},
GREEN(45) {
@Override
public TrafficLamp nextLamp() {
return YELLOW;
}
},
YELLOW(5) {
@Override
public TrafficLamp nextLamp() {
return RED;
}
};
public abstract TrafficLamp nextLamp();
private int time;
private TrafficLamp(int time) {
this.time = time;
}
}
五、泛型(Generic)
一个集合可以放任何类型的对象,相应地从集合里面拿对象的时候我们也不得不对他们进行强制得类型转换。猛虎引入了泛型,它允许指定集合里元素的类型,这样你可以得到强类型在编译时刻进行类型检查的好处。
泛型是提供给javac编译器使用的,可以限定集合中的输入类型编译后的字节码是一样的 也就是说编译后的class文件 是可以进行
添加别的类型
List<String> ls = new ArrayList<String>();
List<Integer> l2 = new ArrayList<Integer>();
System.out.println(ls.getClass() == l2.getClass());
List.class.getMethod("add", Object.class).invoke(l2, "abc");
System.out.println(l2.get(0));
List<String>ls = new ArrayList();
List ls = new ArrayList<String>();---正确编译
List<String> l2 = new ArrayList<Object>();
List<Object> l2 = new ArrayList<String>();---编译错误
泛型中的? 即泛型的通配符
public static void prints(List<?> ls) {
for (Object o : ls) {
System.out.println(o);
}
}
public static void prints(List<? extends Object> ls) {
for (Object o : ls) {
System.out.println(o);
}
}
? super obj 向上通配符 父类? extends obj 向下通配符子类