java對象的引用
㈠ java中,類的對象,對象的實例,對象的引用,三者如何進行區分,有何區別呢
沒有「對象的實例」這種叫法,正確的叫法是「類的實例」。
沒有學過java,給你說說我的理解吧!
在java和C++這類語言中,對象(對象和實例是同義詞)實際上就是內存中的存儲數據一塊固定存儲空間,並且對象還有一系列的操作這塊存儲空間的方法。
對象的引用相當於對象的名字,名字與對象本身的區別就好比你的名字和你本人的區別。java里使用對象只能通過引用的方式,基本數據類型的變數和CC++的變數規則一樣。
如:
UserTypeut=newUserType();//ut是引用,實際的對象在內存里。
ut=newUserType();/*現在ut是另一個對象的引用,先前的對象被垃圾回收了(因為先前的對象不能被再次使用了)。*/
UserTypeut2;//定義了一個引用ut2,他不引用任何對象,不能使用。。。。
ut2=newUserType();//然ut2成為一個對象的引用。
UserTypeut3=newUserType();
UserTypeut4=newUserType();
ut3=ut4;//現在ut3引用ut4的對象,這里不是賦值。。。
inta=5;
intb=4;
a=b;//這里是賦值。ab依然引用不同的對象
類型轉換就是把一種類型的對象當做另一種類型的對象來使用。一些類型轉換會自動發生,另一些需要強制類型轉換,強制一般都會出問題,自動的也需要注意。
以上純屬個人理解,樓主慎讀之。。。。
㈡ Java對對象採用的是值調用還是引用調用
您好:
Java中參數的傳遞方式有兩種:傳值和傳引用。按值傳遞(call by value)表示方法接受的是調用者提供的值;按引用調用(call by reference)表示方法接受的是調用者提供的變數地址。
傳值,參數為基本類型時,是採用傳值的方式,示例如下:
供參考,希望對你有幫助!
㈢ java中對象和對象的引用的區別
1.什麼是對象?
在Java中有一句比較流行的話,叫做「萬物皆對象」,這是Java語言設計之初的理念之一。要理解什麼是對象,需要跟類一起結合起來理解。下面這段話引自《Java編程思想》中的一段原話:
「按照通俗的說法,每個對象都是某個類(class)的一個實例(instance),這里,『類』就是『類型』的同義詞。」
從這一句話就可以理解到對象的本質,簡而言之,它就是類的實例,比如所有的人統稱為「人類」,這里的「人類」就是一個類(物種的一種類型),而具體到每個人,比如張三這個人,它就是對象,就是「人類」的實例。
2.何謂對象引用?
我們先看一段話:
「每種編程語言都有自己的數據處理方式。有些時候,程序員必須注意將要處理的數據是什麼類型。你是直接操縱元素,還是用某種基於特殊語法的間接表示(例如C/C++里的指針)來操作對象。所有這些在 Java 里都得到了簡化,一切都被視為對象。因此,我們可採用一種統一的語法。盡管將一切都「看作」對象,但操縱的標識符實際是指向一個對象的「引用」(reference)。」
這段話來自於《Java編程思想》,很顯然,從這段話可以看出對象和對象引用不是一回事,是兩個完全不同的概念。舉個例子,我們通常會用下面這一行代碼來創建一個對象:
Person person = new Person("張三");
有人會說,這里的person是一個對象,是Person類的一個實例。
也有人會說,這里的person並不是真正的對象,而是指向所創建的對象的引用。
到底哪種說法是對的?我們先不急著糾結哪種說法是對的,再看兩行代碼:
Person person;
person = new Person("張三");
這兩行代碼實現的功能和上面的一行代碼是完全一樣的。大家都知道,在Java中new是用來在堆上創建對象用的,如果person是一個對象的話,那麼第二行為何還要通過new來創建對象呢?由此可見,person並不是所創建的對象,是什麼?上面的一段話說的很清楚,「操縱的標識符實際是指向一個對象的引用」,也就是說person是一個引用,是指向一個可以指向Person類的對象的引用。真正創建對象的語句是右邊的new Person("張三");
再看一個例子:
Person person;
person = new Person("張三");
person = new Person("李四");
這里讓person先指向了「張三」這個對象,然後又指向了「李四」這個對象。也就是說,Person person,這句話只是聲明了一個Person類的引用,它可以指向任何Person類的實例。這個道理就和下面這段代碼一樣:
int a;
a=2;
a=3;
這里先聲明了一個int類型的變數a,先對a賦值為2,後面又賦值為3.也就是說int類型的變數a,可以讓它的值為2,也可以為3,只要是合法的int類型的數值即可。
也就是說,一個引用可以指向多個對象,而一個對象可不可以被多個引用所指呢?答案當然是可以的。
比如:
Person person1 = new Person("張三");
Person person2 = person1;
person1和person2都指向了「張三」這個對象。
㈣ java中this的作用
在Java中,this關鍵字表示當前對象的引用,它是一個引用類型的變數。this關鍵字只能在非靜態方法中使用,因為靜態方法沒有this關鍵字。this關鍵字指的是當前對象,因此只有在創建對象之後才能使用this關鍵字。同時,使用this關鍵字需要遵守Java的變數作用域規則,避免產生歧義和錯誤。
在上面的代碼中,使用this.printName()調用了對象的printName()方法。
3、在構造函數中調用其他構造函數
當一個類有多個構造函數時,可以使用this關鍵字調用其他構造函數,簡化構造函數的代碼。在構造函數中使用this關鍵字調用其他構造函數時,必須放在構造函數的第一行。例如:
public class Person { private String name; private int age; public Person(String name) { this(name, 0); } public Person(String name, int age) { this.name = name; this.age = age; }}
在上面的代碼中,使用this(name, 0)調用了另一個構造函數。
4、作為返回值返回當前對象的引用
在一個對象的方法中,可以使用this關鍵字返回當前對象的引用。這種方式可以支持方法鏈式調用,提高代碼的簡潔性和可讀性。例如:
public class Person { private String name; private int age; public Person setName(String name) { this.name = name; return this; } public Person setAge(int age) { this.age = age; return this; }}
在上面的代碼中,setName()和setAge()方法都返回當前對象的引用,支持鏈式調用。
綜上所述,this關鍵字可以區分局部變數和實例變數,調用當前對象的方法,簡化構造函數的代碼,以及作為返回值返回當前對象的引用。
㈤ 對於java的四種引用:強引用、軟引用、弱引用、虛引用的理解
對於JAVA系統的引用有四種方式。
強引用 一般指的通過new 、射創建對象的引用。我們一般開發都是使用這一種引用。
軟引用 SoftReference 一般是應用內存敏感的緩存,所有的軟引用的對象都是保證在程序拋出OutOfMemoryError之前都垃圾回收器回收。
弱引用 WeakReference 一般用於實現一些規范化的映射關系,它是每一次GC回收後,都會對引用的回收,並且將回收的對象入隊到RefereceQueue,由上層去做清理工作。比如WeakHashMap就是使用弱引用。利用RefereceQueue去做清理無效的value數據,避免內存泄漏。
虛引用 PhantomReference 一般用於回收對象的清理操作,是一種比實現finalize方法更加彈性的方式。無論是否發生GC,引用都是返回null,對象會後會入隊ReferenceQueue,便於應用層去捕捉回收的對象後清理工作。