注:本文轉載自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 |
代碼實例:
- package com.jay.example;
- public class ObjectTest {
- public static void main(String[] args) throws Exception {
- Person p1 = new Person("老王", 48);
- Person p2 = new Person("老張", 47);
- Person p3 = new Person("老王", 48);
- String s1 = new String("呵呵");
- String s2 = new String("呵呵");
- //這裏直接調用print對象名的話,自動調用對象的toString()方法
- //如果不重寫的話,返回的字符串:
- //getClass().getName() + '@' + Interger.toHexString(hashcode())
- //就是類名@哈希碼
- System.out.println(p1);
- //這裏要注意==賦值和equals的區別
- //==比較的是地址;equals比較的是兩對象是否指向同一實例
- //而這裏要注意字符串,字符串變量是有一個常量池的,當我們創建一個新的字符串
- //如果字符串中已經存在了,那麼將該對象指向該內存空間,即指向同一引用對象
- //如果不是String對象而是普通的對象的話,直接調用equals是不相等的
- //所以需要對equals方法進行重寫,不然就不能判斷對象是否相等了
- System.out.println(p1 == p3);
- System.out.println(p1.equals(p3));
- //字符串常量池,使得兩對象equals返回ture
- System.out.println(s1 == s2);
- System.out.println(s1.equals(s2));
- //調用clone()方法進行對象的複製,需要實現Cloneable接口,
- //要覆蓋Clone()方法,至少寫個return super().clone();還要注意使用try-catch對
- //CloneNotsupportedException進行捕獲;
- //克隆與==賦值不一樣,指向的不是同一實例對象哦!
- try {
- Person p4 = (Person) p2.clone();
- System.out.println(p4);
- System.out.println("p4和p2是否爲同一對象:" + (p4 == p2));
- } catch (CloneNotSupportedException e) {
- e.printStackTrace();
- }
- /*Class類的使用:
- * ①獲得指向某個類的class對象的引用: Class c1 = p1.getClass();
- * ②獲得接口或者類的全名: c1.getName()
- * ③當然也可以通過Class的靜態方法forName()獲得class對象引用:Class.forName("類的全名");
- * ④getSuperclass():獲得父類的class對象
- * ⑤newInstance();創建一個與調用對象對應類的實例,是新的哦!
- *
- * */
- System.out.println(p1.getClass());
- System.out.println(p1.getClass().getName());
- Class c1 = Class.forName("com.jay.example.Person");
- System.out.println(c1);
- System.out.println(c1.getSuperclass());
- Person p5 = p1.getClass().newInstance();
- p5.name = "老黃";
- p5.age = 25;
- System.out.println(p5);
- }
- }
運行截圖:
封裝類
在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")
使用示例代碼:
- package com.jay.example;
- public class PottingTest {
- public static void main(String[] args) {
- //①包裝類與基本數據類型的相互轉換
- //除了這種構造方法外:還可以寫成,Integer(123),但使用字符串的話一定要
- //是符合對應數字格式的字符串,否則印發NumberFormatException(數字轉換異常)
- //因爲封箱與拆箱都是自動進行的,所以如果我們輸入兩個數相加的結果是:246
- //其他格式的都是這種轉換格式,把int替換成其他數據類型即可
- Integer i = new Integer("123");
- int j = i.intValue();
- System.out.println(i + j);
- /*
- * ②字符串轉換爲基本數據類型
- * 同樣要是符合數字類型的字符串,不然也會報異常
- * 同理,只需要把int替換成其他數據類型即可:eg: Double.parseDouble("1.23");
- * 別忘了Java小數默認是Double類型的哦!
- * */
- int i2 = Integer.parseInt("321");
- /*
- * ③包裝類與字符串的相互轉換:
- * */
- //包裝類轉換成字符串,直接調用toString()即可
- Integer a = new Integer(11);
- i.toString();
- //字符串轉換爲包裝類:
- Integer ig = Integer.valueOf("987");
- }
- }
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開始算的哦!
使用實例:
- package com.jay.example;
- public class ArrayCopyTest {
- public static void main(String[] args) {
- int[] a = {1,2,3,4,5,6,7,8};
- int[] b = {0,0,0,0,0,0,0,0};
- int[] c = {0,0,0,0,0};
- //這裏要注意下標不能越界,否則會引發ArrayIndexOutOfBoundsException異常
- //輸出結果是:3,4,5,6,7
- System.arraycopy(a, 2, c, 0, 5);
- for(int i = 0; i < c.length;i++)
- System.out.print(c[i]);
- }
- }
③currentTimeMillis()
返回從1970.1.1 零點到現在的時間,單位是毫秒,通常用來計算程序運行耗費的時間
使用實例:
- package com.jay.example;
- public class CurrentTimeMillisTest {
- public static void main(String[] args) {
- long start,end;
- int j = 0,k=0;
- //記錄起始時間
- start = System.currentTimeMillis();
- for(int i = 0;i < 1000;i++)
- for(j = 0;j < 1000;j++)
- {
- k++;
- }
- //記錄結束時間
- end = System.currentTimeMillis();
- //結束時間-起始時間,即可算出兩層for循環的運行時間
- //這個是電腦配置是有一定關係的!不同電腦的結果可能不同!我的電腦是1毫秒
- System.out.println("循環1000次消耗了" + (end - start) + "毫秒");
- }
- }
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()
相關方法演示代碼實例:
- package com.jay.example;
- /*
- * 該代碼演示的是StringBuffer的用法
- * */
- public class StringBufferTest {
- public static void main(String[] args) {
- //創建StringBuffer對象的方法
- //記住:不能直接賦值,strbuf1 = "123"這樣!!
- StringBuffer strbuf1 = new StringBuffer("123");
- StringBuffer strbuf2 = new StringBuffer("123");
- StringBuffer strbuf3 = new StringBuffer("123");
- StringBuffer strbuf4 = new StringBuffer("123");
- StringBuffer strbuf5 = new StringBuffer("123");
- StringBuffer strbuf6 = new StringBuffer("123");
- StringBuffer strbuf7 = new StringBuffer("123");
- StringBuffer strbuf8 = new StringBuffer("123");
- StringBuffer strbuf9 = new StringBuffer("123");
- //調用比較方法,都是false,說明和String是有區別的
- System.out.println(strbuf1 == strbuf2);
- System.out.println(strbuf1.equals(strbuf2)); //輸出false,false
- //將某個對象添加到StringBuffer的尾部
- strbuf1.append("321");
- System.out.println(strbuf1); //輸出123321
- //插入某個對象到某個位置
- strbuf2.insert(2, "呵呵");
- System.out.println(strbuf2); //輸出結果:12呵呵3
- //替換指定位置的字符,是字符哦!!!
- strbuf3.setCharAt(2, 'a');
- System.out.println(strbuf3); //輸出12a
- //刪除指定位置的字符
- strbuf4.deleteCharAt(1);
- System.out.println(strbuf4); //輸出13
- //刪除指定位置的字符串
- strbuf5.delete(0, 2);
- System.out.println(strbuf5); //輸出:3
- //獲取子串
- System.out.println(strbuf6.substring(0, 2)); //輸出12
- //獲得字符串的長度
- System.out.println(strbuf7.length()); //輸出3
- //將字符串反轉:
- strbuf8.reverse();
- System.out.println(strbuf8); //輸出321
- }
- }
java.util包中的幾個常用類:
Date類(日期)
Date類是用於封裝日期和時間的,通過Date可以指定特定的一個時間.
可以通過我們前面提供的System.currentTimeMillis();方法獲得從1970到現在時間的毫秒數!
用法實例:
- package com.jay.example;
- import java.util.Date;
- public class DateTest {
- public static void main(String[] args) {
- //獲得創建Date對象的當前日期,CST代表世界統一時間
- Date d1 = new Date();
- System.out.println(d1); //輸出:Mon Apr 14 12:51:46 CST 2014
- //也可以設置成離1970.1.1開始經過多少毫秒後的時刻
- Date d2 = new Date(7200000);
- System.out.println(d2);
- //判斷d1是否在d2日期後
- System.out.println(d1.after(d2));
- //判斷d2是否在d1日期前:
- System.out.println(d2.before(d1));
- }
- }
Calendar類(日曆類)
用於設置或獲取日曆字段值,年月日時分秒,該類時抽象類!
使用流程:
通過getInstance():獲得當前的系統時間;
通過get()和set()方法獲取或者設置時間分量
使用getTime()和setTime()通過Date類對象獲取和設置時間值
時間分量:
YEAR(年),MONTH(月),DATE(日),HOUR(時),MINUTE(分),SECOND(秒)
代碼示例:
日曆類的普通使用:
- package com.jay.example;
- import java.util.Calendar;
- public class CalendarTest {
- public static void main(String[] args) {
- //①獲得系統的當前日期,並且輸出:
- Calendar cd = Calendar.getInstance();
- System.out.print("系統的當前時間爲:"+ cd.get(Calendar.YEAR) + "年");
- System.out.print( cd.get(Calendar.MONTH) + "月");
- System.out.print( cd.get(Calendar.MONTH) + "月");
- System.out.print( cd.get(Calendar.DATE) + "日 ");
- System.out.print( cd.get(Calendar.HOUR) + "時");
- System.out.print( cd.get(Calendar.MINUTE) + "分");
- System.out.print( cd.get(Calendar.SECOND) + "秒");
- //②通過set可以設置Calendar的某個分量的值;有不同的方式,可查api
- cd.set(Calendar.MONTH, 5);
- cd.set(2012, 10, 6);
- //③可以把Date對象作爲參數傳入setTime(new Date())方法,也能獲得系統時間
- }
- }
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謝謝!