------- android培训、java培训、期待与您交流! ----------
1、泛型(Generics)--为集合提供编译时类型安全,无需每刻从Collections取得一个对象就进行强制转换集合 通过模板技术可以指定集合元素类型而Java在1.5的前直没有相对应功能。集合可以放任何类型对象相应
地从集合里面拿对象时候我们也不得不对他们进行强制得类型转换,jdk1.5引入了泛型它允许指定集合里元素类型这样我们可以得到强类型在编译时刻进行类型检查好处 。
例如:
ArrayList al = new ArrayList();
这时编译器就会提示我们:
ArrayList is a raw type. References to generic type ArrayList<E> should be parameterized
泛型最大的好处是
当你从集合中得到一个元素时你无需进行强制转换。故原先为:
String Name = ((String) UserName.get(i));
而下面的语句将比上面的更加简单:
String Name = UserName.get(i);
2、增强的“for”循环(Enhanced For loop)--减少迭代器(iterator)的潜在错误
void printAll(ArrayList al) {
for (Iterator i = al.iterator(); i.hasNext(); ) {
User u= (User)i.next();
System.out.println(u.getName());
}
}
现在,用增强的For语句实现相同方法:
void printAll(ArrayList al) {
for (User user : al)
System.out.println(user.getName());
}
这段代码要比上面清晰许多并且避免了强制类型转换 。
在这类For循环中,你应该将":"看成"in",所以,在该例中可以看成"User user in al"。这种For循环更具可读性。
3、自动置入/自动取出(Autoboxing/unboxing)--无需在基本类型和包装类型之间人工地进行转换。
自动装包/拆包大大方便了基本类型数据和它们包装类地使用
自动装包:基本类型自动转为包装类.( >> Integer)
自动拆包:包装类自动转为基本类型.(Integer >> )
在JDK1.5的前我们总是对集合不能存放基本类型而耿耿于怀现在自动转换机制解决了我们问题
int a = 5;
ArrayList al = new ArrayList ();
al.add(a); //自动转换成Integer.
Integer b= new Integer(30);
al.add(b + 2); //这里Integer先自动转换为进行加法运算然后再次转换为Integer.
这里有个需要注意的地方就是当数值大于127的时,自动装箱后的integer对象是不相等的。
4、枚举(Typesafeenums)--提供类型安全枚举模式的各项好处。
JDK1.5加入了个全新类型“类”-枚举类型为此JDK1.5引入了个新关键字enmu. 我们可以这样来定义个
枚举类型
public enum Color
{
Red,
White,
Blue
}
然后可以这样来使用Color myColor = Color.Red.
枚举类型还提供了两个有用静态思路方法values和valueOf. 我们可以很方便地使用它们例如
for (Color c : Color.values)
System.out.println(c);
枚举提供下列特性:
他们提供编译时类型安全。
他们都是对象,因此你不需要将他们放入集合中。
他们作为一种类的实现,因此你可以添加一些方法。
他们为枚举类型提供了合适的命名空间。
5、静态导入(Static import)--无需在使用其他类的静态成员变量前缀其类名.这将使得代码更为简洁。
要使用用静态成员(思路方法和变量)我们必须给出提供这个思路方法类使用静态导入可以使被导入类所有静
态变量和静态思路方法在当前类直接可见使用这些静态成员无需再给出他们类名 ,像这样:
import static java.lang.Math.*;
…….
r = sin(PI * 2); //无需再写r = Math.sin(Math.PI);
不过使用这个特性也会定程度上降低代码地可读性 。
6、可变参数(Varargs)
可变参数使成员可以声明接受可变数目个数的参数,注意可变参数必须是声明中最后一个参数。
假设我们要写简单思路方法打印这些些对象 :
util.write(obj1);
util.write(obj1,obj2);
util.write(obj1,obj2,obj3);
在JDK1.5的前我们可以用重载来实现但是这样就需要写很多重载显得不是很有效。如果使用可变参数话我
们只需要
public void write(Object... objs) {
for (Object obj: objs)
System.out.println(obj);
}
在引入可变参数以后Java反射包也更加方便使用了对于
c.getMethod("test",Object[0]).invok(c.Instance,Object[0]))现在我们可以这样写了
c.getMethod("test").invoke(c.Instance)这样代码比原来清楚了很多。