【轉載】J2SE知識點歸納筆記(六)---Java常用類

注:本文轉載自coder-pig

原文請戳:http://blog.csdn.net/coder_pig/article/details/23420907#comments




java中的類當然很多很多,豬大哥這篇文章只是冰山一角,看看就行,關鍵是要用到的時候自己去細查那個類就可以了,努力吧,奮鬥吧。大笑




Java常用類:

前言:

在上兩節的博文中,我們對Java的多線程進行了深入的解析,理解起來還是有一些難度的;

今天這一節,我們講點輕鬆點的,就是Java中的一些常用類的用法,這些類都放在java.lang包或者

java.util包下;而我們不需要import lang包,因爲系統會自動導入這個包!

好了,廢話不多說,看是這一節!


Java.lang包中的常用類:


Object類

簡介:

Object類是所有類的父類,默認繼承該類,每個類都可以直接調用Object的方法,同時還可以繼承其他的類,

這並沒有違背Java的單繼承的規則哦!


常用方法:

toString() 返回描述對象的一個字符串,通常重寫該方法以取得對象的字符串信息
另外,當調用system.print(),對象作爲參數時,默認調用對象的toString()方法
String
equals() 判斷兩個對象的內容是否相同,可按需求對其進行重寫 boolean
clone() 實現對象的複製,與賦值不同,賦值引用的是同一對象實例;另外需要實現
Cloneable接口才能使用clone()方法,否則會引發CloneNotSupportedException異常
Object
getClass() 該類封裝對象接口運行時的狀態,類加載時,Class對象自動創建,但是我們
不能夠自己去new Class()哦!
Class

代碼實例:

  1. package com.jay.example;  
  2.   
  3. public class ObjectTest {  
  4.     public static void main(String[] args) throws Exception {  
  5.         Person p1 = new Person("老王"48);  
  6.         Person p2 = new Person("老張"47);  
  7.         Person p3 = new Person("老王"48);  
  8.           
  9.         String s1 = new String("呵呵");  
  10.         String s2 = new String("呵呵");  
  11.           
  12.         //這裏直接調用print對象名的話,自動調用對象的toString()方法  
  13.         //如果不重寫的話,返回的字符串:  
  14.         //getClass().getName() + '@' + Interger.toHexString(hashcode())  
  15.         //就是類名@哈希碼  
  16.         System.out.println(p1);  
  17.           
  18.           
  19.         //這裏要注意==賦值和equals的區別  
  20.         //==比較的是地址;equals比較的是兩對象是否指向同一實例  
  21.         //而這裏要注意字符串,字符串變量是有一個常量池的,當我們創建一個新的字符串  
  22.         //如果字符串中已經存在了,那麼將該對象指向該內存空間,即指向同一引用對象  
  23.         //如果不是String對象而是普通的對象的話,直接調用equals是不相等的  
  24.         //所以需要對equals方法進行重寫,不然就不能判斷對象是否相等了  
  25.         System.out.println(p1 == p3);  
  26.         System.out.println(p1.equals(p3));  
  27.           
  28.         //字符串常量池,使得兩對象equals返回ture  
  29.         System.out.println(s1 == s2);  
  30.         System.out.println(s1.equals(s2));  
  31.           
  32.         //調用clone()方法進行對象的複製,需要實現Cloneable接口,  
  33.         //要覆蓋Clone()方法,至少寫個return super().clone();還要注意使用try-catch對  
  34.         //CloneNotsupportedException進行捕獲;  
  35.         //克隆與==賦值不一樣,指向的不是同一實例對象哦!  
  36.           
  37.         try {  
  38.             Person p4 = (Person) p2.clone();  
  39.             System.out.println(p4);  
  40.             System.out.println("p4和p2是否爲同一對象:" + (p4 == p2));  
  41.         } catch (CloneNotSupportedException e) {  
  42.             e.printStackTrace();  
  43.         }  
  44.           
  45.           
  46.         /*Class類的使用: 
  47.          * ①獲得指向某個類的class對象的引用:   Class c1 = p1.getClass(); 
  48.          * ②獲得接口或者類的全名:     c1.getName() 
  49.          * ③當然也可以通過Class的靜態方法forName()獲得class對象引用:Class.forName("類的全名"); 
  50.          * ④getSuperclass():獲得父類的class對象 
  51.          * ⑤newInstance();創建一個與調用對象對應類的實例,是新的哦! 
  52.          *  
  53.          * */  
  54.           
  55.         System.out.println(p1.getClass());  
  56.           
  57.         System.out.println(p1.getClass().getName());  
  58.           
  59.         Class c1 = Class.forName("com.jay.example.Person");  
  60.         System.out.println(c1);  
  61.         System.out.println(c1.getSuperclass());  
  62.           
  63.           
  64.         Person p5 = p1.getClass().newInstance();  
  65.         p5.name = "老黃";  
  66.         p5.age = 25;  
  67.         System.out.println(p5);  
  68.     }  
  69. }  


