這篇文章給大家分享的是有關(guān)Java常用類庫有哪些的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
成都創(chuàng)新互聯(lián)公司是一家專業(yè)從事成都網(wǎng)站設(shè)計、做網(wǎng)站的網(wǎng)絡(luò)公司。作為專業(yè)網(wǎng)站建設(shè)公司,成都創(chuàng)新互聯(lián)公司依托的技術(shù)實力、以及多年的網(wǎng)站運營經(jīng)驗,為您提供專業(yè)的成都網(wǎng)站建設(shè)、全網(wǎng)整合營銷推廣及網(wǎng)站設(shè)計開發(fā)服務(wù)!
String、StringBuffer、StringBuilder的區(qū)別
1.String一旦聲明,不可改變,StringBuffer與StringBuilder聲明的內(nèi)容可以改變
2.StringBuffer類中提供的方法都是同步方法,屬于安全的線程操作,而StringBuilder類中大的方法都是屬于異步方法,屬于非線程安全的操作。
Runtime類是Java中與運行時環(huán)境有關(guān)的操作類,利用此類可以取得系統(tǒng)的內(nèi)存信息,也可以利用此類產(chǎn)生新的操作系統(tǒng)進(jìn)程對象。
Runtime類表示運行時操作類,是一個封裝了JVM進(jìn)程的類,每一個JVM都對應(yīng)著一個Runtime類的實例,此實例由JVM運行時為其實例化。
Runtime run = Runtime.getRuntime();
package library; public class RuntimeDemo { public static void main(String[] args) { Runtime run = Runtime.getRuntime();//通過Runtime類的靜態(tài)方法為其進(jìn)行實例化操作 System.out.println("JVM最大內(nèi)存量:"+run.maxMemory());//觀察最大內(nèi)存量,根據(jù)機器環(huán)境會有所不同 System.out.println("JVM空閑內(nèi)存量:"+run.freeMemory());//取得程序運行時的內(nèi)存空閑量 String str = "Hello"+"World"+"!!!"+"\t"+"Welcome"+"To"+"MLDN"+"~"; System.out.println(str); for (int i = 0; i < 100; i++) {//循環(huán)修改Sting,產(chǎn)生多個垃圾,會占用內(nèi)存 str+=i; } System.out.println("操作String之后的,JVM空閑內(nèi)存量:"+run.freeMemory());//觀察有多個垃圾空間產(chǎn)生之后的內(nèi)存空閑量 run.gc();//進(jìn)行垃圾收集,釋放空間 System.out.println("垃圾回收之后的,JVM空閑內(nèi)存量:"+run.freeMemory());//垃圾收集之后的內(nèi)存空閑量。 } }
結(jié)果:
JVM最大內(nèi)存量:66650112
JVM空閑內(nèi)存量:4934616
HelloWorld!!!WelcomeToMLDN~
操作String之后的,JVM空閑內(nèi)存量:4877968
垃圾回收之后的,JVM空閑內(nèi)存量:5015840
1.GC(Garbage Collector,垃圾收集器)指的是釋放無用的內(nèi)存空間。
2.GC會由系統(tǒng)不定期進(jìn)行自動回收,或者調(diào)用Runtime類中的gc()方法手工回收。
Runtime類與Process類
調(diào)用本機可執(zhí)行程序
package library; import java.io.IOException; /** * 調(diào)用本機可以執(zhí)行程序 * 讓記事本進(jìn)程5s后消失 */ public class RuntimeDemo2 { public static void main(String[] args) { Runtime run = Runtime.getRuntime();//通過Runtime類的靜態(tài)方法為其進(jìn)行實例化操作 Process pro = null;//聲明一個Process對象,接受啟動的進(jìn)程 try { pro = run.exec("notepad.exe");//調(diào)用本機程序,必須進(jìn)行異常處理 } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace();//打印異常信息 } try { Thread.sleep(5000);//讓此線程存活5s } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace();//打印異常信息 } pro.destroy();//結(jié)束此進(jìn)程 } }
國際化操作是指程序可以同時適應(yīng)多門語言。
實現(xiàn)國際化光靠Locale類是不夠的,還需要屬性文件和ResourceBundle類的支持。屬性文件是指擴展名為.properties的文件,文件中的內(nèi)容保存結(jié)構(gòu)是一種“key=value”的形式,因為國際化的程序只顯示語言的不同,那么就可以根據(jù)不同的國家定義不同的屬性文件,屬性文件中保存真正要使用的文字信息,要訪問這些屬性文件,可以使用ResourceBundle類來完成。
實現(xiàn)java程序國際化操作必須通過一下3各類完成:
java.util.Local-----java.util.ResourceBundle---MessageFormat
通過Locale類所指定的區(qū)域碼,然后ResourceBundle根據(jù)Locale類所指定的區(qū)域碼找到相應(yīng)的資源文件,如果資源文件(屬性文件)中存在動態(tài)文本,子使用MesssageFormat進(jìn)行格式化。
屬性文件定義時,必須要按照“名稱_國家代碼”的形式命名,即所有的相關(guān)屬性文件的名稱全部一樣,只有國家的代碼不一樣,代碼如下
(處理動態(tài)文本:以中文為例是:”你好,xxx!“,其中“xxx”的內(nèi)容是由程序動態(tài)設(shè)置的,那么就需要使用占位符清楚地表示出動態(tài)文本的位置,占位符使用“{編號}”的格式出現(xiàn)。使用占位符之后,程序可以使用MessageFormat對信息進(jìn)行格式化。為占位符動態(tài)設(shè)置文本的內(nèi)容。)
1.中文的屬性代碼文件:Message_zh_CN.propertiesinfo = \u4f60\u597d\uff01
以上信息就是中文:你好,{0}!
2.英語屬性文件:Message_en_US.properties
info = Hello,{0}!
3.法語屬性文件:Message_fr_FR.properties
info = Bonjour,{0}!
通過Locale類和ResourceBundle類讀取屬性文件的內(nèi)容,代碼如下:
package library; import java.text.MessageFormat; import java.util.Locale; import java.util.ResourceBundle; public class InterDemo { public static void main(String[] args) { Locale zhLoc = new Locale("zh","CN");//表示中國地區(qū) Locale enLoc = new Locale("en","US"); Locale frLoc = new Locale("fr","FR"); ResourceBundle zhrb = ResourceBundle.getBundle("Message",zhLoc);//找到中文的屬性文件(.getBundle(文件名稱,區(qū)域碼)) ResourceBundle enrb = ResourceBundle.getBundle("Message",enLoc); ResourceBundle frrb = ResourceBundle.getBundle("Message",frLoc); String str1 = zhrb.getString("info"); String str2 = enrb.getString("info"); String str3 = frrb.getString("info"); System.out.println("中文:"+MessageFormat.format(str1, "你好"));//通過鍵值讀取屬性文件的類容 System.out.println("英文:"+MessageFormat.format(str2, "nihao")); System.out.println("法文:"+MessageFormat.format(str3, "nihao")); } }
結(jié)果:
中文:你好,你好!
英文:Hello,Hello!
法文:Bonjour,Hello!
多個占位符設(shè)置多個動態(tài)文本:
MessageFormat.format(str1,"你好",“hello”,"hello")
info = Hello,{0},{1},{2}!
System類是一些與系統(tǒng)相關(guān)的屬性和方法的集合,而且在System類中所有的書信給都是靜態(tài)的,要引用這些屬性和方法,直接使用System類調(diào)用即可。
System.gc():垃圾對象的回收,如果在一個對象被回收之前要進(jìn)行某些操作,那么該怎么辦呢,實際上,在Object類中有一個finalize()方法,此方法定義如下:
protected void finalize() throws Throwable package library.finalize; public class Person { private String name; private int age ; public Person(String name, int age) { super(); this.name = name; this.age = age; } 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; } @Override public String toString() { return "年齡:age=" + age + ",姓名: name=" + name ; } public void finalize()throws Throwable{//對象釋放空間時默認(rèn)調(diào)用此方法 System.out.println("對象被釋放 -->"+this);//直接打印對象調(diào)用toString } public static void main(String[] args) { Person per = new Person("張三",30); per = null;//斷開引用釋放空間 //以上代碼不會在顯示器顯示輸出 System.gc();//強制性釋放空間,,會調(diào)用fianlize()方法 } }
結(jié)果:
對象被釋放 -->年齡:age=30,姓名: name=張三
Date類:實例化對象 Date date = new Date();------輸出當(dāng)前日期
Calendar類,可以將取得的時間精確到毫秒,但是他是一個抽象類,依靠其子類GregorianCalendar類。
Dateformat類
SimpleDateFormat類
package library; import java.util.Arrays; public class ArraysDemo { public static void main(String[] args) { int temp[] = {3,5,7,9,1,2,6,8}; Arrays.sort(temp); //數(shù)組排序 System.out.println("排序后數(shù)組:"); System.out.println(Arrays.toString(temp));//以字符串輸出數(shù)組 int point = Arrays.binarySearch(temp, 3);//檢索數(shù)據(jù)位置 System.out.println("元素3的位置在:"+point); Arrays.fill(temp, 3); //填充數(shù)組 System.out.println("數(shù)組填充:"); System.out.println(Arrays.toString(temp));//一字符串輸出數(shù)組 } }
結(jié)果:
排序后數(shù)組:
[1, 2, 3, 5, 6, 7, 8, 9]
元素3的位置在:2
數(shù)組填充:
[3, 3, 3, 3, 3, 3, 3, 3]
比較器主要是針對對象數(shù)組的操作
package library.comparabledemo; import java.util.Arrays; public class Student implements Comparable<Student> { private String name; private int age; private float score; public Student(String name, int age, float score) { super(); this.name = name; this.age = age; this.score = score; } @Override public String toString() { return "Student [age=" + age + ", name=" + name + ", score=" + score + "]"; } @Override public int compareTo(Student o) { if (this.score>o.score) { return -1; }else if (this.score<o.score) { return 1; } else { if (this.age>o.age) { return 1; }else if (this.age<o.age) { return -1; }else { return 0; } } } public static void main(String[] args) { Student stu[] = {new Student("張三",20,90.0f),new Student("王五", 20, 99.0f), new Student("孫七", 22, 100.0f),new Student("李四", 22, 9.0f), new Student("趙六", 20, 70.0f),}; Arrays.sort(stu); for (int i = 0; i < stu.length; i++) { System.out.println(stu[i]); } } }
結(jié)果:
Student [age=22, name=孫七, score=100.0]
Student [age=20, name=王五, score=99.0]
Student [age=20, name=張三, score=90.0]
Student [age=20, name=趙六, score=70.0]
Student [age=22, name=李四, score=9.0]
分析比較器的排序原理
使用的是二叉樹排序方法,即通過二叉樹進(jìn)行排序,然后利用中序遍歷的方式把內(nèi)容依次讀取出來。
二叉樹排序的基本原理就是:將第1個內(nèi)容作為根節(jié)點保持,如果后面的值比根節(jié)點的值小,則放在根節(jié)點的左子樹,如果后面的值比根節(jié)點的值大,則放在根節(jié)點的右子樹。
找這樣的思路,如果給出了一下數(shù)字:8、3、10、14、6、4、7、1、13
在根據(jù)中序遍歷的原理(左子樹---根節(jié)點---右子樹的方式),排序后的結(jié)果:1、3、4、6、7、8、10、13、14
package library.comparabledemo; public class BinaryTree { class Node{ //申明一個節(jié)點類 private Comparable data; //保存具體類容 private Node left; //保存左子樹 private Node right; //保存右子樹 public void addNode(Node newNode){ if(newNode.data.compareTo(this.data)<0){ if(this.left==null){ //放在左子樹 this.left = newNode; }else { this.left.addNode(newNode); //遞歸 } } if(newNode.data.compareTo(this.data)>=0){ if (this.right==null) { //放在右子樹 this.right = newNode; }else { this.right.addNode(newNode); //遞歸 } } } public void printNode(){ //輸出時采用中序遍歷 if(this.left!=null){ //如果左子樹有值,則遞歸調(diào)用該方法,該操作會將中序,root.data左邊的數(shù)字現(xiàn)輸出,而且時從小到大的順序 this.left.printNode(); } System.out.print(this.data+"\t"); //輸出root.data--->根節(jié)點 if (this.right!=null) { //如果右子樹有值,則遞歸調(diào)用該方法,該操作會將中序,root.data左邊的數(shù)字現(xiàn)輸出,而且時從小到大的順序 this.right.printNode(); } } } private Node root; //根元素 public void add(Comparable data){ Node newNode = new Node(); //每傳入一個數(shù)值,就聲明一個新的根節(jié)點 newNode.data = data; if (root == null) { root = newNode; //如果是第1個元素,設(shè)置根節(jié)點 }else { root.addNode(newNode); //確定結(jié)點是放在左子樹還是右子樹 } } public void print(){ //輸出節(jié)點 this.root.printNode(); } public static void main(String[] args) { BinaryTree bt = new BinaryTree(); bt.add(8); bt.add(7); bt.add(14); bt.add(10); bt.add(4); bt.add(1); bt.add(13); bt.add(6); bt.add(3); System.out.println("排序后的結(jié)果:"); bt.print(); } }
結(jié)果:
排序后的結(jié)果:
1 3 4 6 7 8 10 13 14
他們可實現(xiàn)觀察者模式
常用正則規(guī)則
序號 | 規(guī)范 | 描述 | 序號 | 規(guī)范 | 描述 |
---|---|---|---|---|---|
1 | \\ | 表示反斜線(\)字符 | 9 | \w | 字母、數(shù)字、下劃線 |
2 | \t | 制表符 | 10 | \W | 非字母、數(shù)字、下劃線 |
3 | \n | 換行 | 11 | \s | 所有的空白字符(如:換行,空格等) |
4 | [abc] | 字符a、b 或c | 12 | \S | 所有非空白字符 |
5 | [^abc] | 除了abc以外的任意字符 | 13 | ^ | 行的開頭 |
6 | [a-zA-Z0-9] | 由字母、數(shù)字組成 | 14 | $ | 行的結(jié)尾 |
7 | \d | 數(shù)字 | 15 | . | 匹配除換行符之外的任意字符 |
8 | \D | 非數(shù)字 |
數(shù)量表示(X表示一組規(guī)范)
序號 | 規(guī)范 | 描述 | 序號 | 規(guī)范 | 描述 |
---|---|---|---|---|---|
1 | X | 必須出現(xiàn)依次 | 5 | X{n} | 必須出現(xiàn)n次 |
2 | X? | 出現(xiàn)0或1次 | 6 | X{n,} | 必須出現(xiàn)n次以上 |
3 | X* | 出現(xiàn)0、1次或多次 | 7 | X{n,m} | 必須出現(xiàn)n~m次 |
4 | X+ | 可以出現(xiàn)1次或多次 |
邏輯運算符(X、Y表示一組規(guī)范)
序號 | 規(guī)范 | 描述 | 序號 | 規(guī)范 | 描述 |
---|---|---|---|---|---|
1 | XY | X規(guī)范后跟著Y規(guī)范 | 5 | (X) | 作為一個捕獲組規(guī)范 |
2 | X|Y | X規(guī)范或Y規(guī)范 |
package library.regex; public class RegexDemo1 { public static void main(String[] args) { String info = "LXH:98|MLDN:90|LI:100"; String s[] = info.split("|"); //按照“|”拆分 System.out.println("字符串的拆分:"); for (int i = 0; i < s.length; i++) { System.out.print(s[i]+"、"); } } }
結(jié)果:
字符串的拆分:
、L、X、H、:、9、8、|、M、L、D、N、:、9、0、|、L、I、:、1、0、0、
package library.regex; public class RegexDemo2 { public static void main(String[] args) { String info = "LXH:98|MLDN:90|LI:100"; String s[] = info.split("\\|"); //按照“|”拆分,需要轉(zhuǎn)義 System.out.println("字符串的拆分:"); for (int i = 0; i < s.length; i++) { String s2[] = s[i].split(":"); System.out.println("\t|--"+s2[0]+"\t"+s2[1]); } } }
字符串的拆分:
|--LXH 98
|--MLDN 90
|--LI 100
Timer類是一個線程設(shè)施,可以用來實現(xiàn)在某一個時間或某一段時間后按排某一個任務(wù)執(zhí)行一次或定期重復(fù)執(zhí)行。該功能要與TimerTask配合使用。
package library.timer; import java.text.SimpleDateFormat; import java.util.Date; import java.util.TimerTask; public class MyTask extends TimerTask { //任務(wù)調(diào)度類要繼承TimmerTask類 @Override public void run() { // TODO Auto-generated method stub SimpleDateFormat sdf = null; sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSSS"); System.out.println("當(dāng)前系統(tǒng)時間:"+sdf.format(new Date())); } }
package library.timer; import java.util.Timer; public class TestTask { public static void main(String[] args) { Timer t = new Timer(); //建立Timer對象 MyTask mt = new MyTask(); //定義任務(wù) t.schedule(mt, 1000,2000); //設(shè)置任務(wù)的執(zhí)行,1秒后開始,每2秒重復(fù) } }
部分結(jié)果:
當(dāng)前系統(tǒng)時間:2018-11-22 00:09:27:0842
當(dāng)前系統(tǒng)時間:2018-11-22 00:09:29:0816
當(dāng)前系統(tǒng)時間:2018-11-22 00:09:31:0826
當(dāng)前系統(tǒng)時間:2018-11-22 00:09:33:0840
要點:
字符串頻繁修改使用StringBuffer類,線程安全
Runtime表示運行時,在JVM中只有一個Runtime,所以想取得Runtime類的對象,直接使用Runtime類中提供的靜態(tài)方法getRuntime()即可
國際化程序?qū)崿F(xiàn)的基本原理:所有的語言信息已key-->value的形式保存在資源文件中,程序通過key找到相應(yīng)的value,根據(jù)其所設(shè)置國家的Locale對象不同,找到的資源文件也不同,要想實現(xiàn)國際化必須依靠Locale、ResourceBundle兩類共同完成
System是系統(tǒng)類,可以取得系統(tǒng)的相關(guān)信息,使用System.gc()方法可以強制性進(jìn)行垃圾回收操作,調(diào)用此方法實際上就是調(diào)用Runtime類中的gc()方法
Format類為格式操作類,主要的3個子類是Messageformat、NumberFormat、DateFormat。
使用Date類可以方便的取得時間,但取得時間格式不符合低于的習(xí)慣,所有可以使用SimpleDateFormat類進(jìn)行日期的格式化操作
處理大數(shù)字可以使用BigInteger、BigDecimal,當(dāng)需要精確小數(shù)點操作位數(shù)時,使用Bigdecimal類即可
通過Random類可以取得指定范圍的隨機數(shù)字
如果一個類的對象要箱被克隆,則此對象所在的類必須實現(xiàn)Cloneable接口
要箱對一組對象進(jìn)行排序,則必須使用比較器。比較器接口Comparable中定義了一個compareTo()的比較方法,用來設(shè)置比較規(guī)則。
正則表達(dá)式是在開發(fā)中最常使用的一種驗證方法,String類中的replaceAll()、split()、matches()方法都是對正則有所支持
可以使用Timer類和TimerTask類完成系統(tǒng)的定時操作。
感謝各位的閱讀!關(guān)于“Java常用類庫有哪些”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
網(wǎng)頁標(biāo)題:Java常用類庫有哪些
URL地址:http://muchs.cn/article14/jpeige.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航、標(biāo)簽優(yōu)化、云服務(wù)器、搜索引擎優(yōu)化、自適應(yīng)網(wǎng)站、網(wǎng)站策劃
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)