object
Java中的Object是所有類的父類,是“萬類之源”
Class Object
java.lang.Object
public class Object
Class Object is the root of the class hierarchy. Every class has Object as a superclass. All objects, including arrays, implement the methods of this class.
我們把jdk安裝路徑目錄下的src.rar檔案解壓,可以看到Object.java:
(為了頁面大小,刪除了大量的註釋,讀者自行檢視)
仔細觀察上面的各方法,很快就知道哪些方法可以被子類所繼承,被finally,private修飾的方法已經被"寫死"在父類中,子類不能繼承修改,而static方法不具有多型特性。(java中除了被private,static,private修飾的方法是前期繫結,其他的方法都是後期繫結,這是題外話,這屬於多型方面的知識)
查閱API文件,Object類中定義的方法:
其中可以被子類繼承的方法是:, , , , , , , , , ,
具體的各個方法可以查閱API文件去了解。
執行結果:
指出該方法可能丟擲異常,則對這種異常,一定要進行捕獲處理(對於把異常拋給呼叫者,但是最終還是被處理),上面重寫了clone方法,並用public修飾,為了在Test類中可以呼叫。然後在Test類中捕獲可能發生的異常,引用m是從n clone而來,所以equals為true,而且hashCode也相等,接著在棧裡建立了Name引用p,n賦值給p,也就是兩者指向同一堆記憶體,比較p,n的hashCode,是相同的!p,m的hashCode也是相同的!腦海裡應該自然的浮現四塊記憶體區域:棧中:m,n,p 堆中:new出的Name物件 m,p,n指標指向Name物件
這裡說明的是,hashCode並不是實際的實體地址!
getClass()返回的是當前執行的類物件
關於toString()方法,這裡不再贅述,學習java的朋友,這個方法都應該很熟悉。
上面簡單的介紹,也是自己一個小小的總結,關於深入的瞭解Object類,可以參考其他書籍,如果錯誤之處,請讀者指正!
Class Object
java.lang.Object
public class Object
Class Object is the root of the class hierarchy. Every class has Object as a superclass. All objects, including arrays, implement the methods of this class.
我們把jdk安裝路徑目錄下的src.rar檔案解壓,可以看到Object.java:
(為了頁面大小,刪除了大量的註釋,讀者自行檢視)
點選(此處)摺疊或開啟
-
public class Object {
-
-
private static native void registerNatives();
-
static {
-
registerNatives();
-
}
-
-
public boolean equals(Object obj) {
-
return (this == obj);
-
}
-
-
protected native Object clone() throws CloneNotSupportedException;
-
-
public String toString() {
-
return getClass().getName() + "@" + Integer.toHexString(hashCode());
-
}
-
-
public final native void notify();
-
-
public final native void notifyAll();
-
-
public final native void wait(long timeout) throws InterruptedException;
-
-
public final void wait(long timeout, int nanos) throws InterruptedException {
-
if (timeout < 0) {
-
throw new IllegalArgumentException("timeout value is negative");
-
}
-
-
if (nanos < 0 || nanos > 999999) {
-
throw new IllegalArgumentException(
-
"nanosecond timeout value out of range");
-
}
-
-
if (nanos >= 500000 || (nanos != 0 && timeout == 0)) {
-
timeout++;
-
}
-
-
wait(timeout);
-
}
-
-
public final void wait() throws InterruptedException {
-
wait(0);
-
}
-
-
protected void finalize() throws Throwable { }
- }
仔細觀察上面的各方法,很快就知道哪些方法可以被子類所繼承,被finally,private修飾的方法已經被"寫死"在父類中,子類不能繼承修改,而static方法不具有多型特性。(java中除了被private,static,private修飾的方法是前期繫結,其他的方法都是後期繫結,這是題外話,這屬於多型方面的知識)
查閱API文件,Object類中定義的方法:
其中可以被子類繼承的方法是:, , , , , , , , , ,
具體的各個方法可以查閱API文件去了解。
點選(此處)摺疊或開啟
-
public class Name implements Cloneable {
-
-
private String firstName,lastName;
-
public Name(String firstName,String lastName){
-
-
this.firstName = firstName;
-
this.lastName = lastName;
-
}
-
public String getFirstName(){
-
return firstName;
-
}
-
public String getLastName(){
-
return lastName;
-
}
-
public String toString(){
-
-
return firstName + " " + lastName;
-
}
-
-
public Object clone() throws CloneNotSupportedException {
-
return (Name)super.clone();
-
}
-
-
public boolean equals(Object obj){
-
-
if(obj instanceof Name){
-
-
Name name = (Name)obj;
-
return (firstName.equals(firstName))&&(lastName.equals(lastName));
-
}
-
return super.equals(obj);
-
}
-
public int hashCode(){
-
-
return firstName.hashCode();
-
}
-
}
-
-
public class Test{
-
-
public static void main(String[] args){
-
Name n = new Name("diy","os");
-
try{
-
Name m =(Name)n.clone();
-
String ss = m.getFirstName() + m.getLastName();
-
System.out.println(ss);
-
System.out.println(m.equals(n));
-
System.out.println(n.equals(m));
-
System.out.println("m.hashCode:" + m.hashCode() + " " + "n.hashCode:" + n.hashCode());
-
-
Name p = n;
-
System.out.println("n.hashCode:" + n.hashCode() + " " + "p.hashCode:" + p.hashCode());
-
System.out.println("p.hashCode" + p.hashCode() + " " + "m.hashCode" + m.hashCode());
- System.out.println(n.getClass());
-
}catch(CloneNotSupportedException e){
-
-
e.printStackTrace();
-
}
-
-
}
- }
指出該方法可能丟擲異常,則對這種異常,一定要進行捕獲處理(對於把異常拋給呼叫者,但是最終還是被處理),上面重寫了clone方法,並用public修飾,為了在Test類中可以呼叫。然後在Test類中捕獲可能發生的異常,引用m是從n clone而來,所以equals為true,而且hashCode也相等,接著在棧裡建立了Name引用p,n賦值給p,也就是兩者指向同一堆記憶體,比較p,n的hashCode,是相同的!p,m的hashCode也是相同的!腦海裡應該自然的浮現四塊記憶體區域:棧中:m,n,p 堆中:new出的Name物件 m,p,n指標指向Name物件
這裡說明的是,hashCode並不是實際的實體地址!
getClass()返回的是當前執行的類物件
關於toString()方法,這裡不再贅述,學習java的朋友,這個方法都應該很熟悉。
上面簡單的介紹,也是自己一個小小的總結,關於深入的瞭解Object類,可以參考其他書籍,如果錯誤之處,請讀者指正!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29876893/viewspace-1819489/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Uncaught TypeError: Object [object Object] has no method 'xxx'ErrorObject
- 介面返回[object,Object]解決方法Object
- Effective Object C 2.0 『熟悉Object C』Object
- ES7 Object.keys,Object.values,Object.entriesObject
- Object被其他的Object引用的SQLObjectSQL
- OBJECT_ID和DATA_OBJECT_IDObject
- Object流Object
- Object類Object
- 其它 ObjectObject
- object in javascriptObjectJavaScript
- Authorization ObjectObject
- Differences between DATA_OBJECT_ID and OBJECT_IDObject
- object_id 及 data_object_id (oracle)ObjectOracle
- Object.seal()與Object.freeze()區別Object
- CSS3 object-fit 和 object-positionCSSS3Object
- object_id and data_object_id in dba_objectsObject
- Iterable object of JavaScriptObjectJavaScript
- JavaScript Object 物件JavaScriptObject物件
- Object.defineProperty()Object
- Object.isSealed()Object
- Object.isFrozen()Object
- Object.defineProperties()Object
- Object.is()方法Object
- Object.seal()Object
- Object.preventExtensions()Object
- Object.create()Object
- Object.setPrototypeOf()Object
- Object.getOwnPropertyNames()Object
- Object.getPrototypeOf()Object
- Object.getOwnPropertyDescriptor()Object
- Object.is()與'==='Object
- object-detectionObject
- JAVA Object類JavaObject
- Object assign()Object
- LOB(large object)Object
- javascript Object分析JavaScriptObject
- MXRuntimeUtils,替代 [NSObject performSelector object object ]的工具ObjectperformSelector
- TypeScript 中令人迷惑的物件型別:Object、{} 和 objectTypeScript物件型別Object