前言:
Java是一種強大而靈活的編程語言,具有廣泛的應用范圍,從桌面應用程序到企業級應用程序都能夠使用Java進行開發。在Java的編程過程中,使用標準類庫是非常重要的,因為標準類庫提供了豐富的類和API,可以簡化開發過程,提高開發效率。本文將介紹一些常用的Java類庫及其API,希望能夠幫助開發人員更好地理解和應用Java編程中的常用工具和功能
目錄
前言:
Object類
定義
?toString方法
?equals方法
Arrays類
equals 方法
?copyof方法
?fill方法
sort( )方法
binarySearch( )方法
toString( )方法
基本數據類型包裝類
Integer包裝類
包裝類轉化為基本類
自動的拆箱
基本類轉為包裝類型
自動裝箱
String類
String的簡單理解
獲取功能的常用方法
轉換功能?
?StringBuffer類
StringBuffer類概述
StringBuffer和String的區別?
添加功能
刪除功能
?替換功能
反轉功能?
截取功能
String類StringBuffer類StringBuilder區別
?Math類
Random類
Date類
Object類
定義
Object類是所有Java類的祖先(根基類).每個類都使用Object 作為超類 (父類).所有對象(包括數組)都繼承實現這個類的方法.
Object可以表示Java中任意的類(體現了多態性)
如果在類的聲明中未使用extends關鍵字指明其基類,則默認基類為Object類
例如:? public class Person {?... }
等價于: public class Person extends Object { ... }
?toString方法
Object類中定義有public String toString()方法,其返回值是 String 類 型,描述當前對象的有關信息
當需要通過輸出語句輸出一個對象時,如System.out.println(person),將自動調用該對象類的 toString()方法,如果該類中沒有重寫toString(),那么默認調用Object類中的toString(),默認輸出對象hashCode值
public class NoOverrideToString {private int id;private String name;public NoOverrideToString(int id, String name) {this.id = id;this.name = name;}public static void main(String[] args) {NoOverrideToString obj = new NoOverrideToString(1, "Example");System.out.println(obj.toString());}
}
打印結果:NoOverrideToString@7ef20235
可以根據需要在用戶自定義類型中重寫toString()方法
public class OverrideToString {private int id;private String name;public OverrideToString(int id, String name) {this.id = id;this.name = name;}@Overridepublic String toString() {return "OverrideToString{" +"id=" + id +", name='" + name + '\'' +'}';}public static void main(String[] args) {OverrideToString obj = new OverrideToString(1, "Example");System.out.println(obj.toString());}
}
打印結果:OverrideToString{id=1, name='Example'}
?equals方法
boolean? equals(Object obj)??用來判斷對象是否相等,返回的是一個boolean值
Object 中的 equals 方法默認使用==比較,比較的是對象地址,這點需要注意.
class Student{int age;String name;public Student(int age, String name) {this.age = age;this.name = name;}//沒有重寫equals方法
}
public class Test {public static void main(String[] args) {//創建二個對象Student a1 = new Student(18, "小明");Student a2 = new Student(18, "小明");//對象比較System.out.println(a1.equals(a2));}
}
運行結果:false
JDK提供的一些類,如String,Date等,重寫了Object的equals方法,調用這些類的equals方法,?x.equals (y) ,當x和y所引用的對象是同一類對象且屬性內容相等返回 true 否則返回 false
class Student{int age;String name;public Student(int age, String name) {this.age = age;this.name = name;}//重寫equals方法@Overridepublic boolean equals(Object obj) {if(obj instanceof Student){Student other =(Student) obj;return name.equals(other.name) && age ==other.age;}return false;}
}
public class Test {public static void main(String[] args) {//創建二個對象Student a1 = new Student(18, "小明");Student a2 = new Student(18, "小明");//對象比較System.out.println(a1.equals(a2));}
}
運行結果:true
關于 " == " :
- "=="? 比較等號兩邊是否相等
○ 當==用于基本類型比較時,比較的是變量值是否相等。
○ 當==用于引用類型比較時,比較的是對象的地址是否相等
Arrays類
equals 方法
比較兩個數組對象中元素是否相等.
而數組對象中的equals用來判斷與另一個數組對象是否相等
public class Null {public static void main(String[] args) {/*比較兩個數組內容是否相等*/int[] a={1,2,3,4};int[] b={1,2,3,4};System.out.println(Arrays.equals(a,b));}
}
運行結果:false?
?copyof方法
數組復制,將原數組內容復制到一個指定長度新數組中
public static void main(String[] args) {int[] a = {1,2,3,4};int[] b = Arrays.copyOf(a,4);//將原數組c復制到長度為4的新數組d中System.out.println(Arrays.toString(b));}
打印結果:[1, 2, 3, 4]
?fill方法
?將指定的int值分配給指定的int數組的每個元素
public static void main(String[] args) {int[] a = {1,2,3,4};Arrays.fill(a,4);System.out.println(Arrays.toString(a));}
運行結果:[4, 4, 4, 4]?
sort( )方法
排序,且可通過索引局部排序
public class Null {
public static void main(String[] args) {//全部排序int[] a = {5,4,3,2,1};Arrays.sort(a);System.out.println(Arrays.toString(a));//通過索引指定區間排序,tolndex索引對應的值不參與排序int[] b ={6,5,4,3,2,1};Arrays.sort(b,1,4); //對數組b索引1~4元素排序,所有4不參與System.out.println(Arrays.toString(b));}
}
運行結果:[1, 2, 3, 4, 5]? ?[6, 3, 4, 5, 2, 1]?
binarySearch( )方法
?二分查找,查找前需要先排序
public class Null {public static void main(String[] args) {int[] b ={5,4,6,8,2,1,7};Arrays.sort(b); //排序后 b={1,2,4,5,6,7,8}int index =Arrays.binarySearch(b,6); //需要找6System.out.println(index); //輸出索引,排序后6對應的索引為4}
}
運行結果:4
toString( )方法
?將數組中的元素內容拼接成一個字符串輸出
public class Null {public static void main(String[] args) {int[] a={1,2,3,4};System.out.println(a); //輸出數組地址或首元素地址,不是數組的元素內容System.out.println(Arrays.toString(a));;//通過toString()輸出元素內容}
}
打印結果:[I@14ae5a5]? ? [1, 2, 3, 4]
基本數據類型包裝類
Java中基本數據類型使用8個關鍵字聲明的,不是面向對象的?例如:int a = 10;
Java語言是一個面向對象的語言,但是Java中的基本數據類型卻是不面 向對象的,這在實際使用時存在很多的不便,為了解決這個不足,在設 計類時為每個基本數據類型設計了一個對應的類進表示,這樣八個和基 本數據類型對應的類統稱為包裝類
包裝類(如:Integer,Double等)這些類封裝了一個相應的基本數據 類型數值,并為其提供了一系列操作方法
理解:Java語言是面向對象的,可以為每一個基本類型定義一個類進行表示,這樣我們在類中還是保持一個基本類型變量儲存數據,同時還可以提供許多方法對基本數據變量進行操作.
Integer包裝類
//一類是靜態方法System.out.println(Integer.toBinaryString(5));//轉為二進制System.out.println(Integer.toHexString(17));//轉為16進制System.out.println(Integer.toOctalString(9));//轉為8進制System.out.println(Integer.max(10,5));//去最大數System.out.println(Integer.compare(8,10));//兩個整數比較大小 1 0 -1//一類是非靜態System.out.println(a.equals(b));//這個是Integer中的equlas的比較 // 這里Integer不可以傳字母 System.out.println(a.compareTo(b));//轉換的方法 包裝類型 轉 基本類型int aa = a.intValue();int bb = Integer.parseInt("20");//把基本類型 轉為包裝類型int cc = 10;Integer dd = new Integer(cc);Integer ee = Integer.valueOf(cc);
包裝類轉化為基本類
自動的拆箱
int c =? a.intvalue();? ==============>int c = a; //默認自動的調用intvalue這個方法。
基本類轉為包裝類型
自動裝箱
int x = 10;
Integer y = Integer.valueof(x); =============> Integer y = x //這里默認調用的是Integer y = Integer.valueof(x);
自動裝箱時,會默認自動調用valueof()方法
在valueof()中如果 基本類型 在-128——127之間,會在緩存數組中直接取一個Integer對象,減少創建次數,如果二個值相等,獲取同一個對象. 如果不在這個區間,每次都創建一個新的對象.建議一般使用equals用來比較。
String類
String的簡單理解
地址:java.lang.String
java中所有字符串都是此類的實例
"adb"-------> 字符串對象? ? ? 底層是一個char數組??
字符串對象的創建
1.String s ="adb"
創建時,先去字符串池中查找有沒有相同的值的對象,如果沒有,就創建一個字符串對象返回地址,如果字符串常量中已經儲存,不用創建新的,直接返回已經存在的對象的地址。
2.String s1 =? new String("sdc");?
3.字符串創建后不能被改變
注意`:String s = "abc"? ?//這個是創建一個新的對象s賦值是abc,s+ = "fghgh"? ?這個是第二次創建新對象s賦值是abc +?fghgh所以最后s就是abcfghgh
獲取功能的常用方法
- int length( ) ? ? ? ? ? 獲取字符串長度
- char charAt( ) ? ? ? 獲取指定位置上的字符
- int indexOf( ) ? ? ? ? 獲取字符首次出現的位置,也可以從指定位置開始查找
- lastIndexOf( ) ? ? ? ?從后往前找
- String substring( ) ? ?從指定位置開始截取一個字符串副本
String str = "Hello, World!";
int len = str.length(); // 獲取字符串長度
char ch = str.charAt(7); // 獲取索引位置為7的字符
int index = str.indexOf("o"); // 查找字符'o'第一次出現的位置
int lastIndex = str.lastIndexOf("o"); // 從后往前查找字符'o'出現的位置
String sub = str.substring(1, 5); // 從索引1開始截取到索引5的子字符串System.out.println("Length: " + len);
System.out.println("Character at index 7: " + ch);
System.out.println("Index of 'o': " + index);
System.out.println("Last index of 'o': " + lastIndex);
System.out.println("Substring from index 1 to 5: " + sub);
打印結果:
Length: 13
Character at index 7: W
Index of 'o': 4
Last index of 'o': 8
Substring from index 1 to 5: ello
轉換功能?
byte[] getBytes()
- 這個方法返回字符串的字節數組表示形式。它將字符串轉換為字節數組,使用的編碼取決于平臺的默認字符集。
char[] toCharArray()
- 返回一個字符數組,包含了字符串中的所有字符。每個字符在數組中的位置對應字符串中的相同位置。
static String valueOf(char[] chs)
- 這是一個靜態方法,接受一個字符數組?
chs
?并返回一個新的字符串,包含?chs
?中的字符內容。
String toLowerCase()
- 返回一個新字符串,其中所有的字符都被轉換為小寫形式。
String toUpperCase()
- 返回一個新字符串,其中所有的字符都被轉換為大寫形式。
String concat(String str)
- 將指定的字符串?
str
?連接到調用字符串的末尾,并返回一個新的字符串。相當于使用?+
?運算符進行字符串拼接。
String[] split(String regex)
- 根據給定的正則表達式?
regex
?將字符串拆分為子字符串數組。返回的數組包含了根據分隔符?regex
?分割的多個子字符串。replace(char old, char new)
- 這個方法用于將字符串中的指定字符old替換為新字符new
replace(String old, String new)
- 這個方法用于將字符串中的指定子字符串old替換為新的子字符串new
replaceAll(String regex, String replacement)
- 這個方法用于根據正則表達式regex,替換字符串中匹配正則表達式的部分為指定的replacement字符串
replaceFirst(String regex, String replacement)
- 這個方法與replaceAll類似,不同的是它只替換匹配正則表達式regex的第一個部分
?String?trim( )
- ?去除字符串兩端空格(字符串中間的空格不能去除
?StringBuffer類
StringBuffer類概述
我們如果對字符串進行拼接操作,每次拼接,都會構建一個新的String 對象,既耗時,又浪費空間。而StringBuffer就可以解決這個問題線程安全的可變字符序列
StringBuffer和String的區別?
String可以直接創建字符串對象,而StringBuffer不能,需要新創建一個字符串對象
String s1 = "abc";StringBuffer s2 = new StringBuffer("abc");
String:
String
?類是不可變的(immutable)。這意味著一旦一個?String
?對象被創建,它的內容不能被更改。任何看似修改?String
?內容的操作實際上是創建了一個新的?String
?對象
StringBuffer:
StringBuffer
?是可變的(mutable)。它允許修改其內容,而不創建新的對象。
添加功能
public StringBuffer append(String str)
- 該方法用于將指定的字符串?str?添加到當前?StringBuffer?對象的末尾。
- 返回的是修改后的?StringBuffer?對象本身
StringBuffer sb = new StringBuffer("Hello");
sb.append(" World");
// 現在 sb 包含 "Hello World"
public StringBuffer insert(int offset,String str)
- 該方法將指定的字符串?str?插入到當前?StringBuffer?對象中的指定?offset?位置處。
- 返回的是修改后的?StringBuffer?對象本身
StringBuffer sb = new StringBuffer("Hello");
sb.insert(5, " World");
// 現在 sb 包含 "Hello World"
刪除功能
public StringBuffer deleteCharAt(int index)
- 該方法用于刪除當前?StringBuffer?對象中指定?index?處的字符。
- 返回的是修改后的?StringBuffer?對象本身
StringBuffer sb = new StringBuffer("Hello World");
sb.deleteCharAt(5);
// 現在 sb 包含 "HelloWorld",即刪除了第 5 個位置上的空格
?public StringBuffer delete(int start, int end)
- 該方法用于刪除當前?StringBuffer?對象中從?start?到?end-1?范圍內的子字符串。
- 返回的是修改后的?StringBuffer?對象本身
StringBuffer sb = new StringBuffer("Hello World");
sb.delete(5, 11);
// 現在 sb 包含 "Hello",即刪除了從第 5 個位置(包括)到第 11 個位置(不包括)之間的字符
?替換功能
public StringBuffer replace(int start, int end, String str)
- 該方法用于將當前?StringBuffer?對象中從?start?到?end-1?范圍內的子字符串用指定的字符串?str?替換
- 返回的是修改后的?StringBuffer?對象本身
StringBuffer sb = new StringBuffer("Hello World");
sb.replace(6, 11, "Java");
// 現在 sb 包含 "Hello Java",即將從第 6 個位置(包括)到第 11 個位置(不包括)之間的子字符串替換為 "Java"
反轉功能?
public StringBuffer reverse()
- 該方法用于反轉當前?StringBuffer?對象中的字符序列
- 返回的是修改后的?StringBuffer?對象本身
StringBuffer sb = new StringBuffer("Hello");
sb.reverse();
// 現在 sb 包含 "olleH",即原字符串的字符順序被反轉了
截取功能
public String substring(int start)
- 該方法用于從當前?StringBuffer?對象中提取從?start?位置到末尾的子字符串
- 返回的是一個新的?String?對象,包含從?start?位置到末尾的字符序列
StringBuffer sb = new StringBuffer("Hello World");
String sub1 = sb.substring(6);
// sub1 現在包含 "World",即從第 6 個位置(包括)開始直到末尾的子字符串
?public String substring(int start, int end)
- 該方法用于從當前?StringBuffer?對象中提取從?start?到?end-1?的子字符串
- 返回的是一個新的?String?對象,包含從?start?到?end-1?的字符序列
StringBuffer sb = new StringBuffer("Hello World");
String sub2 = sb.substring(6, 11);
// sub2 現在包含 "World",即從第 6 個位置(包括)到第 11 個位置(不包括)之間的子字符串
截取功能和前面幾個功能的不同
返回值類型是String類型,本身沒有發生改變
StringBuilder類功能和StringBuffer功能完全一致, StringBuffer是線程安全的
String類StringBuffer類StringBuilder區別
可變性:
String
:是不可變類,一旦創建,內容不可更改。每次對?String
?類型的操作(如拼接、替換等)都會創建一個新的?String
?對象。StringBuffer
:是可變類,線程安全(即是同步的)。它支持在字符串中進行添加、插入、刪除和替換字符或子串的操作,而不會創建新的對象。StringBuilder
:也是可變類,但不是線程安全的。它和?StringBuffer
?的 API 是相同的,但沒有實現同步,因此在單線程環境下性能更好。線程安全性:
String
:不涉及線程安全問題,因為不可變性保證了在多線程環境下不會發生競態條件。StringBuffer
:是線程安全的,因為它的關鍵操作使用了synchronized
關鍵字進行同步,可以安全地在多線程環境下使用。StringBuilder
:不是線程安全的,因此在單線程環境下性能比?StringBuffer
?更好,但在多線程環境下需要手動處理同步問題。性能:
- 操作少量數據時,
String
?的性能通常比較好,因為不涉及額外的內存分配和復制操作。- 操作大量數據或需要頻繁修改字符串時,
StringBuffer
?和?StringBuilder
?的性能會更好,因為它們支持可變操作而不需要創建新對象。
?Math類
其方法的參數和返回值類型一般為double型
abs(double a)
- 功能:返回參數?
a
?的絕對值。- 示例:
double x = -10.5; double absX = Math.abs(x); // absX 的值為 10.5
sqrt(double a)
- 功能:返回參數?
a
?的平方根。- 示例:
double y = 25.0; double sqrtY = Math.sqrt(y); // sqrtY 的值為 5.0
pow(double a, double b)
- 功能:返回?
a
?的?b
?次冪。- 示例
double base = 2.0; double exponent = 3.0; double result = Math.pow(base, exponent); // result 的值為 8.0 (2的3次方)
max(double a, double b)
- 功能:返回?
a
?和?b
?中的較大值。- 示例:
double m = 10.5; double n = 8.0; double maxVal = Math.max(m, n); // maxVal 的值為 10.5
min(double a, double b)
- 功能:返回?
a
?和?b
?中的較小值。- 示例
double p = -3.0; double q = 0.5; double minVal = Math.min(p, q); // minVal 的值為 -3.0
random()
- 功能:返回一個大于等于 0.0 且小于 1.0 的隨機?
double
?類型的數。- 示例
double rand = Math.random(); // rand 的值為 0.0 到 1.0 之間的隨機數
long round(double a)
- 功能:將?
double
?類型的參數?a
?四舍五入為?long
?類型。- 示例:
double num = 10.6; long roundedNum = Math.round(num); // roundedNum 的值為 11
Random類
? ? ?首先要創建Random對象? ?//Random? random = new Random();
? ? ?random.nextBoolean=====> 隨機返回一個布爾值
? ? ?random.?nextInt()? ? ? ?//隨機返回一個int類型的數
? ? ?random.?nextInt(int n)? // 隨機返回一個超過n的int數
import java.util.Random;public class RandomExample {public static void main(String[] args) {Random random = new Random();// 生成隨機布爾值boolean randomBoolean = random.nextBoolean();System.out.println("Random Boolean: " + randomBoolean);// 生成隨機整數int randomInt = random.nextInt();System.out.println("Random Integer: " + randomInt);// 生成指定范圍內的隨機整數int n = 100; // 指定范圍int randomIntInRange = random.nextInt(n);System.out.println("Random Integer within range [0, " + n + "): " + randomIntInRange);}
}
運行結果
Random Boolean: true
Random Integer: 123456789
Random Integer within range [0, 100): 42
Date類
使用Date類代表當前系統時間
Date d = new Date();
Date d = new Date(long d);
?d.getTime()? ?獲取1970.1.1 0.0.0? 至程序運行時刻的毫秒值
lomg d是一個時間戳? 將指定的long類型的時間戳構造出一個對象?
作者建議:學習知識在于深度理解,多動手、多動腦,總能更快地領悟。不要僅僅停留在閱讀代碼的層面,親自動手敲打一遍,會帶來更豐富的收獲。通過實踐,我們能夠更深入地理解知識,掌握技能,并且在解決問題時更加得心應手。相信自己的能力,堅持不懈地實踐,你將會取得更大的進步和成就。讓學習成為一種習慣,讓動手實踐成為你提升的捷徑,加油!你是最棒的!