java之包裝類

Java中的基本類型功能簡單,不具備對象的特性,爲了使基本類型具備對象的特性,所以出現了包裝類,就可以像操作對象一樣操作基本類型數據。

一、基本類型對應的包裝類

基本類型                  包裝類型

byte          Byte

int                                 Integer

short                            Short

long                              Long

float                               Float

double                          Double

boolean                        Boolean

char                               Character

A.創建一個包裝類對象:

Integer    i = new Integer(4);//創建了一個Integer對象,表示指定的int值

Integer    s = new Integer("8");//創建了一個Integer對象,表示String 參數"8"指定的int 值

包裝類常用的方法如下:

      

 

 

包裝類主要是兩種方法,一種是本類型和其它類型之間進行轉換,另一種是字符串和本類型以及基本類型之間的轉換

如上圖中的方法前五種是本類型和其他類型之間的轉換,後三種是字符串和本類型以及基本類型之間的轉換。

 

1
2
3
Double  d = new Double(5);
        byte d1 = d.byteValue();
        System.out.println(d1);
1
2
3
Double  d = new Double(5);
      Byte d1 = d.byteValue();
      System.out.println(d1);

這兩種都是可以的,本類型和其他類型之間的轉換,可是爲什麼上面兩個都可以呢?這便是接下來要講的

B.基本類型與包裝類型之間的轉換

JDK1.5引入了自動裝箱和拆箱的機制,那麼什麼是裝箱和拆箱呢?

裝箱:就是將基本類型轉換成包裝類,分爲自動裝箱和手動裝箱 

1
2
3
4
5
int a1=4;
//        //手動裝箱
//        Integer ai = new Integer(a1);
//        //自動裝箱
//        Integer aj = a1;

 

 拆箱:就是將包裝類型轉換成基本類型,分爲自動拆箱和手動拆箱

1
2
3
4
//手動拆箱
//        int ah = ai.intValue();
//        //自動拆箱
//        int ag = ai;

 沒有什麼能夠阻擋它們之間的轉換。

C.字符串和本類型以及基本類型之間的轉換

c1.基本類型轉換成字符串類型

    c1a.包裝類 的toString()方法

    c1b.String 類的valueOf()方法

    c1c.空字符串加一個基本類型變量

 

c2.字符串轉換成基本類型

        c2a.包裝類的parse***()靜態方法

         c2b.包裝類的valueOf()方法

1
2
3
4
5
6
7
8
9
//基本類型轉換成字符串類型有三種方法
int b = 1;
String b1 = Integer.toString(b);
String b2 = String.valueOf(b);
String b3 = b+"";
System.out.println("b1:  "+b1+"b2: "+b2+"b3: "+b3);
//字符串轉換成基本類型的方法有兩種
int c1 = Integer.parseInt(b1);
int c2 = Integer.valueOf(b2);

 因爲存在自動裝箱和自動拆箱,所以包裝類型和基本類型一樣

 

二、表示時間的類

 Java中的表示時間的類主要有Date和Calendar,其中Date位於java.util中,最主要是獲取當前時間,默認的無參構造方法就可以獲取當前時間,它可以結合SimpleDateFormat類更改輸出的時間的格式;Calendar是一個抽象類,需要調用getInstance()方法獲取對象,下面分別總結一下Date和Calendar類的用法。

A.Date和SimpleDateFormat共同表示時間

  Date類直接new一個Date的對象就可以獲取當前的時間

1
2
3
4
5
6
7
8
9
10
11
12
13
public static void main(String[] args) throws ParseException{
 
Date now = new Date();
        System.out.println(now);
        //創建一個SimpleDateFormat的對象,指定它的格式
        SimpleDateFormat  sdf = new SimpleDateFormat("yyyy年MM月dd日:HH:mm:ss");
        //將指定的日期格式化
        String date = sdf.format(now);
        System.out.println(date);
        //將指定的格式化後的日期解析成原來的日期格式
        Date date1 = sdf.parse(date);
        System.out.println(date1);
}

 

 

 

     第一行是Date的默認構造方法輸出的當前的時間,從左到右是:星期 、月份、日期、時:分:秒  cst(表示中國標準時間)、年份。

       SimpleDateFormat類是規範date的格式,它屬於java.text,是一種文本格式類。如上圖,創建一個帶格式的SimpleDateFormat對象,然後調用format方法可以使date以自定義的格式輸出,形成了人們所習慣的風格。

      第三行是調用SimpleDateFormat類的parse()方法使得之前的date格式按照SimpleDateFormat中定義的格式解析成原來的Date的類型,注意:parse編譯的時候可能會拋出異常,所以需要throws  ParseException(轉換的異常),舉例如下:

 

1
2
3
4
String date = "2017-03-15 20:19:30";
       SimpleDateFormat  sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
       Date date1 = sdf.parse(date);
       System.out.println(date1);

 

 B.Calendar類表示時間

  Calendar類是一個由abstract修飾的類,下面是它的源碼

1
public abstract class Calendar implements Serializable, Cloneable, Comparable<Calendar>

       說明不能通過new 的方法獲取一個實例,由此,Java中提供了一個getInstance的方法,獲取一個Calendar子類的實例對象,getInstance的源碼如下:

 

1
2
3
4
public static Calendar getInstance()
    {
        return createCalendar(TimeZone.getDefault(), Locale.getDefault(Locale.Category.FORMAT));
    }

 

     由源碼可以看出來這個getInstance方法中有當地的時區,創建出來的是一個符合當地的實例,所以Calendar.getInstance是子類對象,並且可以根據createCalendar方法創建出來的是符合當地時區的日期子類判斷是Calendar的子類對象。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