運行截圖:




封裝類


在Java中,基本數據類型都有與之對應的封裝類(包裝類)   eg:  int ----> Integer

裝箱:基本數據類型---->封裝類

拆箱:封裝類--->基本數據類型

裝箱與拆箱由系統自動完成!



基本數據類型與包裝類的對照:


int --->  Integer                      short---> Short                  long---> Long

char --->  Character              float  ---> Float                  double--->Double

boolaen--->Boolean              byte  --->  Byte


使用竅門:

包裝類-->基本:   intValue()

字符串--->基本:  parseInt("str")

包裝--->字符串:  toString()

字符串--->包裝: valueOf("str")



使用示例代碼:

  1. package com.jay.example;  
  2.   
  3. public class PottingTest {  
  4.     public static void main(String[] args) {  
  5.           
  6.         //①包裝類與基本數據類型的相互轉換  
  7.         //除了這種構造方法外:還可以寫成,Integer(123),但使用字符串的話一定要  
  8.         //是符合對應數字格式的字符串,否則印發NumberFormatException(數字轉換異常)  
  9.         //因爲封箱與拆箱都是自動進行的,所以如果我們輸入兩個數相加的結果是:246  
  10.         //其他格式的都是這種轉換格式,把int替換成其他數據類型即可  
  11.         Integer i = new Integer("123");  
  12.         int j = i.intValue();  
  13.         System.out.println(i + j);  
  14.   
  15.           
  16.         /* 
  17.          * ②字符串轉換爲基本數據類型 
  18.          * 同樣要是符合數字類型的字符串,不然也會報異常 
  19.          * 同理,只需要把int替換成其他數據類型即可:eg: Double.parseDouble("1.23"); 
  20.          * 別忘了Java小數默認是Double類型的哦! 
  21.          * */  
  22.           
  23.          int i2 = Integer.parseInt("321");  
  24.            
  25.           
  26.          /* 
  27.           * ③包裝類與字符串的相互轉換: 
  28.           * */  
  29.           
  30.          //包裝類轉換成字符串,直接調用toString()即可  
  31.          Integer a = new Integer(11);  
  32.          i.toString();  
  33.            
  34.          //字符串轉換爲包裝類:  
  35.          Integer ig = Integer.valueOf("987");  
  36.                
  37.     }  
  38. }  



Character判斷字符類別的方法:

ps:都是靜態方法,參數都是char字符,返回值都是boolean!

 

數字:isDiagit(char)                    字母:isLetter(char)                  數字或字母:isLetterOrDigit(char)

小寫字母:isLowerCase(char)                大寫字母:isUpperCase(char)                空格:isSpace(char)        




Math類

常量PI和E

由名字就知道這個是數學類,當然是提供一些數學方法的啦,比如:正餘弦運算等

Math類定義了兩個常量,PI(圓周率)和E(自然數),順道複習下Java中常量的定義方式:

public static final double PI:

public static final double E:

除了以上變量,當然還有很多的數學方法,比較多,這裏只列出比較常用的

幾個,有需要的自己查詢API,都是靜態方法,可以直接通過Math.XXX調用哦!


常用屬性:

sqrt():求平方根

pow(數字,次方):求數字的多少次方

