在前段时间,对JDK 5.0 部分新特性进行了预习,这两天有幸听了佟刚老师的java基础与加强,佟刚老师为我们详细介绍了JDK 5.0 的所有新特性,一直听师兄们说佟老师讲课十分幽默生动,真的是百闻不如一见,听完这两天的课,第一感觉就是:这个老师很适合当老师,不仅是外表温文尔雅,关键是有耐心,负责任,会去关心学生是否能跟上或者理解。第二感觉就是:这个老师讲课很仔细,比较注重底层原理以及学习方法的讲解。第三感觉就是:这个老师人品很好,虽然听过很多人讲过人生大道理之类的,但是第一次感觉大道理那么中听。用佟老师说的一句话就是,学习就是为了用的,如果学了不会用,那就是一种浪费,所以在讲JDK 5.0 新特性的时候,老师除了给我们讲解特性本身以外,重点讲了在实际开发和后面学习中那里会用的哦啊,怎么使用,先将这两天学习内容总结如下:
一、静态导入
静态导入用于导入指定类的某个静态属性值(方法)或全部静态属性值(方法)。静态导入语句使用 import static 语句,可以导入某个类的单个属性或者方法,也可以导入全部静态属性和方法。
import static java.lang.System.out;
import static java.lang.Math.*
public class HelloJava {
public static void main(String[] args) {
out.println("Hello Java");//由于导入了System的静态属性out。所以可以直接用
out.println(sin(PI/6));//因为静态导入Math 类的所有的静态属性和方法}}
二、自动装箱/拆箱
主要用于集合中居多,但是注意不是所有都能支持自动装箱/拆箱。
自动装箱:把一个基本数据类型直接赋给对应的包装类变量, 或者赋给 Object 变量
自动拆箱:把包装类对象直接赋给一个对应的基本类型变量
list.add(1);//上面的代码有一个自动装箱的过程,先把1装箱为Integer类型,然后再放到list对象中。
Int m = (Integer)list.get(0);//自动拆箱
三、增强for循环
主要用于遍历数组和集合,相比传统for循环,无须获得数组和集合长度, 无须根据索引来访问数组元素和集合元素。
格式:for(type varName : array | collection){}//varName自动迭代访问每一个元素,表示正在遍历的对象
注意:
1)使用增强的for循环对数组进行初始化要格外小心。最好不要,麻烦,赋值有一定局限性。
2)使用增强的for循环只能遍历collection,而不能遍历Map。
四、可变参数
这个特性就是允许定义形参长度可变的参数,从而允许为方法指定数量不确定的形参
格式:定义方法时, 在最后一个形参的类型后增加三点(…, ...位于变量类型和变量名之间,前后有无空格都可以)则表明该形参可以接受多个参数值, 多个参数值被当成数组传入
注意:
1)可变形参只能处于形参列表的最后, 所以一个方法最多只能有一个长度可变的形参
2)调用包含一个可变形参的方法时, 可以为该形参传入多个参数或一个数组
public static int getTotal(int… number){
Int total = 0;
For(int i=0;i<number.length;i++)//调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法中以数组的形式访问可变参数。
{
total+=number[i];
}
return total;}
五、枚举
实例有限而且固定的类, 在 Java 中被称为枚举类
enum EnumSeason implements YearPosition{
//显式列出枚举类的所有实例,注意必须放在前面,并注意格式
SPRING("春天", "this is spring"),
SUMMBER("夏天", "this is summer"),
AUTUMN("秋天", "this is autumn"),
WINTER("冬天", "this is winter");
public String getName() {return name;}
public String getDesc() {return desc; }
private final String name;//枚举类对象的属性不允许被改动, 所以应该使用 private final 修饰
private final String desc;
//注意不能创建对象,枚举类的构造方法只能使用 private 访问控制符
private EnumSeason(String name, String desc){
this.name = name;
this.desc = desc;}
至于jdk5.0的其他新特性,例如注解,泛型,反射等,在之前的博客有了简单介绍,这里就不重复了。至于比较重要的内省等,将在下面一篇介绍。