⑴ 2020-09-10:java里Object類有哪些方法
Java Object類是所有類的父類,主要方法有:
getClass():獲取運行時類型,返回值為Class對象
2.hashCode():返回該對象的哈希碼值,是為了提高哈希表的性能(HashTable)
3.equals():判斷兩個對象是否相等,在Object源碼中equals就是使用==去判斷,所以在Object中equals是等價於==的,但是在String及某些類對equals進行了重寫,實現不同的比較。
4.clone():JAVA里除了8種基本類型傳參數是值傳遞,其他的類對象傳參數都是引用傳遞,我們有時候不希望在方法里講參數改變,這是就需要在類中復寫clone方法。此方法只實現了一個淺層拷貝,對於基本類型欄位成功拷貝,對嵌套對象,只把地址拷貝了,需要自己重寫clone方法進行深度拷貝。
5.toString():返回一個String字元串,用於描述當前對象的信息,可以重寫返回對自己有用的信息,默認返回的是當前對象的類名+hashCode的16進制數字。
6.wait():多線程時用到的方法,作用是讓當前線程進入等待狀態,同時也會讓當前線程釋放它所持有的鎖。直到其他線程調用此對象的 notify() 方法或 notifyAll() 方法,當前線程被喚醒
7.notify():多線程時用到的方法,喚醒該對象等待的某個線程
8.notifyAll():多線程時用到的方法,喚醒該對象等待的所有線程
9.finalize():對象在被GC釋放之前調用finalize方法。
你明白了嗎?
⑵ java里的object類裡面有什麼方法
查看一下API講解object的部分吧,這是一個超類,所有的類都是該類的子類。
超類,意思就是所有類的父類,有equals()、hashCode()、wait()、toString()等方法
⑶ Java語言中Object類定義了哪11種方法
Java中所有類(包括用戶自己定義的類)都自動繼承Object類,即Object類是所有類的父類。
Object中常用方法:
public boolean equals(Object obj)
比較當前對象與obj是否為同一對象,返回值:ture/false
public String toString()
返回當前對象的字元串表達形式
public native int hashCode();
返回對象的Hash碼。Hash碼是標志對象的唯一值,Hash碼相同的對象是同一對象
protected void finalize()throws Throwable
對象銷毀時被調用
以下三個函數用於控制線程
public final native void notify();public final native void notifyAll();public final native void wait();
native型方法指由C++語言編寫的方法,Java解釋器對其進行轉義後才執行。
「==」與equals()
"==" 一般用於基本數據類型比較。若用作兩個引用對象比較,僅當引用變數引用同一個對象時,才返回true,否則false。
void EqualCompare()
{
String s1 = new String("Hello");
String s2 = new String("Hello");
String s3 = "Hello";
String s4 = "Hello";
//未使用new,s4引用既存的對象(編譯器創建對象之前先進行檢測"Hello"是否已經存在,若存在,則返回原對象的引用)
System.out.println(s1.equals(s2)); //truex1行
System.out.println(s1 ==s2); // false 兩變數引用不同對象
System.out.println(s3.equals(s4)); //true 兩變數引用相同對象
System.out.println(s3 ==s4); // true 兩變數引用相同對象
}
比較對象時,一般用equal()方法。
Object類方法定義:public boolean equals(Object obj){ return (this == obj);}
不同的類可方便的對該對象進行覆蓋。String類就覆蓋了Object類的equals()方法,所以x1行輸出true.
a==b 如果a,b引用同一對象,則返回true;
a.equals(b) 如果a對象內容和b對象內容相同,則返回true
如果未重載equals()方法的類對象使用該方法與另一個對象進行比較,則調用Object的equals()方法,仍然是對象的比較,返回值為false。
⑷ Java中的Object是什麼
Object是所有類的基類,這個你可以查詢jdk文檔了解,所有類都繼承自Object。
1.Object類是所有類的父類,位於java.lang包中。
2.數組也是Object類的子類。
3.Object類的常用方法有:
toString();
equals();
hashCode();
objects這種參數定義是在不確定方法參數的情況下的一種多態表現形式。即這個方法可以傳遞多個參數,這個參數的個數是不確定的。這樣你在方法體中需要相應的做些處理。因為Object是基類,所以使用objects這樣的參數形式,允許一切繼承自Object的對象作為參數。這種方法在實際中應該還是比較少用的。
obj這樣的形式,就是一個Object數組構成的參數形式。說明這個方法的參數是固定的,是一個Object數組,至於這個數組中存儲的元素,可以是繼承自Object的所有類的對象。
這些基礎東西應該多看幾遍"Think in java"。
⑸ java object 有哪些方法
Java.lang.object類中有幾個方法不是final的,我們會經常用重寫它們,
protected Object clone() 創建並返回此對象的一個副本。
boolean equals(Object obj) 指示某個其他對象是否與此對象「相等」。
protected void finalize() 當垃圾回收器確定不存在對該對象的更多引用時,由對象的垃圾回收器調用此方法。
int hashCode() 返回該對象的哈希碼值。
String toString() 返回該對象的字元串表示。
1、clone()
我們為什麼要用clone()?
當我們需要一個與某個對像時一模一樣的對像時,但它們又是相互獨立的,對它們各自的操作不會影響到另外的一個,這時候用clone()就可以
實現,當然,其他的方法也可以實現,但是重寫clone()簡單,高效
有一個不沒重寫clone()的例子,能幫助我們更好的去理解clone(),如下:
public class Test
{
public static void main(String[] args){
A a1=new A();
A a2=new A();
a1.name="a1";
a2=a1;
a2.name="a2";
System.out.println("a1.name="+a1.name);
System.out.println("a2.name="+a2.name);
}
}
class A
{
public String name;
}
輸出結果為:a1.name=a2;
a2.name=a2;
下面這個是重寫了clone()的例子
public class Test
{
public static void main(String[] args) throws CloneNotSupportedException {
A a1=new A();
A a2=new A();
a1.name="a1";
a2=(A) a1.clone();
a2.name="a2";
System.out.println("a1.name="+a1.name);
System.out.println("a2.name="+a2.name);
}
⑹ 在java中創建對象到底有多少種方法
Java中創建對象的四種方式
1.用new語句創建對象,這是最常見的創建對象的方法。
2.運用反射手段,調用java.lang.Class或者java.lang.reflect.Constructor類的newInstance()實例方法。
3.調用對象的clone()方法。
4.運用反序列化手段,調用java.io.ObjectInputStream對象的 readObject()方法。
下面演示了用前面3種方式創建對象的過程:
public class Customer implements Cloneable{
private String name;
private int age;
public Customer(){
this("unknown",0);
System.out.println("call default constructor");
}
public Customer(String name,int age){
this.name=name;
this.age=age;
System.out.println("call second constructor");
}
public Object clone()throws CloneNotSupportedException{
return super.clone();
}
public boolean equals(Object o){
if(this==o)return true;
if(! (o instanceof Customer)) return false;
final Customer other=(Customer)o;
if(this.name.equals(other.name) && this.age==other.age)
return true;
else
return false;
}
public String toString(){
return "name="+name+",age="+age;
}
public static void main(String args[])throws Exception{
//運用反射手段創建Customer對象
Class objClass=Class.forName("Customer");
Customer c1=(Customer)objClass.newInstance(); //會調用Customer類的默認構造方法
System.out.println("c1: "+c1); //列印name=unknown,age=0
//用new語句創建Customer對象
Customer c2=new Customer("Tom",20);
System.out.println("c2: "+c2); //列印name=tom,age=20
//運用克隆手段創建Customer對象
Customer c3=(Customer)c2.clone(); //不會調用Customer類的構造方法
System.out.println("c2==c3 : "+(c2==c3)); //列印false
System.out.println("c2.equals(c3) : "+c2.equals(c3)); //列印true
System.out.println("c3: "+c3); //列印name=tom,age=20
}
}
除了以上4種顯式地創建對象的方式以外,在程序中還可以隱含地創建對象,包括以下幾種情況:
1.對於java命令中的每個命令行參數,Java虛擬機都會創建相應的String對象,並把它們組織到一個String數組中,再把該數組作為參數傳給程序入口main(String args[])方法。
2.程序代碼中的String類型的直接數對應一個String對象。
3.字元串操作符「+」的運算結果為一個新的String對象。
4.當Java虛擬機載入一個類時,會隱含地創建描述這個類的Class實例.