rint():返回與參數最接近的整數值,以double形式返回

abs():返回絕對值

max():返回兩數的最大值

min():返回兩數的最小值





System類

常見方法:

①exit(int exitcode):結束應用程序的運行,會返回exitcode給父進程(操作系統),exitcode爲0的話表示正常退出

②複製數組:static void arraycopy(被複制的數組,起始下標,目標數組,起始下標,長度)

下標是從0開始算的哦!


使用實例:

  1. package com.jay.example;  
  2.   
  3. public class ArrayCopyTest {  
  4.     public static void main(String[] args) {  
  5.         int[] a = {1,2,3,4,5,6,7,8};  
  6.         int[] b = {0,0,0,0,0,0,0,0};  
  7.         int[] c = {0,0,0,0,0};  
  8.           
  9.         //這裏要注意下標不能越界,否則會引發ArrayIndexOutOfBoundsException異常  
  10.         //輸出結果是:3,4,5,6,7  
  11.           
  12.         System.arraycopy(a, 2, c, 05);  
  13.         for(int i = 0; i < c.length;i++)  
  14.             System.out.print(c[i]);  
  15.           
  16.           
  17.           
  18.     }  
  19. }  


③currentTimeMillis()

返回從1970.1.1 零點到現在的時間,單位是毫秒,通常用來計算程序運行耗費的時間

使用實例:

  1. package com.jay.example;  
  2.   
  3. public class CurrentTimeMillisTest {  
  4.     public static void main(String[] args) {  
  5.         long start,end;  
  6.         int j = 0,k=0;  
  7.         //記錄起始時間  
  8.         start = System.currentTimeMillis();  
  9.         for(int i = 0;i < 1000;i++)  
  10.             for(j = 0;j < 1000;j++)  
  11.             {  
  12.                 k++;  
  13.             }  
  14.         //記錄結束時間  
  15.         end = System.currentTimeMillis();  
  16.         //結束時間-起始時間,即可算出兩層for循環的運行時間  
  17.         //這個是電腦配置是有一定關係的!不同電腦的結果可能不同!我的電腦是1毫秒  
  18.         System.out.println("循環1000次消耗了" + (end - start) + "毫秒");  
  19.     }  
  20. }  




String類

相關操作:

①字符串的連接:用"+"加號可以連接成字符串,比如: 123 + "" = "123"
②求字符串的長度:  str.length()
③求子串:str.subString(開始下標,"結束下標")    //注意是從0開始算的,截取到結束下標 - 1;或者這樣算:子串長度 = :結束 - 開始
④判斷是否相等:這裏要注意==這個比較的是字符串是否存儲在同一位置!如果是比較內容我們要用equals("");
⑤返回給定下表處的字符:   str.charAt(int index);  //從0開始算的
⑥將指定字符串連接到字符串的尾部: str.concat("HeHe");
⑦檢索某字符在字符串中第一次出現的下標:  str.indexOf("a");
⑧檢索某字符在字符串中最後一次出現的下標:str.lastIndexOf("a")
⑨去掉頭尾的空白:str.trim(),這個在數據庫操作中比較常用
⑩替換字符串中的某段: str.replace("想替換的字符串","替換後的字符串");
11.比較兩個字符串的大小,無視大小寫:str.equalsIgnoreCase(stg);
12.全部字符轉化爲小寫:str.toLowerCase()
13.全部字符轉化爲大寫:str.toUpperCase();


字符串比較:

首先,我們要知道字符串和普通對象的不同,字符串都存放在一個字符串池中,

當我們新建一個字符串時,不是直接就開闢一個內存空間;而是先比較下字符串池中

是否有相同的字符串內容,如果有相同的內容的話,直接將該引用指向此處字符串內容

所以爲什麼相同內容字符串用"=="比較結果是true,"=="比較的是兩對象是否爲同一類實例的引用(地址)

但是要注意:如果是new String的話,那麼是不等的!!!!

當然也可以直接用equals(),String類已重寫該方法,比較的是內容是否相同

還有一個compareTo(str)方法,如果當前對象大於參數串,返回大於0的數,返回小於0的數.相等,返回0



