程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> Java學習 (十七)、自動裝箱和拆箱,枚舉類型,java枚舉

Java學習 (十七)、自動裝箱和拆箱,枚舉類型,java枚舉

編輯:JAVA綜合教程

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<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 }

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved