本文目錄一覽:
北大青鳥設計培訓:java編程引用類型分析?
我們在使用java編程開發語言開發軟體的時候通常都會new對象,然後通過對對象的引用來實現不同的編程需求,而今天電腦培訓就一起來了解一下,java編程開發語言中都有哪些常見的引用方法。
1:虛引用1.1簡介:虛引用是所有引用中強度弱的,它完全類似於沒有引用,在java.reflact.PhantomReference類中實現。
虛引用對象本身沒有太大影響,對象甚至感覺不到虛引用的存在。
如果一個對象存在虛引用,那麼它和沒有引用的效果大致相同,虛引用無法引用任何堆中的對象作用:虛引用主要用於跟蹤對象被JVM垃圾回收的狀態,可以通過它來手機GC的行為。
可以通過檢查與虛引用關聯的引用隊列中是否已經包含指定的虛引用,從而了解虛引用鎖引用的對象是否被回收。
注意:虛引用無法單獨使用,虛引用必須和引用隊列(ReferenceQueue)聯合使用.被虛引用所引用對象被垃圾回收後,虛引用將被添加到引用隊列中。
2:弱引用簡介:弱引用和虛引用有點類似,不同之處在於虛引用鎖引用的對象生存期比虛引用長一點。
虛引用在java.reflact.WeakReference類實現。
在系統進行垃圾回收的時候,不管系統內存是否足夠,總是回收該對象所佔用的內存.但是弱引用的強度是要大於虛引用的3:軟引用簡介:軟引用比弱引用的強度高一點,它是通過java.reflact.SoftReference來實現。
對於軟引用來說,當系統內存空間足夠時,它不會被系統回收,程序中改對象的引用也是有效的。
而當系統的內存空間不夠時,系統將會回收它。
作用:軟引用是強引用好的替代,它一定程度上可以避免系統內存不足的異常,可以充分使用軟引用來解決內存緊張的問題。
4:強引用簡介:強引用很常見,在平時的程序中,我們新new一個對象,比如Objectobject=newObject();那麼這個object就是指向object對象的強引用。
強引用的特點就是:被引用的java對象絕對不會被垃圾回收機制回收,即使系統的內存非常緊張,即使java以後也用不到,jvm不會回收強引用所引用的java對象。
java中的引用數據類型是怎樣的?
java中有兩種數據類型:基本類型和引用類型。\x0d\x0a基本類型有8個:\x0d\x0a 整數類型 byte、short、int、long\x0d\x0a 浮點數類型 float、double\x0d\x0a 字元型 char\x0d\x0a 布爾類型 boolean\x0d\x0a引用類型包括三種:\x0d\x0a 類 Class\x0d\x0a 介面 Interface\x0d\x0a 數組 Array\x0d\x0a基本類型是通過諸如 int a = 5; long b = 6L;的形式來定義的,稱為自動變數,自動變數存放的是字面值,不是類的實例,它存放在內存的堆棧中,數據大小和生存期必須是確定的,存取速度比較快,在堆棧中的字面值可以共享,也就是說我們定義一個int a = 5;然後又定義了一個int b = 5;這時a與b在內存中指向的是同一個字面常量。\x0d\x0a引用類型一般是通過new關鍵字來創建,比如Integer num = new Integer(3);它存放在內存的堆中,可以在運行時動態的分配內存大小,生存期也不必事先告訴編譯器,當引用類型變數不被使用時,Java內部的垃圾回收器GC會自動回收走。引用變數中存放的不是變數的內容,而是存放變數內容的地址。\x0d\x0a在參數傳遞時,基本類型都是傳值,也就是傳遞的都是原變數的值得拷貝,改變這個值不會改變原變數,而引用類型傳遞的是地址,也就是參數與原變數指向的是同一個地址,所以如果改變參數的值,原變數的值也會改變。這點要注意。\x0d\x0a在java中,8種基本類型在java中都有對應的封裝類型,也就是引用類型:\x0d\x0a 整數類型 Byte、Short、Integer、Long\x0d\x0a 浮點數類型 Float、Double\x0d\x0a 字元型 Character\x0d\x0a 布爾類型 Boolean\x0d\x0a有時候我們會看到這樣的語句 Integer num = 3;Boolean b = true;這樣定義也能行得通,其實這裡面有一個自動裝箱的問題,即java自動把3這個字面常量封裝成了Integer對象,同理也有自動拆箱。\x0d\x0a還有些需要注意的比較特殊的地方:\x0d\x0a1.Integer類型\x0d\x0aInteger i1 = 3;\x0d\x0aInteger i2 = 3;\x0d\x0a此時i1 == i2 返回的是true\x0d\x0aInteger i1 = 128;\x0d\x0aInteger i2 = 128;\x0d\x0a此時i1 == i2返回的是false,\x0d\x0a這時因為Integer的數值在-128~127之間時,即在int的範圍內,默認是按照基本類型int來存放的,仍舊存在堆棧中,如果超出了int的範圍,就按照對象的方式來存放和比較了。\x0d\x0a \x0d\x0a2、String類型\x0d\x0aString類型我們有時候也會直接這樣定義:\x0d\x0aString s = “abc”;\x0d\x0a這裡的”abc”稱為字元串常量,也是存在堆棧中的,s中存放的就是指向這個堆棧地址的引用,如果再定義一個\x0d\x0aString s1 = “abc”;\x0d\x0a這時,s與s1存放的是同一個地址的引用,即s與s1指向的是同一個字元串常量,\x0d\x0as == s1的值是true,\x0d\x0a但是如果有\x0d\x0aString s2 = new String(“abc”);\x0d\x0a這時s == s2則為false,因為使用new之後,每次生成的對象都不是同一個,即使存儲的內容相同。\x0d\x0a上面的s == s1,s == s2其實比較的都是地址,並不是裡面的內容。如果要比較內容,可以使用equals()方法。\x0d\x0a\x0d\x0a其他的就不多說了,打起來太慢了,可以自己去看一下java編程思想。
java中值類型和引用類型的區別
(1)值類型:數據存儲在內存的堆棧中,從堆棧中可以快速地訪問這些數據,因此,值類型表示實際的數據。
(2)引用類型:對象、數組、函數。
1、值類型:包括:sbyte、short、int、long、float、double、decimal(以上值類型有符號)byte、ushort、uint、ulong(以上值類型無符號)bool、char
2、引用類型:包括:對象類型、動態類型、字元串類型。二、具體區別:
1、值類型:byteb1=1;byteb2=b1;Console.WriteLine(“{0},{1}。”,b1,b2);b2=
2;Console.WriteLine(“{0},{1}。”,b1,b2);Console.ReadKey();解釋:byteb1=1;聲明b1時,在棧內開闢一個內存空間保存b1的值1。byteb2=b1;聲明b2時,在棧內開闢一個內存空間保存b1賦給b2的值1。Console.WriteLine(“{0},{1}。”,b1,b2);輸出結果為1,1。b2=2;將b2在棧中保存的值1改為
2。Console.WriteLine(“{0},{1}。”,b1,b2);輸出結果為1,2。
2、引用類型:複製代碼。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/271445.html