zoukankan      html  css  js  c++  java
  • 自动装箱和拆箱,枚举类型

    自动装箱和拆箱

    有时需要将int这样的基本类型转换为引用类型对象;

    基本数据类型的自动装箱,拆箱是J2SE 5.0提供的新功能,为打包基本数据类型提供了方便,但提供方便的同时隐藏了细节,建议在能够区分基本数据类型与引用类型的差别时再使用;

    一个自动装箱的例子:

    Integer i=10;相当于Integer i=new Integer(10);

    进行编译时,编译器根据上下文判断是否进行自动装箱动作,在上例中变量i引用的是Integer类的实例;

    同样的动作适用于boolean、byte、short、char、long、float、double等基本数据类型,分别使用对应的包装类型Boolean、Byte、Short、Character、Long、Float、Double;

     

    J2SE 5.0中也可以自动拆箱,也就是将对象中的基本数据类型信息自动取出;

    例如:

     1 Integer m=10; 2 Int n=m; 3 //相当于n=m.intValue(); 

    m变量在自动装箱为Integer的实例后,如果被赋值给一个int类型的变量n,则会自动转换为int类型再赋值;

    在运算时,也可以进行自动装箱和拆箱;

    如:

     1 Integer i=10; 2 System.out.println(i+10); 3 System.out.println(i++); 

     1 public class AutoBoxDemo{
     2     public static void main(String[] args){
     3         int i=10;
     4         double d=10.5;
     5         
     6         //把基本类型赋值给引用类型
     7         //基本类型会在编译时自动装箱
     8         Integer num1=i;
     9         Double num2=d;
    10         System.out.println(num1);
    11         System.out.println(num2);
    12         
    13         //把包装类(引用类型)赋值给基本类型
    14         //会自动做拆箱
    15         int j=num1;
    16         //int j=num1.intValue();
    17         double dd=num2;
    18         //int dd=num2.doubleValue();
    19         System.out.println(j);
    20         System.out.println(dd);
    21         
    22         Object o=i;
    23         System.out.println(o);
    24         Integer b=(Integer)o;
    25         System.out.println(b);
    26     }
    27 }

    枚举类型

     1 public enum Color{ 2 RED,BLUE,BLACK,YELLOW,GREEN; 3 } 

    Enmu很像特殊的class,实际上enum声明定义的类型就是一个类;

    这些类都是类库中Enum类的子类(java.lang.Enum<E>),它们继承了Enum中许多有用的方法;

    枚举值都是public static final的,也就是常量,因此枚举类中的枚举值应全部大写;

    枚举类型是class,在枚举类型中有构造器,方法和字段,但枚举的构造器有很大的不同;

    构造器只在构造枚举值的时候被调用;

    构造器私有private,不允许有public构造器;

    枚举值可以再switch语句中使用;

     1 public class EnumDemo{
     2     public static void main(String []args){
     3         System.out.println(Color.RED);
     4         Color[] colors=Color.values();
     5         for(Color c:colors){
     6         System.out.println("循环:"+c);
     7         }
     8         
     9         System.out.println(Person.P1);
    10         Person[] persons=Person.values();
    11         for(Person p:persons){
    12         System.out.println("循环:"+p);
    13         }
    14         
    15         Person p=Person.P3;
    16         switch(p){
    17             case P1:System.out.println("switch:"+Person.P1);break;
    18             case P2:System.out.println("switch:"+Person.P2);break;
    19             case P3:System.out.println("switch:"+Person.P3);break;
    20         }
    21     }
    22 }
    23 
    24 //当jvm去加载使用枚举类时,会预先创建多个枚举类型的对象供外部类使用
    25 //public static final Color RED=new Color();
    26 //public static final Color BLUE=new Color();
    27 //public static final Color YELLOW=new Color();
    28 enum Color{
    29     RED,BLUE,YELLOW;//枚举类型的值必须作为第一条语句出现
    30     //不能使用public
    31     //调用次数与枚举数相同
    32     /*public*/ private Color(){
    33         System.out.println("构造方法");
    34     }
    35     
    36     /*public String toString(){
    37         return "aa";
    38     }*/
    39 }
    40 
    41 //public static final Person P1=new Person("张三",30);
    42 //public static final Person P2=new Person("李四",20);
    43 //public static final Person P3=new Person("王五",18);
    44 enum Person{
    45     P1("张三",30),P2("李四",20),P3("王五",18);
    46     private String name;
    47     private int age;
    48     private Person(String name,int age){
    49         this.name=name;
    50         this.age=age;
    51     }
    52     public String toString(){
    53         return name+"--"+age;
    54     }
    55 }
  • 相关阅读:
    快递员—你惹不起的“组织”
    BF的真正意义
    读书:《四点起床-最养生和高效的时间管理》
    你究竟有多想成功?汗水铸造巨星(中英结合版含视频)
    美国女生给我的六个惊诧(转)
    据说是世界上最健康的作息
    少走弯路的十条忠告
    编程—休息片刻的好处
    学电脑必懂的53个英文单词和缩写
    四件在我步入职业软件开发生涯那天起就该知道的事情
  • 原文地址:https://www.cnblogs.com/wzy330782/p/5308974.html
Copyright © 2011-2022 走看看