一、基本類型對應的包裝類
基本類型 包裝類型
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 ] 2017 年 03 月 15 日: 22 時 58 分 26 秒 2017 年 3 月 15 日 10 時 58 分 26 秒 毫秒數: 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 |