JDK 5.0 新特性:
1. 静态导入
静态导入语法用于导入指定类的某个静态属性值(方法)或全部静态属性值(方法)。
例如:
导入指定类的单个静态属性
import static java.lang.System.out
导入指定类全部静态属性
import static java.lang.Math.*
2. 自动装包/拆包
自动装箱:把一个基本数据类型直接赋给对应的包装类变量, 或者赋给 Object 变量。
自动拆箱:把包装类对象直接赋给一个对应的基本类型变量。
自动装箱:Integer num = 12;
自动拆箱:Int num = new Integer(12);
基本Boolean/Byte/Integer(数值范围:-128至127)数据类型的对象缓存:
Integer num1 = 12;
Integer num2 = 12;
System.out.println(num1 == num2);结果为true
Integer num3 = 129;
Integer num4 = 129;
System.out.println(num3 == num4);结果为false
因为数值范围在:(-128至127)数据类型的对象缓存。
简单类型和封装类型之间的差别
封装类可以等于null ,避免数字得0时的二义性。
Integer i=null;
int ii=i; 会抛出NullException 异常。
相当于 int ii=i.intValue();
享元模式(flyweight):有很多小的对象,它们有很多相同的属性,把这些相同的属性变为同一个对象,称为内部状态。 把那些不同的属性变为方法的参数,称为外部状态。
3. for-each循环
使用 foreach 循环遍历数组和集合元素时, 无须获得数组和集合长度, 无须根据索引来访问数组元素和集合元素, forearch 循环自动遍历数组和集合的每个元素。
for(type varName : array | collection){ }
4. 可变参数
若在定义方法时, 在最后一个形参的类型后增加三点(…), 则表明该形参可以接受多个参数值, 多个参数值被当成数组传入。
可变形参只能处于形参列表的最后, 所以一个方法最多只能有一个长度可变的形参。
调用包含一个可变形参的方法时, 可以为该形参传入多个参数或一个数组。
5. 枚举
在某些情况下, 一个类的对象是有限而且固定的(例如:季节类), 这种实例有限而且固定的类, 在 Java 中被称为枚举类。
手动实现枚举类:
private 构造器。
把这个类的所有可能实例都使用 public static final 修饰。
提供一个静态方法根据给定的特定参数返回相应的实例。
6. 泛型
Java的泛型就是创建一个用类型作为参数的类。
7. 元数据
描述数据及其环境的数据。
类加载器:
类加载器负责将 .class 文件(可能在磁盘上, 也可能在网络上) 加载到内存中, 并为之生成对应的 java.lang.Class 对象。
当 JVM 启动时,会形成由三个类加载器组成的初始类加载器层次结构:
Annotation(注释)
Annotation其实就是代码里的特殊标记,这些标记可以在编译,类加载, 运行时被读取,并执行相应的处理。通过使用 Annotation,程序员可以在不改变原有逻辑的情况下,在源文件中嵌入一些补充信息。
Annotation 可以像修饰符一样被使用,可用于修饰包,类,构造器,方法,成员变量,参数,局部变量的声明,这些信息被保存在 Annotation 的“name=value”对中。
Annotation 能被用来为程序元素(类,方法,成员变量等) 设置元数据。
使用 Annotation 时要在其前面增加 @ 符号,并把该 Annotation 当成一个修饰符使用。用于修饰它支持的程序元素。
三个基本的 Annotation:
1. @Override:限定重写父类方法,该注释只能用于方法。
2. @Deprecated:用于表示某个程序元素(类,方法等)已过时。
3. @SuppressWarnings:抑制编译器警告。
自定义Annotation:
1. 定义新的 Annotation 类型使用 @interface 关键字。
2. Annotation 的成员变量在 Annotation 定义中以无参数方法的形式来声明。其方法名和返回值定义了该成员的名字和类型。
3. 可以在定义 Annotation 的成员变量时为其指定初始值,指定成员变量的初始值可使用 default 关键字。
4. 没有成员定义的 Annotation 称为标记,包含成员变量的 Annotation 称为元数据 Annotation。