Java高新技术:JDK1.5新特性

静态导入

       一般情况下import是导入一个类或某个包中的所有类,而静态导入是import static 导入的类名或者类名的某个静态方法。

其作用是简化书写,在调用该类的静态方法时可以不用再写类名,前提是方法名没有重复。

 //静态导入  
public class StaticImport {  
    public static void main(String[] arg)  
    {   
        System.out.println(max(5, 5));  
        System.out.println(abs(5 - 5));  
    }  
}

注:

1.当导入的两个类中有同名成员时,需要在成员前加上相应的类名。

2. 当类名重名时,需要指定具体的包名。当方法重名时,指定具体所属的对象或者类。

可变参数

如果一个方法在参数列表中传入多个参数,个数不确定,那么每次都要复写该方法。这时可以用数组作为形式参数。但是在传入

时,每次都需要定义一个数组对象,作为实际参数。在JDK1.5版本后,就提供了一个新特性:可变参数。

格式如下:

public static int add(int x,int ...args)

例子:

public class VariableParam {  
  
    /** 
     * @param args 
     */  
    public static void main(String[] args) {  
        // TODO Auto-generated method stub  
        System.out.println(add(1, 2, 3, 4, 5, 6, 7, 8, 9,10)); 
          
    }  
    public static int add(int x,int...args){  
        int sum=x;  
        for (int i = 0; i < args.length; i++) {  
            sum+=args[i];  
        }  
        return sum;  
    }  
  
}

注:

1、可变参数只能出现参数列表最后

2、...位于变量类型与变量名之间,之间有无空格没影响

3、调用可变参数方法时,实际上是为该可变参数创建一个数组


增强for循环

语法:for ( type 变量名:集合变量名 )  { … }

对集合进行遍历,只能获取集合元素,但是不能对集合进行操作。

建议在遍历数组的时候,还是希望使用传统for。因为传统for可以定义角标。

注意:变量类型前可加修饰符,如final(可被局部内部类访问到)

利用增强for循环改写add方法:

public static int add(int x,int...args){  
        int sum=x;  
        for (int arg : args) {  
            sum+=arg;  
        }  
        return sum; 

拆装箱

1、自动装箱:

Integer num1=3;

2、自动拆箱:

num1+3;

3、对于基本数据类型的说明:整数在-128 ~ 127之间的数,包装成Integer类型对象,会存入常量池中的缓存,再创建一个对象的时候,如果其值在这个范围内,就会直接到常量池中寻找,因为这些小数值使用的频率很高,所以缓存到常量池中,被调用时就方便很多。

4、享元模式(flyweight):

有很多个小的对象,他们有很多相同的属性,把属性相同的部分变为同一个对象,这些属性称为内部状态。那些不同的属性,把他们变成方法的参数,称之为外部的状态。这种优化内存,只创建一个对象的模式,称之为享元模式。例如:Integer对象中对象取值范围在-128~127时,其值相同的对象想等,因为这些小的数被缓存在一个池中,被调用的频率较高,所以通常在池中取,从而导致对象相同。这就是典型的享元设计模式。
//自动装箱 :Integer num1=new Integer(num1);  
    Integer num1=3;  
      
    //自动拆箱:Integer.valueOf(num1)+3  
    System.out.println(num1+3);  
      
    //当数值在-128~127时,对象会被重用  
    Integer i1=120;  
    Integer i2=120;  
    System.out.println(i1==i2); //true  
      
    //不在-128~127时,与其他对象一样都再new一个对象  
    Integer a1=200;  
    Integer a2=200;  
    System.out.println(a1==a2);//false 

枚举


意义:
枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就会报错。
枚举可以让编译器在编译时就可以控制源程序中填写的非法值,普通变量的方式在开发阶段无法实现这一目标
注:
1、枚举就相当于一个类,其中也可以定义构造方法、成员变量、普通方法和抽象方法。
2、枚举元素其实就是对象。枚举元素必须位于枚举体的最开始部分。
3、枚举只有一个成员时,就可以作为一种单例的实现方式。
4、 所有的枚举都继承自java.lang.Enum类。由于Java不支持多继承,所以枚举对象不能再继承其他类

<span style="font-size:12px;">public class EnumDemo {  
    public static void main(String[] args) {  
        WeekDay weekDay=WeekDay.MON;  
        System.out.println(weekDay);//输出枚举常量名  
        System.out.println(weekDay.name());//输出对象名  
        System.out.println(weekDay.getClass());//输出对应类  
        System.out.println(weekDay.toString());//输出枚举对象名  
        System.out.println(weekDay.ordinal());//输出此对象在枚举常量的次序  
        System.out.println(WeekDay.valueOf("WED"));//将字符串转化为枚举常量  
        System.out.println(WeekDay.values().length);//获取所有的枚举元素,并打印其长度  
    }  
    //定义枚举内部类  
    public enum WeekDay{  
        SUN(1),MON,TUE,WED,THI,FRI,SAT;//分号可有可无,但如果下面还有方法或其他成员时,分号不能省。  
        //而且当有其他方法时,必须在这些枚举变量的下方。  
  
        //无参构造器  
        private WeekDay(){  
            System.out.println("First");  
        }  
        //带参数的构造器  
        private WeekDay(int day){  
            System.out.println("Second");  
        }  
    }  
} </span>





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值