首页 > 代码库 > Java5新特性之静态导入、可变参数、增强for循环、自动拆装箱

Java5新特性之静态导入、可变参数、增强for循环、自动拆装箱

       JDK1.5已经发布很长时间,之所以还拿出来是因为它增加了很多个重要的特性,使用这些特性有助于我们简化开发,编写的代码更加简洁清晰安全,主要有以下几个特性:

  ?  静态导入

  ?  可变参数

  ?  增强for循环

  ?  自动拆装箱

  ? 泛型

  ? 枚举

       由于泛型、枚举内容比较多,也最重要,之后单拿出来讲。这里先介绍前面四个简单而又实用的小特性。


1.  静态导入

  所谓“静态导入”只不过是在普通的import语句中加入关键字static,例如:

  ?  非静态导入:import java.lang.Math;

  ?  静态导入 :import static java.lang.Math.*;或import static java.lang.Math.max;

  静态导入的功能很简单:

  ?  首先,静态导入可以导入某个类下的某个方法(静态),或所有方法,而非静态导入只能定位到某个类。

  ?  其次,静态二字的作用起在静态方法的调用上。如果是非静态导入,那么调用某个类的静态方法时要用【类名 . 方法名】;如果是静态导入,那么调用该类静态方法时就可以省去类名,直接用【方法名】即可,实例如下:

  1)       非静态导入:

  

  2)       静态导入:

  


2.  可变参数

  可变参数说的是一个方法,接收的参数个数是动态可变的。例如我们要封装一个方法,使得它可以计算任意多个数的加法:

public class VariableParameter {
	//计算任意多个整数的加法的方法
	public static int add(int...args) {
		int sum = 0;
		for (int i = 0; i < args.length; i++) {
			sum = sum+args[i];
		}
		return sum;
	}
	
	public static void main(String[] args) {
		//测试1:计算2个整数的加法
		System.out.println(add(1,2));//输出3
		//测试2:计算3个整数的加法
		System.out.println(add(10, 20,30));//输出60
	}
	
}

使用规则:

  1)       如果有多个参数,那么可变参数只能出现在参数列表的最后:例如:public static int add(int x, int y,int...args) {…}。

  2)       位于变量类型与变量名之间(前后有无空格都可以)。

  3)       调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中以数组的方式访问可变参数。


3.  增强for循环

  很简单,直接看实例:

public static int add(int x,int...args) {
		int sum = x;
		
		//普通for循环
		 /*	for (int i = 0; i < args.length; i++) {
			sum = sum+args[i];
			}*/
			
		//增强for循环
		for(int arg:args){
			sum=sum+arg;
		}
		return sum;
	}

使用规则:

  1)       语法,for(type 变量名 : 集合变量名){…},例如:for(int arg : args){…}

  2)       迭代变量必须在()中定义,例如:for(int arg : args){…}

  3)       集合变量可以是数组或实现了Iterable接口的集合类


4.  自动拆装箱

  拆装箱即引用类型与值类型的相互转化,java5以前都是手动的拆装箱,概念不多说,直接看实例:

public class AutoBox {

	public static void main(String[] args) {
		// 自动将基本数据类型(值类型)包装为Integer(引用类型)对象(装箱)
		Integer a = 1;
		Integer b = 1;
		System.out.println(a == b);//输出  TRUE
		
		Integer a1 = 130;
		Integer b1 = 130;
		System.out.println(a1 == b1);//输出FALSE
		
		//从-128到127之间的数因为用的比较频繁,所以相同的数会包装为同一个对象(如上面的a、b),这里应用了“享元模式”
		
		//手动装箱
		Integer a2 = Integer.valueOf(1);
		Integer b2 = Integer.valueOf(1);
		System.out.println(a2 == b2);//输出TRUE
	}

}

  代码注释中提到了,-128到127之间的数由于非常常用,所以为了节省内存,自动装箱时运用到了“享元模式”。代码中Integer a = 1与 Integer b =1;看似是a、b两个对象,实际上它们指向的是同一块内存空间。而Integer a1 = 130与 Integer b1= 130;中a1、b1指向的是不同的内存空间,所以它们是两个不同的对象。

  享元思想:有很多个小对象,它们有很多属性相同,就将它们弄成一个对象,将那些不同的属性弄成方法的参数,当需要的时候再传递进来。相同的属性称为对象的内部状态,不同的属性称为外部状态。它适合用于只是因重复而导致使用无法令人接受的大量内存的大量物件


5.  总结

  以上几个小特性,貌似很简单,但如能熟练使用会很大程度的提高我们的编码效率,提高代码质量与性能。枚举与泛型是java5引入的最重要的两个特性,其中泛型思想已在上篇文章中介绍。枚举看似简单,好处却很多,是java一开始砍掉后又不得不弥补上的特性,将会在后面文章介绍。

Java5新特性之静态导入、可变参数、增强for循环、自动拆装箱