使用者登入模組 - 6 登陸成功顯示 首次訪問or上次訪問時間
阿新 • • 發佈:2020-12-06
第九章、常用類
1. Object類
1.1 Java中常用的包
java.lang包 - 該包是java語言的核心包,該包重的所有內容由Java虛擬機器自動匯入; - 如:java.lang.String 類/System類等....... java.util包 - 該包是java語言的工具包,裡面提供了大量的工具類和集合等內容。 - 如:java.util.Scanner類/Random類、Arrays類等.... java.io包 - 該包是java語言的輸入輸出包,裡面提供了大量讀寫檔案的相關類。 - 如:java.io.PrintStream/InputStream java.net包 - 該包是java語言的網路包,裡面提供了大量網路通訊相關的類的內容。 - 如:java.net.ServerSocket類/Socket類等...... java.lang.reflect 包 - 該包是java語言的反射包,裡面提供了一些反射相關的類。 ........
1.2 基本概述
java.lang.Object類是所有類層次結構的根類,任何類都是該類的直接/間接子類。
1.3 常用方法
boolean equals(Object obj) - 用於判斷呼叫物件是否與引數物件相同 - 該方法預設比較兩個物件的地址,與 == 的效果等效 - 若希望比較物件的內容,則需要進行方法的重寫。 - 若該方法重寫了,則應該去重寫hasCode()方法,為了滿足hasCode()常規協定。 int hashCode() - 用於獲取呼叫物件的雜湊碼值(記憶體地址和編號)並返回。 - 若兩個物件呼叫equals()方法相等,則各自呼叫該方法得到的雜湊碼值值必須相同。 - 若兩個物件呼叫equals()方法不同等,則各自呼叫改方法的結果可以相同。 但是最高不相同 String toString() - 用於返回呼叫物件的字串表現形式。 - 預設返回字串是: 包名.型別 @ 雜湊碼的無符號十六進位制形式。 - 若希望返回其他內容,則需要進行方法的重寫。 - 當使用print()/println()列印引用變數的時候,會自動呼叫toString()方法 - 當使用字串和引用變數進行拼接(+)時,會自動呼叫toString()方法。 可以自動生成toString()方法
2. 包裝類
2.1 基本概述
在某些場合要求所有的資料內容都必須是類型別的物件,而Java語言中有8中基本資料型別宣告的遍歷都不是物件,
為了使得這些資料在該場合中能夠使用,則需要進行物件化處理,此時就需要藉助包裝類將變數包裝成物件在進行使用。
8個基本資料型別都對應自身的包裝類
2.2 Integer型別(重點)
java.lang.Integer類是Object類的間接子類,用於包裝int型別的資料。 該類由final關鍵字修飾,表示該類不能被繼承。 (1)常用方法 該類重寫了Object類的equals()、hashCode()以及toString()方法 Integer(int value) - 根據引數指定的整數值來構造物件 Integer(String s) - 根據引數指定的字串來構造物件 int intValue() - 用於獲取呼叫物件中含有的int型別資料並返回。 用於實現將Integer型別拆包為int型別 static Integer valueOf(int i) - 根據引數指定的整數來得到物件。 用於實現將int型別包裝成Integer型別 static int parseInt(String s) - 用於將字串型別的資料轉換為int型別的整數(掌握)
2.3 裝箱和拆箱
由int型別向Integer型別的轉換過程,叫做裝箱
由Intger型別向int型別的轉換過程,叫做拆箱
從jdk1.5開始,支援自動裝箱和自動拆箱的機制。
3. String類(重中之重)
3.1 基本概念
java.lang.String類用於描述字串,可以描述Java程式中的所有字串字面值 如 "abc"等.
該類描述的字串內容是個常量,一旦建立完畢之後將不能進行更改。
Java為String提供了快取池機制,當使用雙引號定義物件的時候,Java環境首先取字串緩衝池尋找相同內容的字串,如果存在
就直接拿過來應用,如果不存在建立一個新的字串物件放在緩衝池中。
比如:
String s1 = "abc"; - "abc"是個常量,不能更改。
s1 = "123"; - 並不是改變“abc”字串的內容,而是改變引用s1的指向。
注意:
String s1 = null; String s1 = "";之間有區別嗎??
解析:
前者表示沒有字串物件,後者表示有字串物件但是沒有內容。
3.2 常用的方法(熟練掌握、記住)
(1)常用的構造方法
String() - 使用無參構造方式構造物件
String(byte[] bytes) - 根據引數指定的byte陣列來構造物件
String(byte[] bytes, int offset, int length) - 使用引數陣列中的一部分來構造物件
String(String original) - 根據引數指定的字串內容來構造物件
String(StringBuffer buffer) - 根據引數指定的引用來構造物件
String(StringBuilder builder) - 根據引數指定的引用來構造物件
(2)常用的成員方法
char charAt(int index) - 用於返回引數指定下標位置的字元
int length() - 用於返回當前字串的長度。
int compareTo(String anotherString)
- 用於比較呼叫物件和引數物件的字串大小關係並返回。
- 使用當前字串中第一個字元起的每一個字元減去引數字串中物件位置的字元
- 若第一個字元不相等則可以代表字元大小的關係,若相等則使用下一個字元繼續比較
- 若存在的字元都相同,則大小取決於長度。
如:
"abc" 和 "bcd"比較大小:由於第一個字元'a'小於'b',因此字串"bcd"比較大
"abc" 和 "abd" 比較大小:由於前兩個字元相等,則第三個字元'c'小於'd',因此"abd"大
"abc" 和 "abcd"比較大小:由於前面字元相等,則大小取決於字元長度,因此“abcd”大
int compareToIgnoreCase(String str)
- 用於比較呼叫物件和引數物件的字串大小關係並返回。
- 不考慮大小寫,也就是'A'和'a'在該方法中認為是相等的關係。
boolean equals(Object anObject)
- 用於比較字串內容是否相等並返回。
boolean equalsIgnoreCase(String anotherString)
- 用於比較字串內容是否相等並返回,不考慮大小寫,如:'A'和'a'是相等
案例:
提示使用者輸入使用者名稱和密碼模擬登入的過程,當用於輸入“admin”和“123”的時候,則提示登入成功,否則提示
登入失敗,當用戶輸入3次之後任然失敗,則提示“賬戶已凍結,明天再試”,要求不考慮大小寫。
boolean contains(CharSequence s) - 用於判斷呼叫物件中是否包含引數指定的內容
- 其中引數是介面型別,因此實參傳遞有兩種方式:
a.建立實現類的物件作為實參傳遞,而String類就是該介面的實現類
b.使用匿名內部類建立介面型別的物件作為實參傳遞
boolean endsWith(String suffix)
- 用於判斷當前字串是否以引數指定的內容為結尾
boolean startsWith(String prefix)
- 用於判斷當前字串是否以引數指定的內容為開頭
String toLowerCase() - 用於將當前字串中所有的字元轉換為小寫並返回
String toUpperCase() - 用於將當前字串中所有的字元轉換為大寫並返回
String trim() - 用於去除當前字串中兩端的空白字元並返回。
byte[] getBytes() - 用於將當前字串內容轉換為byte陣列並返回
char[] toCharArray() - 用於將當前字串內容轉換為char陣列並返回
int indexOf(int ch) - 用於返回當前字串中引數 ch指定的字元第一次出現的下標
int indexOf(int ch, int fromIndex) - 用於從fromIndex位置開始查詢ch指定的字元,若查詢失敗,則返回 -1
int indexOf(String str) - 用於查詢引數str指定的字串並返回下標
int indexOf(String str, int fromIndex) - 用於從fromIndex位置開始查詢
int lastIndexOf(int ch) - 用於返回引數 ch指定的字元最後一次出現的下標
int lastIndexOf(int ch, int fromIndex) - 用於從fromIndex位置開始查詢ch指定的字元出現的下標,反向搜尋的第一次,若查詢失敗,則返回 -1
int lastIndexOf(String str) - 用於返回str指定的字串並最後一次出現的下標
int lastIndexOf(String str, int fromIndex) - 用於從fromIndex位置開始反向搜尋的第一次
String substring(int beginIndex) - 用於獲取當前字串中從 beginIndex 位置開始的子字串並返回。
String substring(int beginIndex, int endIndex) - 用於獲取當前字串中從beginIndex位置開始到endIndex結尾的子字串並返回。
boolean matches(String regex) - 用於判斷當前字串是否滿足引數字串指定的規則。
作業:
1.首先輸入學生人數,迴圈輸入班級的學生資訊,然後放入Student陣列中,並列印所有姓zhang的學生資訊。
要求姓名拼音(不要用漢字),學生所有資訊有String格數輸入,中間用逗號隔開。
其中資訊有:學號、姓名以及年齡。
提示:
需要查詢String類中split()方法進行字串拆分,實參傳遞逗號(",")即可。
Student[] arr = new Student[10];
4. StringBuffer類和StringBuilder類(查詢API手冊)
4.1 基本概述
由於String類描述字元序列是不可以改變的,因此描述多個類似的字串需要單獨儲存,此時記憶體空間消耗比較大。
為了節省記憶體空間直接物件字元序列本身進行改變,則使用StringBuffer和StringBuilder。
StringBuffer類從jdk1.0開始就存在的,屬於執行緒安全的類,效率比較低。
StringBuilder類從jdk1.5開始出現,屬於非執行緒安全的類,效率比較高,推薦使用該類。
4.2 常用的方法
StringBuilder(String str) - 根據字串來構造物件
- 初始容量為:16 + 字串引數的長度
- 該類沒有重寫equals()和hashCode()方法,但是重寫了toString() 方法
int capacity() - 用於獲取當前物件的容量並返回
int length() - 用於返回當前物件的字元個數
StringBuilder insert(int offset, String str) - 用於將str插入到當前字串中offset的位置並返回。
StringBuilder append(String str) - 用於將str追加到當前字串的末尾位置
tringBuilder delete(int start, int end) - 用於從當前字串中將start到end之間的字串內容移除。
StringBuilder replace(int start, int end, String str) - 用於將當前字串從中start到end之間的字串用str替換。
StringBuilder reverse() - 用於將當前字串中的字元序列反轉過來
擴容演算法:
使用append追加東西的時候,如果長度超過了字串儲存空間進行擴容,將舊的複製過去。
int newCapacity = (value.length << 1) + 2;
20
0001 0100
0010 1000
32 8
20 * 2
value.length * 2 + 2
容量擴大兩倍+2
5. 日期相關類
5.1 Date類
(1).基本概念
java.util.Date類用於描述特定的瞬間,可以精確到毫秒。通常描述年月日時分秒資訊。
(2).常用方法
Date() - 無參構造方式 ,預設使用當前系統時間來初始化物件
Date(long date) - 根據引數指定的毫秒來構造物件。
- 引數為距離1970 年 1 月 1 日0時0分0秒的毫秒數, 1秒=1000毫秒 1毫秒=1000微妙
- 該方法與File類中的方法搭配使用很方便。
long getTime() - 用於獲取呼叫物件距離1970 年 1 月 1 日0時0分0秒的毫秒數
void setTime(long time) - 根據引數指定的毫秒數來調整物件描述的時間。
5.2 SimpleDateFormat類
(1).基本概念
java.text.SimpleDateFormat類用於實現Date型別和String型別之間的轉換,呼叫日期格式
(2).常用方法
SimpleDateFormat(String pattern) - 根據引數指定的格式來構造物件
- 引數字串中格式由: y-年 M-月 d-日 H-時 m-分 s-秒
String format(Date date) - 用於將Date型別轉換為String型別並返回
Date parse(String source) - 用於將String型別轉換為Date型別並返回