Java常用类库(Object类、String类、StringBuffer类、包装类、Math类、System类)详解
常用類庫
java.lang
java.lang包下放置了Java開發中常用的類和接口,所以為簡化該包下類的使用,java.lang包下的類在使用時不需要導入這些類
java.lang包下常用類有:
- Object
- String
- StringBuffer和StringBuilder
- 八種基本數據類型的包裝類
- Thread等等
一、Object類
java.lang.Object類是類層次結構中最頂層父類。所有的類(包括數組)直接或者間接的繼承自Object類,同時也繼承了該類中的方法
Object的構造方法:
- Object類只有一個無參的構造方法
- Object()
Object中常用的方法:
- boolean equals(Object o) 比較兩個對象是否相同
- int hashCode() 返回一個對象的哈希碼
- String toString() 將一個對象轉換為字符串
1.getClass()
獲取該對象的類的完整路徑結構!
//getClass(): //獲取該對象的類的完整結構 Student stu= new Student("張三",18); Class clazz = stu.getClass(); System.out.println(clazz);Class clazz_1 = Student.class; String name = clazz_1.getName();//獲取完整路徑 System.out.println(name);String simpleName = clazz_1.getSimpleName(); System.out.println(simpleName);//獲取當前類名運行結果:
class com.changyongleiku.Objece_1.Student com.changyongleiku.Objece_1.Student Student2.hashcode()*
獲取對象在內存中的地址!
@Override public int hashCode() {return Objects.hash(name, age); } //hashcode() //獲取對象在內存中的地址 int i = stu.hashCode(); System.out.println(i);運行結果:
460141958
注意:
相同的對象應該具有相同的哈希碼值,所以重寫equals()的方法也要重寫hashcode()方法。
3.toString()*
對象的字符串形式!
@Override public String toString() {return super.toString(); }重寫toString()方法:
@Override public String toString() { return this.name+" "+this.age; } //toString()對象的字符串形式 System.out.println(stu);運行結果:
張三 18
4.equals()*
判斷字符串是否相等:
equals(Object obj);判斷傳入的對象和當前對象是否相等
boolean equals(Object o):
- Object類的equals方法用于判斷兩個對象是否相等
- Object類的equals方法的返回值為boolean的true和false
- Object類的equals方法只有一種情況返回true:兩個非空的引用變量o1和o2指向的是同一個對象時
equals方法和==的區別:
- ==可以用于比較基本數據類型的值
- ==可以用于比較兩個對象是否相等
- equals只能比較兩個對象是否相等
== 比較地址(基本數據類型)
equals比較值(引用數據類型)
注意:
當此方法被重寫時,通常有必要重寫 hashCode 方法,以維護 hashCode 方法的常規協定,該協定聲明相等對象必須具有相等的哈希碼.
5.Clone()
克隆: 要實現接口Cloneable
public class Student implements Cloneable{@Override protected Object clone() throws CloneNotSupportedException {return super.clone();}}克隆后判斷相等。
Student stu_3 = (Student)stu.clone(); System.out.println(stu.equals(stu_3));6.finalize()
當垃圾回收器確定不存在對該對象的更多引用時,由對象的垃圾回收器調用此方法。
7.創建一個類重寫方法
package com.changyongleiku.Objece_1;import java.util.Objects;public class PErson {private String name;private int age;private String gender;private String email;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getGender() {return gender;}public void setGender(String gender) {this.gender = gender;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}/* @Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;PErson pErson = (PErson) o;if (age != pErson.age) return false;if (name != null ? !name.equals(pErson.name) : pErson.name != null) return false;if (gender != null ? !gender.equals(pErson.gender) : pErson.gender != null) return false;return email != null ? email.equals(pErson.email) : pErson.email == null;}@Overridepublic int hashCode() {int result = name != null ? name.hashCode() : 0;result = 31 * result + age;result = 31 * result + (gender != null ? gender.hashCode() : 0);result = 31 * result + (email != null ? email.hashCode() : 0);return result;}*///判斷字符串是否相等@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;PErson pErson = (PErson) o;return age == pErson.age &&Objects.equals(name, pErson.name) &&Objects.equals(gender, pErson.gender) &&Objects.equals(email, pErson.email);}//哈希編碼@Overridepublic int hashCode() {return Objects.hash(name, age, gender, email);}//顯示屬性@Overridepublic String toString() {return "PErson{" +"name='" + name + '\'' +", age=" + age +", gender='" + gender + '\'' +", email='" + email + '\'' +'}';}//構造方法public PErson() {}public PErson(String name, int age, String gender, String email) {this.name = name;this.age = age;this.gender = gender;this.email = email;} }二、String類
-
String類代表字符串,提供了開發中常用的字符串處理的方法,如:求字符串的長度、截取字符串、替換字符串等方法
-
字符串是常量,它的值創建之后就不可以再修改了。
String類常用構造方法
- String() 無參構造方法
- String(String str) 有一個字符串參數的構造方法
- String(char[]ch) 有一個char類型數組參數的構造方法
- String(byte[] b) 有一個byte數組參數的構造方法
聲明和創建字符串對象的方式
String類常用方法:
- int length() 求字符串值的字符個數
- boolean equals(Object o) 比較兩個字符串是否相同
- String replace(char old,char n) 字符串替換
- char charAt(int index) 返回指定字符串指定位置的字符
- int **compareTo(String s)**按字典順序比較字符串大小
- boolean endsWith(String s) 比較字符串是否以指定的參數結尾
- boolean **startsWith(String s)**比較字符串是否以指定的參數開頭
- String **valueOf(int i)**將基本數據類型轉換為字符串
- boolean isEmpty() 判別一個字符串值的長度是不是為0
- int indexOf(int ch) 返回指定字符ch在字符串中的索引
- int **lastIndexOf(int ch)**返回指定字符ch在字符串中最后出現的索引
- String **substring(int begin)**從指定索引位置截取字符串
- split 根據給定分隔符拆分此字符串
- toCharArray 將此字符串轉換為一個新的字符數組。
- toLowerCase 轉小寫
- toUpperCase 轉大寫
- trim 去掉前后空格/忽略前導空白和尾部空白
- concat 字符串拼接
String類中的構造方法和常用方法:
import java.io.UnsupportedEncodingException; import java.util.Arrays;public class Main {public static void main(String[] args) throws UnsupportedEncodingException {//常用構造方法//String 類被final修飾,//字符串一旦聲明好,長度不能改變。對他的運算就是產生新的字符串。String str = "hello";//基本數據類型String s = new String("hello");//引用數據類型System.out.println(s.equals(str));//trueSystem.out.println(s==str);//false//將ASCII轉換成字符s = new String (new byte[]{97, 98, 99});System.out.println(s);//abcs = new String(new byte[]{97,98,99},"utf8");System.out.println(s);//abc//編碼 解碼s = "好";byte[] utf8s = s.getBytes("utf8");for (int i = 0; i < utf8s.length; i++) {System.out.println(utf8s[i]);}/* -27-91-67*/s = new String(utf8s,"utf8");System.out.println(s);//好//常用方法//charAt() 返回指定索引處 的Char值s = "sadqwdzxc";char c = s.charAt(3);System.out.println(c);//q//compareTo 按字典順序比較兩個字符串int qwe = s.compareTo("qwe");System.out.println(qwe);//2int aFc = s.compareToIgnoreCase("AFc");//忽略大小寫,按字典順序比較兩個字符串System.out.println(aFc);//18//concat 字符串拼接s = "sadqwdzxc";String concat = s.concat(" word");System.out.println(concat);//sadqwdzxc word//contains 是否包含此字符s = "sadqwdzxc";boolean a = s.contains("a");System.out.println(a);//true//endsWith 判斷是否以該字符結尾的s = "sadqwdzxc";boolean wewe = s.endsWith("wewe");System.out.println(wewe);//false//startsWith 判斷是否以該字符開頭的s = "sadqwdzxc";boolean wewe1 = s.startsWith("wewe");System.out.println(wewe);//false//indexOf 返回指定字符在此字符串中第一次出現處的索引s = "sadqwdzxc";int d = s.indexOf("d");System.out.println(d);//2//isEmpty 當且僅當 length() 為 0 時返回 trueboolean empty = s.isEmpty();System.out.println(empty);//false//replace 返回一個新的字符串,它是通過用 newChar 替換此字符串中出現的所有 oldChar 得到的。s = "sadqwdzxc";String replace = s.replace("d", "*");System.out.println(replace);//sa*qw*zxc//split 根據給定分隔符拆分此字符串s = "aaa,bbb,ccc,ddd";String[] split = s.split(",");System.out.println(Arrays.toString(split));//[aaa, bbb, ccc, ddd]//substring 從指定位置 截取返回一個新的字符串,它是此字符串的一個子字符串。s = "hello world";String substring = s.substring(6);System.out.println(substring);//world//substring 截取指定索引到指定索引的元素 [左閉右開)String substring1 = ss.substring(2,4);System.out.println(substring1);//ll//toCharArray 將此字符串轉換為一個新的字符數組。char[] chars = s.toCharArray();System.out.println(chars);//hello world//toLowerCase 轉小寫String s1 = s.toLowerCase();//轉小寫System.out.println(s1);//hello world//toUpperCase 轉大寫String s2 = s.toUpperCase();System.out.println(s2);//HELLO WORLD//trim 去掉前后空格/忽略前導空白和尾部空白s= " sd sd dasd ";String trim = s.trim();System.out.println(trim);//sd sd dasd//轉成字符串int i = 1;s = i + "";String s4 = String.valueOf(10);System.out.println(s);//1System.out.println(s4);//10// valueOf 返回 char 數組參數的特定子數組的字符串表示形式String s3 = String.valueOf(new char[]{'a', 's', 's', 'a', 's'}, 2, 3);System.out.println(s3);//sas} }String類、StringBuffer和StringBuilder之間的區別:
String字符串是常量,一旦創建無法修改
StringBuffer和StringBuilder是可變字符串,創建之后仍可以修改
StringBuffer是線程安全的、StringBuilder線程不安全
三、StringBuffer類和StringBuilder
StringBuffer和StringBuilder都是帶有緩沖區的可變字符串
為什么要使用StringBuffer或者StringBuilder?
一個String對象的長度是固定的,不能改變它的內容,也不能附加新的字符至String對象中。可以使用加號“+”運算符來連接字符串以達到附加新字符或字符串的目的,但使用加號“+”運算符會產生一個新的String實例,即需要另外分配空間。如果既想節省開銷,又能改變字符串的內容,則可以使用StringBuilder類。
StringBuffer類的構造方法
- StringBuffer()
- StringBuffer(String s)
StringBuffer的常用方法
- StringBuffer **append(int i)**在可變字符串末尾追加I
- StringBuffer **insert(int offset,String s)**在可變字符串指定位置插入另外一個字符串s
- int length() 返回可變字符串中字符的個數
- String toString() 將可變字符串轉化為字符串對象
四、包裝類
java.lang包下為8種基本數據類型提供對應的包裝類
8中基本數據類型以及對應的包裝類
包裝類提供了字符串、基本數據類型和包裝類相互轉化的方法
數字基本數據類型的包裝類都繼承了Number類,它們的使用方式相似,下面以常用的基本數據類型int對應的包裝類Integer為例說明數字類型包裝類的使用。
基本數據類型 int值轉化為Integer類型對象:
-
int i = 20;
-
Integer integer1 = new Integer(i);//方法一
-
Integer integer2 = Integer.valueOf(i);//方法二
-
Integer對象轉化為基本數據類型int值:
-
Integer integer = new Integer(20);
-
int i1 = integer**.intValue**();
-
-
String類型的數字轉化為Integer對象:
-
String s = “120”;
-
Integer integer1 = new Integer(s);//方法一
-
Integer integer2 = Integer.valueOf(s);//方法二
-
-
Integer類型轉化為String類型:
-
Integer integer = new Integer(20);
-
String s1 = integer.toString();
-
String類型的數字轉化為基本數據類型的int值:
- String s = “120”;
- int i1 = Integer.parseInt(s);//方 法一
- Integer integer = new Integer(s);
- int i2 = integer.intValue();//方法二
基本數據類型int轉化為字符串:
- int i1 = 20;
- String str = String.valueOf(i1);//方法一
- str = Integer.toString(i2);//方法二
Integer的equals方法:
-
Integer的equals方法繼承自Object,并且進行了重寫
-
Integer的equals方法只有一種情況返回true:兩個Integer類型的對象 i1 和 i2包含的值相等時;其他情況返回false
如:
-
Integer i1 = new Integer(20);
-
Integer i2 = new Integer(30);
-
Integer i3 = new Integer(20);
-
boolean b = i1.equals(i2);//false
-
b = i1.equals(i3);//true
-
根據基本數據類型int和對應包裝類Integer的知識,總結如下內容
- byte/short/long/float/double類型和包裝類之間轉換的方法
- byte/short/long/float/double的包裝類和字符串之間的轉換方法
- byte/short/long/float/double類型和字符串之間的轉換方法
boolean類型的包裝類Boolean
- Boolean用于將一個基本數據類型boolean值包裝為對象
將boolean值轉換為Boolean對象
- Boolean b1 = new Boolean(true);//方法一
- Boolean b2 = Boolean.valueOf(true);//方法二
將Boolean對象轉換為boolean值
- Boolean b = new Boolean(true);
- boolean b1 = b.booleanValue();//方法一
String類型對象轉換為Boolean對象
- String s=“true”;
- Boolean b1 = new Boolean(s);//方法一
- Boolean b2 = Boolean.valueOf(s);//方法二
將Boolean對象轉換為String類型
- Boolean b = new Boolean(true);
- String s1 = b.toString();//方法一
- String s2 = Boolean**.toString**(b);//方法二
- String s3 = String.valueOf(b);//方法三
boolean值轉換為String對象
- boolean b = true;
- String s1 = String.valueOf(b);
String對象轉換為boolean值
- String s = “true”;
- boolean b1 = Boolean.parseBoolean(s);//方法一
- Boolean b = new Boolean(s);
- boolean b2 = b.booleanValue();//方法二
字符包裝類Character用于將char類型值包裝為對象
將char值轉換為Character對象
- Character c1= new Character(‘A’);//方法一
- Character c2 = Character.valueOf(‘A’);//方法二
將Character對象轉換為char值
- Character c1= new Character(‘A’);
- char ch1 = c1.toString();//方法一
- char ch2 = Character.toString(c1);//方法二
Character包裝類除了提供以上char和Character相互轉換的方法外也提供了以下有用的方法
包裝類是將基本數據類型的值包裝為Java中的對象,Java語言為8種基本數據類型分別提供了包裝類.
包裝類提供了基本數據類型、包裝類、字符串之間的相互轉換的方法,這些轉換的的方法在今后的開發中十分有用。
public class Main {public static void main(String[] args) {//包裝類//把基本數據類型包裝一下,//Integer 構造方法的使用//int--> IntegerInteger i = new Integer(90);Integer.valueOf(i);System.out.println(i);//90//Integer--> intint i1 = i.intValue();System.out.println(i1);//100//String-->Integeri = new Integer("100");//只能轉 "數字"Integer.valueOf(i);System.out.println(i);//100//Integer--> StringString s = i.toString();System.out.println(s);//100//int-->StringString str = 10 +"";String s1 = String.valueOf(str);System.out.println(s1);//String --> inti = Integer.parseInt(str);System.out.println(i);//其他常用方法Integer x = new Integer(3);Integer y = new Integer(5);//compareTo 比較兩個對象大小int i2 = x.compareTo(y);System.out.println(i2);//-1 //x<y//boolean 類型的包裝類//boolean --> BooleanBoolean boo = new Boolean(true);System.out.println(boo);//String --> booleanboo = new Boolean("true");System.out.println(boo);//tureboo = new Boolean("sdadadad");System.out.println(boo);//false//Boolean --> booleanboolean b = boo.booleanValue();System.out.println(b);//String-->booleanboolean asdad = Boolean.parseBoolean("asdad");System.out.println(asdad);//false//Boolean -- > Stringboo.toString();System.out.println(boo);//false//Character 包裝類//char --> CharacterCharacter charq = new Character('a');//Character-->charcharq.charValue();//Character-->Stringcharq.toString();//char-->StringString.valueOf('a');//String --> char"a".charAt(0);//Character的其他方法Character cc = new Character('a');// isDigit 確定指定字符是否為數字。boolean a = Character.isDigit('5');System.out.println(a);//true//isLetter 確定指定字符是否為字母。boolean a_1 = Character.isLetter('K');System.out.println(a_1);//true//isLetterOrDigit 確定指定字符(Unicode 代碼點)是否為字母或數字。boolean a_2 = Character.isLetterOrDigit('K');System.out.println(a_2);//true// isLowerCase 確定指定字符是否為小寫字母。boolean a_3 = Character.isLowerCase('K');System.out.println(a_3);//fasle// isUpperCase 確定指定字符是否為大寫字母。boolean a_4 = Character.isUpperCase('K');System.out.println(a_4);//true// 確定指定字符是否為空白字符。isWhitespaceboolean spaceChar = Character.isSpaceChar(' ');System.out.println(spaceChar);//trueboolean whitespace = Character.isWhitespace('\n');///\\一般用這個System.out.println(whitespace);//true//轉小寫toLowerCase |、轉大寫:toUpperCaseCharacter.toLowerCase('H');} }自動拆裝箱:
public class main {public static void main(String[] args) {//自動拆裝箱//自動裝箱Integer i = 10;Boolean o = true;Integer q = 10;Integer w = 10;System.out.println(q==w);//trueInteger q_1 = 200;Integer w_1 = 200;System.out.println(q_1==w_1);//false/* 范圍 -128 ~ 127 一個字節內相等*///自動拆箱int j = new Integer(10);boolean ji = new Boolean(true);//自動裝箱tt(5);}public static void tt(Object o){System.out.println(o);} }五、Math類
在java.lang.Math類中提供了在數學應用中常見的常量(如:PI值)以及方法(如:三角函數)
Math的構造方法是私有的,所有無法創建Math對象
Math中只有static修飾的常量和類方法
六、System
- System類代表運行時系統,提供了一些獲取設置和獲取當前系統運行環境的方法
- System有三個成員變量
- in 標準輸入流
- out 標準輸出流
- err 錯誤輸出流
System中的方法
- System.arrayCope()//快速復制數組的方法
- System.exit(0);//退出Java虛擬機的方法
七、練習
練習一:
1.創建一個Student類,該有String類型的學號stuNo,String類型的姓名,要求將該類所有的成員變量進行封裝,并且提供公共的getter和setter方法,重寫equals方法,只要學生的學號相同即返回true,重寫toString()方法,toString方法返回值類似”姓名:張三 學號:201301 ”
String 類 String str = “abcd”; 求字符串的字符個數
將str字符串截取為”cd”
練習二:
編寫敏感詞過濾程序
在網絡程序中,如聊天室、聊天軟件等,經常需要對一些用戶所提交的聊天內容中的敏感性詞語進行過濾。如“性”、“色情”、“爆炸”、“恐怖”、“槍”等,這些都不可以在網上進行傳播,需要過濾掉或者用其他詞語替換掉。
思路:將用戶的聊天內容保存到一個字符串對象或一個StringBuilder對象中,然后與敏感詞語進行比對。如果屬于敏感詞語,就過濾掉或替換掉。
正則解法:
public class Genghuan {public static String gh(String str){return str.replaceAll("(?:性|色情|爆炸|恐怖|槍)","*");? } } public class main {public static void main(String[] args) {String str = "你性福嗎,色情這個東西,恐怖分子拿著槍,闖進了銀行!";String gh = Genghuan.gh(str);System.out.println(gh);} }StringBuffer 解法:
package com.changyongleiku.hw.hw_2;public class mmIN {public static void main(String[] args) {String[] a = {"性","爆炸","在這里","怎樣"};String aa = "asdad性sdjafj爆炸sdsad性是否奈法在這里啊,你要怎么樣怎樣啊";StringBuffer ss = new StringBuffer(aa);for (int i = 0; i < a.length; i++) {StringBuffer aaaa = new StringBuffer();for (int j = 0; j < a[i].length(); j++) {aaaa.append("*");}for(;;) {ss.replace(ss.indexOf(a[i]), ss.indexOf(a[i]) + a[i].length(), String.valueOf(aaaa));if(ss.indexOf(a[i])<0){break;}}}ss.toString();System.out.println(ss);} }練習三:
在注冊時通常要驗證用戶名和密碼是否合法,運用學習過的知識完成如下操作:
用戶名長度大于等于6位,必須包含數字和英文字母
密碼長度大于等于8位,必須包含特殊符合_或者$,英文字母以及數字
以上兩個條件同時成立注冊才能成功。
正則解法:
public class ZhuCe {private String usename;private String password;public void check(String username, String password) {if ((username.length() < 6 || password.length() < 8) && (username != "^(\\d+[A-Za-z]+[A-Za-z0-9]*)|([A-Za-z]+\\d+[A-Za-z0-9]*)$"|| password != "^[[0-9]+[a-zA-Z]+[$|_]+]+$")) {System.out.println("注冊失敗");} else {System.out.println("注冊成功");}}public String getUsename() {return usename;}public void setUsename(String usename) {this.usename = usename;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;} }public ZhuCe() {}public ZhuCe(String usename, String password) {this.usename = usename;this.password = password;} public class main {public static void main(String[] args) {ZhuCe z = new ZhuCe();Scanner scan = new Scanner(System.in);System.out.println("請輸入要注冊的賬號:");String zhanghao = scan.next();System.out.println("請輸入要注冊的密碼:");String mima = scan.next();z.setUsename(zhanghao);z.setPassword(mima);z.check(z.getUsename(), z.getPassword());} }Character解題:
package com.changyongleiku.hw.hw_3;public class User1 {//注冊賬號功能public boolean verifyUserName(String username){if(username.length()>=6&&containsDigit(username)&&containsLetter(username)&&!containsSpecialChar(username)&&!containsOtherSpecialChar(username)){return true;}return false;}//注冊密碼public boolean verifyPassword(String password){if(password.length()>=8&&containsDigit(password)&&containsLetter(password)&&containsSpecialChar(password)&&!containsOtherSpecialChar(password)){return true;}return false;}// 是否包含數字public boolean containsDigit(String str){char[] chars = str.toCharArray();for (int i = 0; i < chars.length; i++) {if(Character.isDigit(chars[i])){return true;}}return false;}// 是否包含字母public boolean containsLetter(String str){char[] chars = str.toCharArray();for (int i = 0; i < chars.length; i++) {if(Character.isLetter(chars[i])){return true;}}return false;}// 是否包含_或者$public boolean containsSpecialChar(String str){char[] chars = str.toCharArray();for (int i = 0; i < chars.length; i++) {if(chars[i]=='_'||chars[i]=='$'){return true;}}return false;}// 是否包含其他字符public boolean containsOtherSpecialChar(String str){char[] chars = str.toCharArray();for (int i = 0; i < chars.length; i++) {if(chars[i]!='_'&&chars[i]!='$'&&!Character.isDigit(chars[i])&&!Character.isLetter(chars[i])){return true;}}return false;} } package com.changyongleiku.hw.hw_3;public class mmmmAin {public static void main(String[] args) {User1 us = new User1();boolean a1 = us.verifyUserName("asdawweqf123");boolean a2 = us.verifyPassword("asdaszc12151_");if(a1 && a2){System.out.println("注冊成功!");}else{System.out.println("注冊失敗!");}} }總結
以上是生活随笔為你收集整理的Java常用类库(Object类、String类、StringBuffer类、包装类、Math类、System类)详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android WebView 播放视频
- 下一篇: Python:正则表达式re.compi