本帖最后由 朱晓杰 于 2013-7-9 21:46 编辑
JDK 1.5 特性总结 听张老师讲课,脚的JDK 1.5 特性还蛮有意思的,所以发个总结帖,与各位交流学习。 A.静态导入 静态导入语句的语法与import语句类似,用它可以直接使用类变量和类方法: 格式如下: import static 包名.类名.*; import static 包名.类名.类变量的名字; import static 包名.类名.类方法的名字; 注意:如果静态导入两个类中同名的类变量或类方法,就无法使用,必须通过对象或类名使用类变量 ,类方法 - 示例:
- import static java.lang.System.out;
- import static java.lang.Math.*;
- /**
- * 需求:演示java中静态导入的使用
- * 使用静态导入,可以减少代码的书写,提高效率
- * */
- public class StaticImport {
- public static void main(String[] args) {
- out.println(max(10, 20));
- }
- }
复制代码B.可变参数 适用于参数个数不确定,类型确定的情况,java把可变参数当做数组处理。
可变参数的特点:
(1)只能出现在参数列表的最后;
(2)... 位于变量类型和变量名之间,前后有无空格都可以;
(3)调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中以数组的形式访问可变参数。- 示例:
- import static java.lang.System.*;
- /**
- * 需求:求n个整数的和
- * */
- public class VariableArguments {
- public static void main(String[] args) {
- out.println("sum=" + sum(1,2,3,4,5));
- out.println("sum=" + sum(1,2,3));
- }
- public static int sum(int num,int ... args){
- int sum = num;
- for(int i = 0; i < args.length; i++){
- sum += args[i];
- }
- return sum;
- }
- }
复制代码 C.增强for循环
语法:
for (循环变量类型 循环变量名称 : 要被遍历的对象) {
循环体
}
注意:
1.循环变量名称必须在 () 中定义
2.要遍历的对象可以是数组或者是实现了iterable的接口的集合类- 示例:
- import static java.lang.System.*;
- /**
- * 需求:求n个整数的和改进版
- * */
- public class VariableArguments {
- public static void main(String[] args) {
- out.println("sum=" + sum(1,2,3,4,5));
- out.println("sum=" + sum(1,2,3));
- }
-
- public static int sum(int num,int ... args){
- int sum = num;
-
- //防止在循环体里修改循环变量,给i重新赋值时,编译出错,Unresolved compilation problem
- for(final int i : args){
- sum += i;
- }
-
- return sum;
- }
- }
复制代码 D.基本数据的自动拆装箱- 示例:
- import static java.lang.System.*;
- /**
- * 需求:演示java1.5中基本数据类型自动拆箱装箱
- * */
- public class Auto {
- public static void main(String[] args) {
- //自动装箱:基本数据类型封装为对象类型
- Integer num = 10;
- //自动拆箱:对象类型转为为基本数据类型
- out.println(num + 10);
- }
- }
复制代码 E.枚举
为什么要使用枚举?枚举是什么?
在实际编程中,往往存在着这样的“数据集”,它们的数值在程序中是稳定的,而且“数据集”中的元素是有限的。
例如星期一到星期日七个数据元素组成了一周的“数据集”,春夏秋冬四个数据元素组成了四季的“数据集”。
在java中如何更好的使用这些“数据集”呢?因此枚举便派上了用场。 枚举就是要让某个类型变量的取值只能为若干个固定值中的一个,否则编译器就会报错。枚举可以让编译器在编译时就控制源程序中填写的非法值,普通变量的定义方式在开发阶段无法实现这一目标。所有的枚举都继承自java.lang.Enum类。由于Java 不支持多继承,所以枚举对象不能再继承其他类。如果枚举只有一个成员时,就可以作为单例的一种实现方式。
用普通类模拟java中枚举的实现(注意内部类的使用)- 示例:
- public abstract class WeekDay {
- private WeekDay(){}
- public static final WeekDay SUN = new WeekDay(){
- public WeekDay nextDay() {
- return MON;
- }
- public String toString() {
- return "MON";
- }
- };
-
- public static final WeekDay MON = new WeekDay(){
- public WeekDay nextDay() {
- return TUE;
- }
- public String toString() {
- return "TUE";
- }
- };
-
- public static final WeekDay TUE = new WeekDay(){
- public WeekDay nextDay() {
- return WES;
- }
- public String toString() {
- return "WES";
- }
- };
-
- public static final WeekDay WES = new WeekDay(){
- public WeekDay nextDay() {
- return THI;
- }
- public String toString() {
- return "THI";
- }
- };
-
- public static final WeekDay THI = new WeekDay(){
- public WeekDay nextDay() {
- return FRI;
- }
- public String toString() {
- return "FRI";
- }
- };
-
- public static final WeekDay FRI = new WeekDay(){
- public WeekDay nextDay() {
- return STA;
- }
- public String toString() {
- return "STA";
- }
- };
-
- public static final WeekDay STA = new WeekDay(){
- public WeekDay nextDay() {
- return SUN;
- }
- public String toString() {
- return "SUN";
- }
- };
-
- public abstract WeekDay nextDay();
-
- public abstract String toString();
-
- }
复制代码 |