黑马程序员_8_JDK1.5新特性

                                    黑马程序员——JDK1.5新特性

                                    ------- android培训java培训、期待与您交流! ----------



JDK5.0新特性:静态导入,自动装箱/拆箱,增强for循环,可变参数,枚举,泛型。
静态导入:import static java.util.Arrays.*;可以不用写类...只对一个类的静态成员有效:
格式, import static 包名.类名.静态成员

自动装箱: Integer   i  = 1; 就是把基本数据类型自动装箱成对象。
自动拆箱:int  j = i ;  把对象自动拆成基本数据类型。

增强for循环:只能用在数组,或者实现Iterable接口的集合类上。注意细节,增强for只适合取数据,不能改数据。

可变参数:可变参数可以把他看成数组,
    
    
  1. @Test
  2. public void test(){
  3. int[] arr ={1,2,3,4,5,6};
  4. sum(arr);
  5. sum(1,2,3,4,5,6,7);
  6. }
  7. //可变参数你就可以把他看成数组,这里是三个点。
  8. public void sum(int ...nums){
  9. int sum=0;
  10. for(int i:nums){
  11. sum=sum+i;
  12. }
  13. System.out.println(sum);
  14. }

需要注意的问题演示1:可变参数只能处于参数列表的最后,所以一个方法最多只能有一个长度的可变参数。
    
    
  1. @Test
  2. public void testAa(){
  3. aa(1,2,3,4);
  4. }
  5. //这样写不行。public void aa(int...num,int x){}因为传入参数时无法判断,会把值全部给可变参数。
  6. public void aa(int x ,int...nums){//这样写才正确
  7. }

需要注意的问题演示2:调用可变参数的方法时,编译器将自动创建一个数组保存传递给方法的可变参数,因此,程序员可以在方法体中以数组的形式访问可变参数。
    
    
  1. @Test
  2. public void bb(){
  3. List list = Arrays.asList("1","2","3");
  4. System.out.println(list);
  5. String[] arr = {"1","2","3","4"};
  6. list = Arrays.asList(arr);
  7. System.out.println(list);
  8. //注意,这里使用基本数据类型的数组时,编译器会把他当成数组对象传递,打印出来的是哈希码值。
  9. // int[] nums = {1,2,3,4,5};
  10. // 如果使用Integer 那么打印出来的就是这些数组元素。
  11. Integer[] nums = {1,2,3,4,5};
  12. list = Arrays.asList(nums);
  13. System.out.println(list);
  14. }


枚举关键字:enum  1..其实就特殊形式的java类  2..枚举类中声明的每一个枚举值代表枚举类的一个实例对象。3..与java中的普通类一样,在声明枚举类时,也可以声明属性、构造函数、方法、但枚举类的构造函数必须为私有<因为防止别人创建对象>,4..枚举也可以实现接口或者继承抽象类。5..在JDK1.5之中扩展了switch语句,除了可以接收int  byte  char  short外还可以接收一个枚举类型。 6..若枚举只有一个枚举值则可以当作单例设计模式使用。
             定义方法:enum   类名{}
   代码实现如下:

public class Demo2 {                                                                
    public void test(){
        //调用对象
        print(Grade1.A);
    }
    public void print(Grade1 g){
       
    }
}
enum Grade1{
    //A,B,C相当于此类的静态无参对象,可以由类名调用
    A,B,C;
}
在jdk1.5之前。以下代码实现与枚举定义是一样的的。
public class Demo2 {
    @Test
    public void test(){
        //调用对象
        print(Grade1.E);
    }
    public void print(Grade1 g){
        
    }
}
class Grade1{
    private Grade1(){}//私有构造函数,禁止创建对象,
    public static final Grade1 E = new Grade1();//提供静态的对象。
    public static final Grade1 F = new Grade1();
    public static final Grade1 G = new Grade1();
}  

在枚举中定义字段,与构造函数,方法。

public class Demo1 {
    @Test
    public void test(){
        print(Grade.D);
    }
    public void print(Grade g){
        String value = g.getValue();
        System.out.println(value);
    }
}
enum Grade{
    //由于已经有有参的构造函数,所以枚举的这些对象需要写参数
    A("100-90"),B("89-80"),C("79-70"),D("69-60");
    private String value;//封装每个对象对应的分数
    private Grade(String value){//私有有参构造方法
        this.value=value;
    }
    public String getValue(){//带方法的枚举,获取字段。
        return this.value;
    }
} 

带抽象方法的枚举定义、、
public class Demo3 {
    @Test
    public void test(){
        print(Person.A);
    }
    public void print(Person p){
        String value = p.loValue();
        System.out.println(value);
    }
}
//带抽象方法的枚举
enum Person{
    //由于抽象方法存在,所以要想创建本类对象,必须实现抽象方法、
    A("100-90"){
        public String loValue(){
            return "优秀";
        }
    }
    ,B("89-80"){
        public String loValue(){
            return "良好";
        }
    }
    ,C("79-70"){
        public String loValue(){
            return "一般";
        }
    };
    private String value;//封装每个对象队友的分数。
    private Person(String value){
        this.value=value;
    }
    public String getValue(){
        return value;
    }
    //带抽象方法的枚举。
    public abstract String loValue();
} 
枚举的一些常见方法:

     
     
  1. public void test2(){
  2. //获取该枚举对象的常量名字
  3. System.out.println(Person.A.name());
  4. //获取该枚举对象的常量序号,从零开始、
  5. System.out.println(Person.C.ordinal());
  6. String str ="B";
  7. // Person p = Person.valueOf(Person.class, str);
  8. //这个方法与上面那个方法是一样的,将某个字符串转成枚举,如果该字符串转成枚举后该枚举中不存在就会抛出异常
  9. Person p = Person.valueOf("B");
  10. System.out.println(p);
  11. //返回所有的枚举值存入数组
  12. Person[] arr = Person.values();
  13. //遍历数组
  14. for(Person p1:arr){
  15. System.out.println(p1);
  16. }
  17. }
  18. }


                                     ------- android培训java培训、期待与您交流! ----------





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值