## Java編程那些事兒74——java.lang包介紹1
陳躍峰
出自:[http://blog.csdn.net/mailbomb](http://blog.csdn.net/mailbomb)
### 9.4 JDK API包名綜述
在整個JDK API中,大約包含1、200個包,總體來看,包名第一個名稱主要有三種:java、javax和org。其中以java開頭的包名是JDK的基礎語言包,以javax開頭的屬于JDK擴展包(其中x是extend的簡寫),而以org開頭的則是第三方組織提供的功能包(org是organization的簡寫)。而在JDK API中還包含了一些以com.sun開頭的包名,這些是SUN公司提供的一些功能包,由于這些包中的類隨著JDK版本的更改變化很大,不具備兼容性,所以未在標準的JDK API文檔中進行公開。
在本章接下來的內容中,首先介紹常用的類的功能以及基本使用,這些介紹主要涵蓋java.lang包和java.util包中的內容。
### 9.5 java.lang包
java.lang包是Java基礎語言包(其中lang是language(語言)的簡寫),該包中包含Java語言所需要的基本的功能類、接口等信息,是進行Java語言編程的基礎。
由于在進行Java語言編程時,該包的使用特別頻繁,所以在Java語言中,該包是被默認引入的。
下面就介紹一下該包中常見類的功能以及相關使用。
### 9.5.1 Object
Object類Java語言的靈魂,因為所有的類(除了Object類),都是該類的子類,即使不書寫繼承,系統也會自動繼承該類,所以Object是整個Java語言繼承樹的唯一一個根,這就是Java語言特色的單根繼承體系。包括數組也實現了該類中的方法。
由于Java語言的這種單根繼承體系,所以整個Java語言的結構中很方便的實現了很多復雜的特性,例如多線程等控制,也可以很方便的對于整個Java語言體系進行更新。
由于Object類是Java語言中所有類的父類,所以Object類中的方法將出現在每個類的內部,熟悉該類中的常見方法中的使用,是每個程序員學習的基礎。
1、equals方法
equals方法實現的功能是判斷兩個對象的內容是否相同。Object類中該方法的實現很簡單,Object類中equals方法實現的代碼如下(說明:該代碼可以從JDK安裝目錄下的src.zip中找到):
~~~
?????????????????? ???????? public boolean equals(Object obj) {
???????? ??????????????????????????? return (this ==obj);
??? ?????????????????? }
~~~
在Object類中方法的實現比較簡單,如果真正需要在項目中進行比較時,這個equals方法的作用是無法達到實際的要求的。所以如果在項目中涉及的類需要比較該類型的對象時,則必須覆蓋equals方法。
下面以一個簡單的類為示例,編寫一個簡單的equals方法,源代碼如下:
~~~
??????????????????????????? /**
?* equals方法編寫示例
?*/
public class MyEquals {
??????????????????????????? ???????? /**對象成員變量*/
??????????????????????????? ???????? String name;
??????????????????????????? ???????? /**基本數據類型成員變量*/
??????????????????????????? ???????? int n;
????????
??????????????????????????? ???????? /**
??????????????????????????? ???????? ?* 判斷對象內容是否相同
??????????????????????????? ???????? ?* @param obj 需要比較的對象
??????????????????????????? ???????? ?*/
??????????????????????????? ???????? public boolean equals(Object obj){
??????????????????????????? ?????????????????? //如果比較的內容是自身
??????????????????????????? ?????????????????? if(obj == this){
??????????????????????????? ??????????????????????????? return true;
??????????????????????????? ?????????????????? }
??????????????????
??????????????????????????? ?????????????????? //對象類型不同
??????????????????????????? ?????????????????? if(!(obj instanceofMyEquals)){
??????????????????????????? ??????????????????????????? return false;
??????????????????????????? ?????????????????? }
??????????????????????????? ?????????????????? //轉換成當前類類型
??????????????????????????? ?????????????????? MyEquals m = (MyEquals)obj;
???????? ??????????????????
??????????????????????????? ?????????????????? /*依次比較對象中每個變量*/
??????????????????????????? ?????????????????? //name屬性不同
??????????????????????????? ?????????????????? if(!name.equals(m.name)){
??????????????????????????? ??????????????????????????? return false;
??????????????????????????? ?????????????????? }
??????????????????????????? ?????????????????? //n屬性不同
??????????????????????????? ?????????????????? if(!(n == m.n)){
??????????????????????????? ??????????????????????????? return false;
??????????????????????????? ?????????????????? }
??????????????????
??????????????????????????? ?????????????????? //如果都相同,則返回true
??????????????????????????? ?????????????????? return true;
??????????????????????????? ???????? }
}
~~~
?????????????????? 在實際比較時,首先判斷是否是自身,然后再判斷對象的類型是否符合要求,可以使用instanceof關鍵字進行判斷,該運算符的語法格式為:
對象名 instanceof 類名
如果對象名是后續類名類型的對象,則結果為true,否則為false。
如果類型符合要求,然后就可以依次比較對象中每個屬性的值是否相同了,如果有一個屬性的值不相同則不相等。
2、finalize方法
finalize方法的作用和前面介紹的構造方法的概念剛好相反,構造方法的作用是初始化一個對象,而finalize方法的作用是釋放一個對象占用的內存空間時,會被JVM自動調用的方法。
說明:finalize方法的作用和C++中析構函數的作用一樣。
如果在對象被釋放時,需要執行一些操作的話,則可以在該類中覆蓋finalize方法,然后在方法內部書寫需要執行的代碼即可。
3、hashcode方法
hashcode方法的作用是獲得一個數值,該數值一般被稱作散列碼,使用這個數值可以快速判斷兩個對象是否不相同,主要應用于集合框架中類的快速判斷。
兩個內容相同的對象,其hashcode方法的返回值必須相同,而兩個不相同的對象其hashcode的值可能相同。
如果自己編寫的類需要存儲到集合類中,則覆蓋該方法可以提高集合類的執行效率。
4、toString方法
toString方法是顯示對象內容時會被系統自動調用的方法,當輸出一個對象的內容時,系統會自動調用該類的toString方法,例如輸出Object類型的對象obj,則以下兩組代碼的功能是一樣的:
~~~
??????????????????????????? System.out.println(obj);
??????????????????????????? System.out.println(obj.toString());
~~~
?????????????????? 而Object類中的toString類實現比較簡單,其源代碼為:
~~~
??????????????????????????? publicString toString() {
???????? ??????????????????????????? returngetClass().getName() + "@" + Integer.toHexString(hashCode());
??? ?????????????????? }
~~~
如果需要自己的類的對象按照一定的格式進行輸出,則可以在自己設計的類內部覆蓋toString方法,然后設計需要的輸出格式即可。
至于Object類中的其它方法,下面做一個基本的介紹:
1.? clone方法:復制對象。也就是創建一個和該對象的內容完全一樣的對象,新的對象擁有獨立的內存空間。
2.? getClass方法:主要獲得對象的類型,該方法主要用于反射技術的實現。
另外的wait、notify和notifyAll等方法在是為了實現多線程的需要而實現的,將在后續的多線程技術中進行詳細的介紹。
### 9.5.2 Math
Math類是一個數學工具類,在Java語言中,常用的數學常數和數學方法都在該類內部,而且無論是常數還是方法都是static類型的,方便程序員進行實際的使用。
下面示例代碼是調用Math類中的abs方法實現求數字的絕對值的實現代碼:
~~~
?????????????????? /**
?* Math類基本使用
?*/
public class MathDemo {
?????????????????? ???????? public static void main(String[] args){
?????????????????? ?????????????????? int m = -10;
?????????????????? ?????????????????? int n = Math.abs(m);
?????????????????? ?????????????????? System.out.println("絕對值是:" + n);
?????????????????? ???????? }
}
~~~
由于Math類的方法作用比較簡單,這里就不一一舉例了,具體的方法請參閱JDK API文檔。
- 前言
- (1)序言
- (2)程序設計是什么?
- (3)你適合學習程序設計嗎?
- (4)如何學好程序設計?
- (5)程序設計介紹小結
- (6)計算機軟件基本概念
- (7)進制的概念
- (8)計算機內部的數據表達
- (9)網絡編程基礎
- (10)Java語言簡介
- (11)JDK的獲得、安裝和配置
- (12)第一個HelloWorld程序
- (13)Eclipse基本使用
- (14)Eclipse基礎使用進階
- (15)如何學好Java語法
- (16)代碼框架、關鍵字和標識符
- (17)基本數據類型
- (18)變量和常量
- (19)數據類型轉換
- (20)空白、語句結束和注釋
- (21)算術運算符
- (22)比較運算符
- (23)邏輯運算符
- (24)賦值運算符
- (25)位運算符
- (26)移位運算符
- (27)其它運算符
- (28)運算符優先級
- (29)表達式
- (30)流程控制基礎
- (31)if語句語法(1)
- (32)if語句語法(2)
- (33)if語句語法(3)
- (34)switch語句語法
- (35)while語句語法
- (36)do-while語句語法
- (37)for語句語法
- (38)break和continue語句
- (39)流程控制綜合示例1
- (40)流程控制綜合示例2
- (41)流程控制綜合示例3
- (42)流程控制綜合練習
- (43)數組概述
- (44)數組基礎語法
- (45)數組使用示例1
- (46)數組使用示例2
- (47)數組使用示例3
- (48)多維數組基礎
- (49)多維數組使用示例1
- (50)多維數組使用示例2
- (51)多維數組練習
- (52)方法聲明
- (53)方法聲明示例
- (54)方法調用
- (55)方法重載和參數傳遞
- (56)方法練習
- (57)面向對象基礎
- (58)類(一)
- (59)類(二)
- (60)對象
- (61)面向對象設計方法和面向對象特性(一)
- (62)繼承(二)
- (63)多態性
- (64)訪問控制符、修飾符和其它關鍵字
- (65)static修飾符
- (66)final修飾符
- (67)this和super
- (68)抽象類和接口(一)
- (69)抽象類和接口(二)
- (70)抽象類和接口(三)
- (71)內部類簡介
- (72)包的概念
- (73)JDK文檔使用
- (74)java.lang包介紹1
- (75)String類使用
- (76)StringBuffer類和System類
- (77)包裝類
- (78)時間和日期處理
- (79)Random隨機處理
- (80)集合框架簡述
- (81)異常處理概述
- (82)異常處理語法1
- (83)異常處理語法2
- (84)IO簡介
- (85)IO類體系
- (86)文件操作之File類使用
- (87)文件操作之讀取文件
- (88)文件操作之寫文件
- (89)讀取控制臺輸入
- (90)裝飾流使用1
- (91)裝飾流使用2
- (92)IO使用注意問題
- (93)多線程基礎
- (94)多線程實現方式1
- (95)多線程實現方式2
- (96)多線程使用示例1
- (97)多線程使用示例2
- (98)多線程問題及處理1
- (99)多線程問題及處理2
- (100)多線程問題及處理3
- (101)網絡編程概述
- (102)網絡編程技術1
- (103)網絡編程技術2
- (104)網絡編程技術3
- (105)網絡編程技術4
- (106)網絡編程技術5
- (107)網絡協議概念
- (108)網絡編程示例1
- (109)網絡編程示例2
- (110)網絡編程小結