private static Calendar createCalendar(TimeZone zone,
                                       Locale aLocale)
{
    CalendarProvider provider =
        LocaleProviderAdapter.getAdapter(CalendarProvider.class, aLocale)
                             .getCalendarProvider();
    if (provider != null) {
        try {
            return provider.getInstance(zone, aLocale);
        } catch (IllegalArgumentException iae) {
            // fall back to the default instantiation
        }
    }
 
    Calendar cal = null;
 
    if (aLocale.hasExtensions()) {
        String caltype = aLocale.getUnicodeLocaleType("ca");
        if (caltype != null) {
            switch (caltype) {
            case "buddhist":
            cal = new BuddhistCalendar(zone, aLocale);
                break;
            case "japanese":
                cal = new JapaneseImperialCalendar(zone, aLocale);
                break;
            case "gregory":
                cal = new GregorianCalendar(zone, aLocale);
                break;
            }
        }
    }
    if (cal == null) {
        // If no known calendar type is explicitly specified,
        // perform the traditional way to create a Calendar:
        // create a BuddhistCalendar for th_TH locale,
        // a JapaneseImperialCalendar for ja_JP_JP locale, or
        // a GregorianCalendar for any other locales.
        // NOTE: The language, country and variant strings are interned.
        if (aLocale.getLanguage() == "th" && aLocale.getCountry() == "TH") {
            cal = new BuddhistCalendar(zone, aLocale);
        } else if (aLocale.getVariant() == "JP" && aLocale.getLanguage() == "ja"
                   && aLocale.getCountry() == "JP") {
            cal = new JapaneseImperialCalendar(zone, aLocale);
        } else {
            cal = new GregorianCalendar(zone, aLocale);
        }
    }
    return cal;
}

 Calendar類爲了方便對日期的操作,還提供了Calendar.YEAR,Calendar.MONTH等,可以通過get 方法獲取當前的年或者月,還提供了setTime(),getTime(),getTimeinMillis()方法等,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Calendar  c = Calendar.getInstance();
        System.out.println(c);
        int year = c.get(Calendar.YEAR);
        int month = c.get(Calendar.MONTH)+1;
        int day = c.get(Calendar.DAY_OF_MONTH);
        int hour = c.get(Calendar.HOUR);
        int minute = c.get(Calendar.MINUTE);
        int second = c.get(Calendar.SECOND);
        SimpleDateFormat  sfd = new SimpleDateFormat("yyyy年MM月dd日:HH時mm分ss秒");
        //把Calendar類型轉換成Date類型
        Date date = c.getTime();
        //把Date類型轉換成Calendar類型
        c.setTime(date);
        //Date類型是標準的時間
        String dates = sfd.format(date);
        System.out.println(dates);
        //而由上面的get 到的都是一般的十二進制的數,不是標準的時間輸出
        System.out.println(year+"年"+month+"月"+day+"日"+hour+"時"+minute+"分"+second+"秒");
        Long time = c.getTimeInMillis();
        System.out.println("毫秒數:"+time);

 

1
2
3
4
java.util.GregorianCalendar[time=1489589906237,areFieldsSet=true,areAllFieldsSet=true,<br>lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=19,lastRule=null],<br>firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2017,MONTH=2,WEEK_OF_YEAR=11,WEEK_OF_MONTH=3,DAY_OF_MONTH=15,DAY_OF_YEAR=74,DAY_OF_WEEK=4,<br>DAY_OF_WEEK_IN_MONTH=3,AM_PM=1,HOUR=10,HOUR_OF_DAY=22,MINUTE=58,SECOND=26,MILLISECOND=237,ZONE_OFFSET=28800000,DST_OFFSET=0]
20170315日:225826
2017315105826
毫秒數:1489589906237

       由上面的代碼可以看出來當Calendar的實例創建出來的時候就已經被初始化了,包含YEAR、MONTH等字段,所以通過get方法可以獲取這些字段,獲取了之後便根據自己的喜好輸出,這樣的結果是更加的便利操作.

getTime()方法是將Calendar轉換成Date類型的

setTime(Date date)方法是將Date轉換成Calendar類型的,返回值爲void

getTimeInMillis()是獲取距曆元(即格林威治標準時間 1970 年 1 月 1 日的 00:00:00.000,格里高利曆)的偏移量,毫秒數

小節:Date類是獲取當前時間的類,默認構造方法即爲生成一個擁有當前時間的對象,但是由於Date中的一些方法不當,所以現在很少使用Date類,建議使用Calendar類。

三、Math類

Math位於java.lang包下,其中包含了很多的基本運算方法,所有的方法否是靜態的,可以直接使用Math.方法名()

 

1
2
3
4
5
6
7
8
9
double a4 = 12.08;
        int a5 = (int)a4;
        long a6 = Math.round(a4);
        double a7 = Math.floor(a4);
        double a8 = Math.ceil(a4);
        double a9 = Math.min(a4,a5);
        System.out.println("原數是: "+a4+"\t直接轉換的是:"+a5+
                "\t四捨五入是:"+a6+"\t小於參數最大整數是:"+a7+"大於參數最小整數:"+a8+"兩數之間的最小值:"+a9);

 結果:

1
2
3
原數是: 12.08  直接轉換的是:12   四捨五入是:12   
小於參數最大整數是:12.0大於參數最小整數:13.0
兩數之間的最小值:12.0
發佈了22 篇原創文章 · 獲贊 3 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章