java對象引用
Ⅰ java有幾種對象引用
1.強引用(StrongReference)
強引用是java中最常見的一種引用方式,當一個程序創建一個對象,並把這個對象賦給一個引用變數,程序通過該引用變數操作實際的對象.當一個對象被一個或一個以上的引用變數所引用時,它處於可達狀態,不可能被系統垃圾回收機制回收。
2.軟引用(SoftReference)
軟引用需要通過SoftReference類來實現,當一個對象只有軟引用時,它有可能被垃圾回收機制回收。對於只有軟引用的對象而言,當系統內存空間足夠時,它不會被系統回收,程序也可使用該對象;當系統內存空間不足時,系統可能會回收它。軟引用通常用於對內存比較敏感的程序中。
3.弱引用(WeakReference)
弱引用通過WeakReference類實現,弱引用和軟引用很像,但弱引用的引用級別更低。對於只有弱引用的對象而言,當系統垃圾回收機制運行時,不管系統內存是否足夠,總會回收該對象所佔用的內存。當然,並不是說當一個對象只有弱引用時,它就會立即被回收——正如那些失去引用的對象一樣,必須等到系統垃圾回收機制運行時才會被回收。
4.虛引用(PhantomReference)
虛引用通過PhantomReference類實現,虛引用完全類似於沒有引用。虛引用對對象本身沒有太大影響,對象甚至感覺不到虛引用的存在。如果一個對象只有一個虛引用時,那麼它和沒有引用的效果大致相同。虛引用主要用於跟蹤對象被垃圾回收的狀態,虛引用不能單獨使用,虛引用必須和引用隊列聯合使用
Ⅱ 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("張三");
Ⅲ java 中 什麼是引用對象
Java中基礎類型(如int、long、short、double、byte、char、float)是傳值,其他類型或自定義類型都是傳引用。
舉個例:
public class A {
private int a;
public void setA(int a) {
this.a = a;
}
public static void main(String[] args) {
A obj = new A();
modifyA(obj);//這里obj就是引用對象,方法modifyA對obj的修改不會影響obj對象所在內存地址。
}
public void modifyA(A a) {
a.setA(10);
}
}
Ⅳ java 中怎麼獲得對象引用的名稱
在使用python時,和你有類似的想法。我用for循環遍歷了實例對象名稱列表,for語句中,加入instanceName = item。在類中,直接調用instanceName即可。
Ⅳ java中的當前對象的引用是指什麼呢
就是 你聲明出的Student對象,你聲明的時候會給他姓名和年齡屬性吧。。this 關鍵字,就是你取得你聲明對象的。具體東西。例如this.name; 取得name值 就是這樣。望採納
Ⅵ 分析java對象的幾種引用(reference)
java對象的引用reference分為有強引用,軟引用,弱引用,虛引用這幾種形式。1、Soft Reference(軟引用) 指到的對象,即使沒有任何Direct Reference,也不會清除,一直到jvm內存不足且沒有Direct Reference時候才會清除。 應用場景:常用來設計緩存,不但可以將對象緩存起來,也不會容易造成內存不足。2、Weak Reference(弱引用) GC一旦發現了弱引用關系進行就開始收集對象。 應用場景:想查看某些對象信息,又不想影響GC對其的收集工作。 與GC的交互: 1.將referent置為null引用; 2.將堆中的目標對象設置為finalizable(可結束的); 3.先執行finalize(),釋放內存,軟引用添加到RefernceQueue中。 ReferenceQueue在 soft renference和 weak reference中可以為null,但虛應用中必須有!3、PhantomReference(虛引用) 與GC的交互: 1.不將referent置為null引用;而是將堆中的目標對象設置為finalizable(可結束的); 2.先軟引用添加到RefernceQueue中。然後收集對象,釋放內存 附註:ReferenceQueue在 soft renference和 weak reference中可以為null,但虛引用中必須有!4、抽象類Reference分析 java.lang.ref包中有四個類,他們的關系是PhantomReference,WeakReference,SoftReference繼承了抽象類Reference。Reference類中,有thread子類(ReferenceHandler),並在靜態區域中開啟,對pending欄位進行實時的監控。 pending是由jvm來賦值的,當Reference內部的referent對象的可達狀態改變時,jvm會將Reference對象放入pending鏈表。 一旦relevent= null,垃圾收集時會標記WeakReference的referent為不可達get()返回null,並且通過賦值給pending ,觸發ReferenceHandler線程處理pending。 ReferenceHandler線程要做的是將pending對象enqueue,但默認我們所提供的queue,也就是從構造函數傳入的是null,實際是使用了ReferenceQueue.NULL,Handler線程判斷queue為ReferenceQueue.NULL則不進行操作,只有非ReferenceQueue.NULL 的queue才會將Reference進行enqueue。 希望通過以上內容的介紹,能夠給你帶來幫助。
Ⅶ 什麼是對象引用JAVA
你這方面的問題太多了,加295663995.
對象引用也就是說
指向對象那堆空間的首地址的指針。
Person
p
=
new
Person();
new
Person();創建了一個Person對象,這個對象賦值給了p
p獲取的不是Person對象,而是Person對象的首地址。
p就是
new
Person();對象的引用。
Ⅷ 關於java里返回對象的引用
accountId的數據類型不是Account
Ⅸ 關於java中對象引用的理解
通過a來改變A[1]的值,應該是A[1]=a;
然後數組的下標是從0開始的,如果你的需要是往第一個位置添加內容的話,那應該寫成A[0]=a;
你的代碼的意思是:
int a; 定義了一個int整數類型的變數,名字是a.
a = A[1]; 把數組A下標為1的數值賦值給a,因為你只定義了數組,沒有加內容,所以默認為0,此時a=0;
a=123,又把123這個數值賦值給a,此時a=123;
全部過程沒有對數組進行操作,所以列印出的內容是0;
建議你看看賦值語句相關的資料。至於你後面的問題,不是很明確。如果有需要,把具體的問題代碼放出來。
Ⅹ JAVA:」對象的引用「是什麼意思
JAVA:」對象的引用「意思是定義一個變數,這個變數指向的是一個對象,所以叫對象的引用。
Objectobj=newObject();
//obj:對象的引用
//newObject():對象
//Object:類