Java5新特性

从JDK 1.5开始,Jav的开发就出现了许多新特性,有部分的新特性已经使用了,只不过随着不同版本的提升,新特性也越来越多。


一、可变参数

如果现在要求设计一个方法,这个方法可以接收任意多个整型数据的相加。那么最早的设计就是利用数组来解决问题。

范例:最初的解决方案

package cn.mldn.demo;

public class TestDemo {

	public static void main(String[] args) {
		System.out.println(add(new int[]{1,2,3}));//传递三个整形数据
		System.out.println(add(new int[]{12,34}));//传递两个整形数据
	}

	/**
	 * 实现任意多个整型数据的相加操作
	 * 
	 * @param data 由于要接收多个整型数据,所以使用数组完成接收
	 * @return 多个整形数据的累加结果
	 */
	public static int add(int[] data) {
		int sum = 0;
		for(int x=0;x<data.length;x++){
			sum+=data[x];
		}
		return sum;
	}
}

以上的代码之所以使用数组,是因为多个参数方法上无法描述,所以利用数组整合成多个参数,但是严格来讲这样的实现并不标准。要求是可以接收任意多个整型数据:

理想的调用形式:add(1,2,3)、add(10,20)、add(10,10,10,10,10);

这一功能从JDK 1.5之后正式的登陆到了Java之中,它主要是在方法上使用,其定义形式:

[public | protected | private ] [static] [final] [abstract] 返回值类型 方法名称(参数类型 ... 变量){

             [return [返回值];]

}

此时给出的参数不再是一个内容,而是多个内容,但是尽管参数的定义形式变了,可是参数的访问却没有改变,也就是说在进行参数访问的时候,按照数组的形式操作。

package cn.mldn.demo;

public class TestDemo {

	public static void main(String[] args) {
		// 可变参数支持接收数组
		System.out.println(add(new int[] { 1, 2, 3 }));// 传递三个整形数据
		System.out.println(add(new int[] { 12, 34 }));// 传递两个整形数据
		// 或者使用","区分不同的参数,接收的时候还是数组
		System.out.println(add(1, 2, 3));
		System.out.println(add(1, 3));
		System.out.println(add(2, 3));
		System.out.println(add());
	}

	/**
	 * 实现任意多个整型数据的相加操作
	 * 
	 * @param data
	 *            由于要接收多个整型数据,所以使用数组完成接收
	 * @return 多个整形数据的累加结果
	 */
	public static int add(int... data) {
		int sum = 0;
		for (int x = 0; x < data.length; x++) {
			sum += data[x];
		}
		return sum;
	}
}

在大部分的开发情况下,应该要求参数的个数是准确的,所以对于这样的开发往往不会用于应用型的开发上,可能会用于一些程序相关系统类的设计使用上。

总结:

  1. 在设计一个类的时候可变参数绝对不是优先的选择;
  2. 可变参数就属于数组的变形应用。

二、for each循环

增强型for循环的使用。

foreach输出是由C#最早引入的概念。其目的就是进行数组或是集合数据的输出。

在最早如果要进行数组输出肯定使用for循环,而后利用下标进行数据的访问。

package cn.mldn.demo;

public class TestDemo {

	public static void main(String[] args) {
		int data[] = new int[] { 1, 2, 3, 4, 5 };
		for (int x = 0; x < data.length; x++) {
			System.out.println(data[x]);
		}
	}
}

有人会认为以上的输出需要使用索引会比较麻烦。

从JDK1.5之后增加的foreach循环形式就可以取消掉索引的操作形式。语法如下:

for(类型 变量 : 数组 | 集合){

   //每一次循环会自动的将数组的内容设置给变量

}

范例:观察增强型的for循环

package cn.mldn.demo;

public class TestDemo {

	public static void main(String[] args) {
		int data[] = new int[] { 1, 2, 3, 4, 5 };
		for (int x : data) {// 循环次数由数组长度决定
			// 每一次循环实际上都表示数组的脚标增长,会取得每一个数组的内容,并且将其设置给x
			System.out.println(x);// x就是每一个数组元素的内容
		}
	}
}

用数组直接通过索引访问会比较麻烦。而有了这样的形式代码就避免了索引的麻烦。

foreach循环支持数组的直接访问,避免了索引访问带来的麻烦。


三、静态导入

如果说现在某一个类中定义的方法全部都属于static型的方法,那么其它类要引用此类时必须使用“类名称 . 方法()”进行调用。

范例:传统的做法

package cn.mldn.util;

public class MyMath {
	public static int add(int x, int y) {
		return x + y;
	}

	public static int div(int x, int y) {
		return x / y;
	}
}

此时MyMath类里面的方法都是static型的方法,随后在其它类使用这些方法。

范例:基本使用形式

package cn.mldn.demo;

import cn.mldn.util.MyMath;

public class TestDemo {

	public static void main(String[] args) {
		System.out.println("加法操作:" + MyMath.add(10, 20));
		System.out.println("除法操作:" + MyMath.div(10, 2));
	}
}

如果在主类中定义的是static方法,那么可以直接调用static方法,而现在的MyMath类里面都是static方法,那么觉得前面加上类名称实在是多余。于是从JDK1.5之后开始增加了静态导入。

范例:静态导入

package cn.mldn.demo;

//将MyMath类中的全部static方法导入,这些方法就好比在主类中定义的static方法一样
import static cn.mldn.util.MyMath.*;

public class TestDemo {

	public static void main(String[] args) {
		// 直接使用代码名称访问
		System.out.println("加法操作:" + add(10, 20));
		System.out.println("除法操作:" + div(10, 2));
	}
}

从道理上来讲,如果在前面增加上了类名称,认为反而能够更加清楚的表示出具体方法属于哪个类。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值