疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

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),它们继承了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 }