Java SE 核心 Ijava
一、Object類
在 Java 繼承體系中,java.lang.Object 類位於頂端(是全部對象的直接或間接父類)。若是一個類沒有寫 extends 關鍵字聲明其父類,則該類默認繼承 java.lang.Object 類。Object 類定義了「對象」的基本行爲,被子類默認繼承。
public class Object
類 Object 是類層次結構的根類。每一個類都使用 Object 做爲超類。
11個方法:3個重載方法。9個方法。
1)toString():獲得對象的字符串表示形式。
2)equals(Object o):比較兩個對象是否相等的。(比較內容)。
3)getClass():獲得對象的大Class 對象。
4)hashCode():獲得對象的哈希碼。
5)wait():線程等待。(重載)
6)notify():喚醒線程。
7)notifyAll():喚醒全部線程。
8)clone():克隆 對象。
9)inalize():垃圾回收相關的。
二、String類
是字符串類型,是引用類型,是「不可變」字符串,無線程安全問題。在 java.lang.String中
注意事項:String str =「abc」;和 String str=new String(「abc」);的區別!
1)String 在設計之初,虛擬機就對他作了特殊的優化,將字符串保存在虛擬機內部的字符串常量池中。一旦咱們要建立一個字符串,虛擬機先去常量池中檢查是否建立過這個字符串,若有則直接引用。String 對象由於有了上述的優化,就要保證該對象的內容自建立開始就不能改變!因此對字符串的任何變化都會建立新的對象,而不是影響之前的對象!
2)String 的 equals 方法:兩個字符串進行比較的時候,咱們一般使用 equals 方法進行比較,字符串重寫了 Object 的 equals 方法,用於比較字符串內容是否一致。雖然 java 虛擬機對字符串進行了優化,可是咱們不能保證任什麼時候候「==」都成立!
3)編程習慣:當一個字符串變量和一個字面量進行比較的時候,用字面量.equals 方法去和變量進行比較,即:if("Hello".equals(str))由於這樣不會產生空指針異常。而反過來用,即:if(str.equals("Hello"))則咱們不能保證變量不是 null,若變量是 null,咱們在調用其 equals 方法時會引起空指針異常,致使程序退出。若都爲變量則 if(str!=null&&str.equals(str1))也可。
4)String 另外一個特有的 equals 方法:euqalsIgnoreCase,該方法的做用是忽略大小寫比較字符串內容,經常使用環境:驗證碼。if("hello".equalsIgnoreCase(str))。
5)String 的基本方法:
① String toLowerCase():返回字符串的小寫形式。如:str.toLowerCase()
② String toUpperCase():返回字符串的大寫形式。如:str.toUpperCase()
③ String trim():去掉字符串兩邊的空白(空格\t\n\r),中間的不去。如:str.trim()
④ boolean startsWith():判斷字符串是否以參數字符串開頭。如:str.startsWith("s")
⑤ boolean endsWith():判斷字符串是否以參數字符串結尾。如:str.endsWith("s")
⑥ int length():返回字符串字符序列的長度。如:str.length()
6)indexOf 方法(檢索):位置都是從 0 開始的。
①int indexOf(String str):在給定的字符串中檢索 str,返回其第一次出現的位置,找不到則返回-1。
②int indexOf(String str,int from):在給定的字符串中從 from 位置開始檢索 str,返回第一次出現的位置,找不到則返回-1(包含 from 位置,from 以前不看)
③int lastIndexOf(String str):在給定的字符串中檢索 str,返回其最後一次 出 現 的位置,找不到則返回-1(也可認爲從右往左找,第一次出現的位置)。
④int lastIndexOf(String str,int from):給定字符串從 from 位置開始檢索str,返回最後一次出現的位置,找不到則返回-1(包含 from 位置,from 以後的不看)
7)charAt 方法:char charAt(int index):返回字符串指定位置(index)的字符。
8)substring 方法(子串):字符串的截取,下標從 0 開始的。
①String substring(int start,int end):返回下標從 start 開始(包含)到 end 結束的字符串(不包含)。
②String substring(int start):返回下標從 start 開始(包含)到結尾的字符串。
9)getBytes 方法(編碼):將字符串轉換爲相應的字節。
①byte[] getBytes():以當前系統默認的字符串編碼集,返回字符串所對應的二進制序列。
如:byte[] array=str.getBytes(); System.out.println(Arrays.toString(array));
②byte[] getBytes(String charsetName):以指定的字符串編碼集,返回字符串所對應的二進制序列。這個重載方法須要捕獲異常,這裏可能引起沒有這個編碼 集的異常,UnsupportedEncodingException,如:str="常"; byte[] bs=info.getBytes("UTF-8");
注意事項:
Windows 的默認編碼集 GBK:英文用 1 個字節描述,漢字用 2 個字節描述;
ISO-8859-1 歐洲經常使用編碼集:漢字用 3 個字節描述;GBK 國標;GB2312國標;UTF-8 編碼集是最經常使用的:漢字用 3 個字節描述。
編碼:將數據以特定格式轉換爲字節;解碼:將字節以特定格式轉換爲數據。
String(byte[] bytes, String charsetName) :經過使用指定的 charset 解碼指定的 byte 數組,構造一個新的 String。如:String str=new String(bs,"UTF-8");
10)split 方法(拆分):字符串的拆分。
String[] split(String regex):參數 regex 爲正則表達式,以 regex 所表示的字符串爲分隔符,將字符串拆分紅字符串數組。其中,regex 所表示的字符串不被保留,即不會存到字符串數組中,可理解爲被一刀切,消失!
11)replace 方法:字符串的替換。
String replaceAll(String regex,String replacement):將字符串中匹配正則表達式 regex的字符串替換成 replacement。如:String str1=str.replaceAll("[0-9]+", "chang");
12)String.valueOf()方法:重載的靜態方法,用於返回各種型的字符串形式。
String類經常使用方法
問題序列:
1)爲何String對象稱爲「不可變對象?
2)看圖
3)String類和常量池
在Java的內存分析中,咱們會常常聽到關於「常量池」的描述,實際上常量池也分了如下三種:
1. 全局字符串常量池(String Pool)
全局字符串常量池中存放的內容是在類加載完成後存到String Pool中的,在每一個VM中只有一份,存放的是字符串常量的引用值(在堆中生成字符串對象實例)。
2. class文件常量池(Class Constant Pool)
class常量池是在編譯的時候每一個class都有的,在編譯階段,存放的是常量(文本字符串、final常量等)和符號引用。
3. 運行時常量池(Runtime Constant Pool)
運行時常量池是在類加載完成以後,將每一個class常量池中的符號引用值轉存到運行時常量池中,也就是說,每一個class都有一個運行時常量池,類在解析以後,將符號引用替換成直接引用,與全局常量池中的引用值保持一致。
4)Java經常使用類的基本用法(結合Java API文檔學習)
String類經常使用方法一
String類經常使用方法二
三、StringBuilder
與 String 對象不一樣,StringBuilder 封裝「可變」的字符串,有線程安全問題。對象建立後,可經過調用方法改變其封裝的字符序列。
StringBuilder 經常使用方法:
1)追加字符串:StringBuilder append(String str)
2)插入字符串:StringBuilder insert(int index,String str):插入後,原內容依次後移
3)刪除字符串:StringBuilder delete(int start,int end)
4)替換字符串:StringBuilder replace(int start,int end,String str):含頭不含尾
5)字符串反轉:StringBuilder reverse()
StringBuilder和StringBuffer
StringBuilder和StringBuffer很是相似,均表明可變的字符序列。 這兩個類都是抽象類AbstractStringBuilder的子類,方法幾乎如出一轍。
StringBuilder和StringBuffer稱之爲「可變字符序列」。那二者有什麼區別呢?
1)StringBuffer JDK1.0版本提供的類,線程安全,作線程同步檢查, 效率較低。
2)StringBuilder JDK1.5版本提供的類,線程不安全,不作線程同步檢查,所以效率較高。 建議採用該類。
四、Date時間類(java.util.Date)
java.util.Date 類用於封裝日期及時間信息,通常僅用它顯示某個日期,不對他做任何操做處理,做處理用 Calendar 類,計算方便。查看API文檔你們能夠看到其實Date類中的不少方法都已通過時了。JDK1.1以前的Date包含了:日期操做、字符串轉化成時間對象等操做。JDK1.1以後,日期操做通常使用Calendar類,而字符串的轉化使用DateFormat類。
五、Calendar日曆類
java.util.Calendar 類用於封裝日曆信息,其主做用在於其方法能夠對時間份量進行運算。
1)經過 Calendar 的靜態方法獲取一個實例該方法會根據當前系統所在地區來自行決定時區,幫咱們建立 Calendar 實例,這裏要注意,實際上根據不一樣的地區,Calendar 有若干個子類實現。而 Calendar 自己是抽象類,不能被實例化!咱們不須要關心建立的具體實例爲哪一個子類,咱們只須要根據 Calendar 規定的方法來使用就能夠了。
2)日曆類所解決的根本問題是簡化日期的計算,要想表示某個日期還應該使用 Date 類描述。Calendar 是能夠將其描述的時間轉化爲 Date 的,咱們只須要調用其 getTime()方法就能夠獲取描述的日期的 Date 對象了。
3)經過日曆類計算時間:爲日曆類設置時間,日曆類設置時間使用通用方法 set。set(int field,int value),field 爲時間份量,Calendar 提供了相應的常量值,value 爲對應的值。
4)只有月份從 0 開始:0 爲 1 月,以此類推,11 爲 12 月,其餘時間是正常的從 1 開始。也可使用 Calendar 的常量 calendar.NOVEMBER……等。
5)Calendar.DAY_OF_MONTH 月裏邊的天---號;
Calendar.DAY_OF_WEEK 星期裏的天---星期幾
Calendar.DAY_OF_YEAR 年裏的天
6)獲取當前日曆表示的日期中的某個時間單位可使用 get 方法.
六、DateFormat類和SimpleDateFormat類
把時間對象轉化成指定格式的字符串。反之把指定格式的字符串轉化成時間對象。DateFormat是一個抽象類,通常使用它的的子類SimpleDateFormat類來實現。
七、包裝類(包裝類均位於java.lang包,八種包裝類和基本數據類型的對應關係)
正則表達式
Java 語言的 8 種基本類型分別對應了 8 種「包裝類」。每一種包裝類都封裝了一個對應的基本類型成員變量,同時還提供了針對該數據類型的實用方法。
1)包裝類的目的:用於將基本類型數據看成引用類型看待。
2)包裝類的名字:除了 Integer(int),Character(char)外,其他包裝類名字都是基本類型名首字母大寫。
3)拆、裝箱:Integer i=new Integer(1);建立一個以對象形式存在的整數 1,這種從基本類型轉爲引用類型的過程稱之爲「裝箱」,反之叫「拆箱」。
4)裝箱:方式一:Double d=new Double(2.2);//裝箱
方式二:Double d=Double.valueOf(2.2);//基本類型都有 valueOf 方法
5)拆箱:double num=d.doubleValue();//拆箱
6)包裝類使用前提:JDK1.5+
已經有了基本數據類型了,爲什麼還要提供對應的包裝類型的?
緣由:
1:包裝類中提供了各類用於操做基本數據類型的方法,主要的方法就是基本數據類型和字符串之間的相互的轉換。
2:有些時候,基本數據類型不能直接使用,必須看成 Object 的實例才能使用。必須有對應的包裝的類型才能知足需求。
自動裝箱和拆箱
自動裝箱和拆箱就是將基本數據類型和包裝類之間進行自動的互相轉換。JDK1.5後,Java引入了自動裝箱(autoboxing)/拆箱(unboxing)
自動裝箱底層實現:經過調用 Integer.valueOf(int) 實現。
自動拆箱底層實現:經過調用 對象.intValue()來實現的。
包裝類空指針異常問題
null表示i沒有指向任何對象的實體,但做爲對象名稱是合法的(無論這個對象名稱存是否指向了某個對象的實體)。因爲實際上i並無指向任何對象的實體,因此也就不可能操做intValue()方法,這樣上面的寫法在運行時就會出現NullPointerException錯誤因此自動裝箱與拆箱的功能是所謂的「編譯器蜜糖(Compiler Sugar)」,雖然使用這個功能很方便,但在程序運行階段得了解Java的語義,如不熟悉特殊狀況,可能會出錯!
編程