為什麼需要包裝類?
JAVA並不是純面向對象的語言。Java語言是一個面向對象的語言,但是Java中的基本數據類型卻是不面向對象的。但是我們在實際使用中經常需要將基本數據轉化成對象,便於操作。比如:集合的操作中。 這時,我們就需要將基本類型數據轉化成對象!
均位於java.lang包,包裝類和基本數據類型的對應關系:
包裝類的作用:
提供:字符串、基本類型數據、對象之間互相轉化的方式!
包含每種基本數據類型的相關屬性如最大值、最小值等
所有的包裝類(Wrapper Class)都有類似的方法,掌握一個其他都類似!
自動裝箱
基本類型就自動地封裝到與它相同類型的包裝中,如:
Integer i = 100;
本質上是,編譯器編譯時為我們添加了:
Integer i = new Integer(100);
自動拆箱
包裝類對象自動轉換成基本類型數據。如:
int a = newInteger(100);
本質上,編譯器編譯時為我們添加了:
int a = newInteger(100).intValue();
字符串
特性:
1)它必須使用一對雙引號括起來。例如:"ABC""A" "6" ""
2)它不變。不怎麼針對字符串操作,該串本身不變。
3)串中的每一個字符均有一個索引號。該索引號從 0 至 length()-1。
說明: length()方法,用來求串的長度。
4)串是一個對象,因此,它擁有屬性和方法。
5)相同的字符串是共享的。
String(不可變字符序列)
Java字符串就是Unicode字符序列,例如串“Java”就是4個Unicode字符J,a,v,a組成的。
Java字符串就是Unicode字符序列,例如串“Java”就是4個Unicode字符J,a,v,a組成的。
Java允許使用符號"+"把兩個字符串連接起來
– String s1 = “Hello”;String s2 = “World!”;
– String s = s1 + s2; //HelloWorld!
String類的常用方法:查看API文檔,不累述。
字符串相等的的判斷:一般使用equals()方法。
StringBuffer和StringBuilder 非常類似,均代表可變的字符序列,而且方法也一樣
字符串的選用
String:不可變字符序列
StringBuilder:可變字符序列、效率高、線程不安全
StringBuffer:可變字符序列、效率低、線程安全
String使用陷阱
string s="a"; //創建了一個字符串
s=s+"b"; //實際上原來的"a"字符串對象已經丟棄了,現在又產生了一個字符串s+"b"。如果多次執行這些改變串內容的操作,會導致大量副本字符串對象存留在內存中,降低效率。如果這樣的操作放到循環中,會極大影響程序的性能。
在標准Java類庫中包含一個Date類。它的對象表示一個特定的瞬間,精確到毫秒。
Java中時間的表示說白了也是數字,是從:標准紀元1970.1.1 0點開始到某個時刻的毫秒數,類型是long。
DateFormat和SimpleDateFormat 完成字符串和時間對象的轉化!
DateFormat類
1) 它來源於 java.text.DateFormat類
2) 它的作用:
a) 用來實現日期時間的格式化;
b) 將 日期時間型字符串 轉換成Date類的對象。
SimpleDateFormat 類
1)它來源於 java.text.SimpleFormat類
2)它的作用:
a)用來實現 日期時間的格式化;
先創建對象,指格式;
再格式化Date對象,得到結果;
例如:SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
String re = sdf.format( new Date() );
b)將 日期時間型字符串 轉換成 Date類的對象。
根據給定的字符串,來創建一個SimpleDateFormat的對象。
調用 parse( String )實現解析
例如:
String str = "===>>>2016年3月6號北京時間:15點23分21秒<<<==="; SimpleDateFormatsdf = new SimpleDateFormat("===>>>yyyy年MM月dd號北京時間:HH點mm分ss秒<<<==="); Dated1 = sdf.parse( str ); //解析
注意: SimpleDateFormat類是DateFormat類的子類。
注意: SimpleDateFormat類在格式化和轉換上均靈活。
Demo
/** * SimpleDateFormat類的靈活性 */ packagecom.hqg.oop.d311.a2; import java.text.DateFormat; importjava.text.ParseException; importjava.text.SimpleDateFormat; importjava.util.Date; public classSimpleDateFormatTest { public static void main(String[] args)throws ParseException { Date d1 = new Date(); String str1 = DateFormat.getDateInstance().format(d1 ); SimpleDateFormat sdf = newSimpleDateFormat("\n★====^_^======★\nyyyy年MM月dd日\n★====^_^======★\n"); String str2 = sdf.format( d1 );//將d1按照sdf對象的要求實現 格式化 System.out.println("默認d1>>>> " + d1 ); System.out.println("格式化str1>>>> " + str1 ); System.out.println("格式化str2>>>> " + str2 ); sdf = newSimpleDateFormat("HH點mm分ss秒"); str2 = sdf.format( d1 ); //將d1按照sdf對象的要求實現 格式化 System.out.println("\nst2>>>" + str2 ); sdf = newSimpleDateFormat("D"); str2= sdf.format( d1 ); System.out.println("\nst2>>>" + str2 ); str1 = "中國北京時間: 2008年08月08號20點8分8秒"; SimpleDateFormat sdf2 = newSimpleDateFormat( "中國北京時間: yyyy年MM月dd號HH點mm分ss秒"); Date dd = sdf2.parse( str1 ); //將str1 這個串按照 sdf2對象的格式進行解析 System.out.println( dd ); str1 = "中工期2016===03===11=="; sdf2 = new SimpleDateFormat("中工期yyyy===MM===dd==" ); Date dd2 = sdf2.parse( str1 ); System.out.println( dd2 ); } }
Calendar日歷類