StringBuffer類


問題引入:


先說下這貨是幹嘛的:因爲String對象內容不可更改,使用該類實現串內容的添加,修改,刪除!

什麼?你沒聽錯吧,String對象不可修?那String s = "123",s += 321";不見得運行出錯或者異常啊?

輸出123321,正常啊,那麼爲什麼說String不能夠修改?


問題解答:


其實原因是這樣的:我們都知道生成的string對象都存放在一個字符串池中;我們上面用到的字符串的拼接;

其實涉及到的是三個字符串對象了: "123","321","123321",而123和321明顯都不是我們想要的,我們只要的是123321

這樣就有點浪費內存了,Java給我們提供了StringBuffer對象,實現字符串內容的改變,一定程度上減少了內存的消耗


相關方法:


①將某個對象添加到StringBuffer的尾部,每個對象都有toString()方法,所以可以直接添加  :append(對象)

②將某個對象的字符串描述插入到某個位置:  insert(下標,對象)

③替換指定位置的字符:  setCharAt(下標,字符)

④替換指定範圍的字符串:  replace(起始下標,結束座標,替換字符串);

⑤刪除指定位置的字符:  deleteCharAt(下標)

⑥刪除指定位置的字符串:   delete(起始座標,結束座標)

⑦獲取子串:   substring(起始座標,結束座標)

⑧獲取StingBuffer的長度 : length()

⑨反轉字符串:   reverse()



相關方法演示代碼實例:


  1. package com.jay.example;  
  2.   
  3. /* 
  4.  * 該代碼演示的是StringBuffer的用法 
  5.  * */  
  6.   
  7. public class StringBufferTest {  
  8.       
  9.     public static void main(String[] args) {  
  10.         //創建StringBuffer對象的方法  
  11.         //記住:不能直接賦值,strbuf1 = "123"這樣!!  
  12.         StringBuffer strbuf1 = new StringBuffer("123");  
  13.         StringBuffer strbuf2 = new StringBuffer("123");  
  14.         StringBuffer strbuf3 = new StringBuffer("123");  
  15.         StringBuffer strbuf4 = new StringBuffer("123");  
  16.         StringBuffer strbuf5 = new StringBuffer("123");  
  17.         StringBuffer strbuf6 = new StringBuffer("123");  
  18.         StringBuffer strbuf7 = new StringBuffer("123");  
  19.         StringBuffer strbuf8 = new StringBuffer("123");  
  20.         StringBuffer strbuf9 = new StringBuffer("123");  
  21.           
  22.         //調用比較方法,都是false,說明和String是有區別的  
  23.         System.out.println(strbuf1 == strbuf2);  
  24.         System.out.println(strbuf1.equals(strbuf2));        //輸出false,false  
  25.           
  26.         //將某個對象添加到StringBuffer的尾部  
  27.         strbuf1.append("321");  
  28.         System.out.println(strbuf1);                //輸出123321  
  29.           
  30.         //插入某個對象到某個位置  
  31.         strbuf2.insert(2"呵呵");       
  32.         System.out.println(strbuf2);     //輸出結果:12呵呵3  
  33.           
  34.         //替換指定位置的字符,是字符哦!!!  
  35.         strbuf3.setCharAt(2'a');  
  36.         System.out.println(strbuf3);      //輸出12a  
  37.           
  38.         //刪除指定位置的字符  
  39.         strbuf4.deleteCharAt(1);  
  40.         System.out.println(strbuf4);      //輸出13  
  41.           
  42.         //刪除指定位置的字符串  
  43.         strbuf5.delete(02);  
  44.         System.out.println(strbuf5);      //輸出:3  
  45.           
  46.         //獲取子串  
  47.         System.out.println(strbuf6.substring(02));      //輸出12  
  48.           
  49.         //獲得字符串的長度  
  50.         System.out.println(strbuf7.length());           //輸出3  
  51.           
  52.         //將字符串反轉:  
  53.         strbuf8.reverse();  
  54.         System.out.println(strbuf8);                    //輸出321  
  55.     }  
  56. }  




java.util包中的幾個常用類:


Date類(日期)

Date類是用於封裝日期和時間的,通過Date可以指定特定的一個時間.

可以通過我們前面提供的System.currentTimeMillis();方法獲得從1970到現在時間的毫秒數!

用法實例:

  1. package com.jay.example;  
  2.   
  3. import java.util.Date;  
  4.   
  5. public class DateTest {  
  6.     public static void main(String[] args) {  
  7.         //獲得創建Date對象的當前日期,CST代表世界統一時間  
  8.         Date d1 = new Date();  
  9.         System.out.println(d1);    //輸出:Mon Apr 14 12:51:46 CST 2014  
  10.           
  11.         //也可以設置成離1970.1.1開始經過多少毫秒後的時刻  
  12.         Date d2 = new Date(7200000);      
  13.         System.out.println(d2);  
  14.           
  15.         //判斷d1是否在d2日期後  
  16.         System.out.println(d1.after(d2));  
  17.           
  18.         //判斷d2是否在d1日期前:  
  19.         System.out.println(d2.before(d1));  
  20.     }  
  21.       
  22.       
  23. }  




Calendar類(日曆類)

用於設置或獲取日曆字段值,年月日時分秒,該類時抽象類!


使用流程:

通過getInstance():獲得當前的系統時間;

通過get()和set()方法獲取或者設置時間分量

使用getTime()和setTime()通過Date類對象獲取和設置時間值


時間分量:

YEAR(年),MONTH(月),DATE(日),HOUR(時),MINUTE(分),SECOND(秒)


代碼示例:

日曆類的普通使用:


  1. package com.jay.example;  
  2.   
  3. import java.util.Calendar;  
  4.   
  5. public class CalendarTest {  
  6.     public static void main(String[] args) {  
  7.           
  8.         //①獲得系統的當前日期,並且輸出:  
  9.         Calendar cd = Calendar.getInstance();  
  10.         System.out.print("系統的當前時間爲:"+ cd.get(Calendar.YEAR) + "年");  
  11.         System.out.print( cd.get(Calendar.MONTH) + "月");  
  12.         System.out.print( cd.get(Calendar.MONTH) + "月");  
  13.         System.out.print( cd.get(Calendar.DATE) + "日        ");  
  14.         System.out.print( cd.get(Calendar.HOUR) + "時");  
  15.         System.out.print( cd.get(Calendar.MINUTE) + "分");  
  16.         System.out.print( cd.get(Calendar.SECOND) + "秒");  
  17.           
  18.           
  19.         //②通過set可以設置Calendar的某個分量的值;有不同的方式,可查api  
  20.         cd.set(Calendar.MONTH, 5);  
  21.         cd.set(2012106);  
  22.           
  23.         //③可以把Date對象作爲參數傳入setTime(new Date())方法,也能獲得系統時間  
  24.     }  
  25. }  




Random類(隨機數類)


這個什麼好講的= =,知道lang.Math()也有生成隨機數的方法和Util中有Random類用於生產隨機數;

會自己生成隨機數即可:


示例:生成 1~10 隨機數的兩個方法:

Random方法:(int)(Math.random()*10)

Random類:int num = new Random().nextInt() + 1


ps:如果是想是其他數據類型的隨機數只需要把nextInt改爲其他類型即可eg:nextFloat();



總結:

在這一節中我們對於Java的常用類進行了解析:

我們認識了所有類的父類Object類,學習了toString(),equals(),clone(),getClass()方法的使用

又學習了封裝類,普通數據類型,字符串的相互轉換

還學習了Math類的兩個常量PI和E,以及相關的常用方法

也學習了System類的exit(),arraycopy(),currentTimeMilis()方法

接着也學習了String和StringBuffer的相關屬性,比較了他們的區別

最後學習了util包中的Date,Calendar的用法

當然還有隨機生成隨機數的兩個方法

不要刻意地去死記屬性和方法,用到的時候再來查,死記過兩天就忘了....



ps:本節就到這裏,如果有什麼紕漏,錯誤,好的建議,望讀者支出,

萬分感激,O(∩_∩)O謝謝!



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章