摘要:在接觸之前就知道了的對象引用,但概念一直很模糊,看了后覺得書中的例子很有趣,便分享給大家。
在接觸java之前就知道了java的對象引用,但概念一直很模糊,看了《Head First in Java》后覺得書中的例子很有趣,便分享給大家。
首先要搞清對象引用是什么?
我們都知道變量可以存放數據,就像杯子一樣,不同大小的杯子存放不同種類的飲料:
但是對象卻是一類特殊的數據類型,在實例化一個對象時,是將對象分配到“堆”的存儲空間的:
而對象引用的作用就像“遙控器”一樣去間接地指揮對象工作:
對象與引用的“前世今生”明白了上述概念后,就能簡單通過下例搞明白,在對象創建過程中引用究竟和對象是怎樣聯系在一起的。
有如下實例:
Dog myDog = new Dog();
jvm(java虛擬機)分配空間給Dog類型的引用變量myDog,換言之,它是一個只能控制Dog的遙控器
2、創建對象Dog myDog = new Dog();
jvm分配堆空間給對象
Dog myDog = new Dog();
即設置遙控器控制的對象
引用在相互賦值,過程中,其實是對對象“控制權”的轉讓,沒有人要的對象,就會被jvm檢測到并清除。
有如下例:
Book b = new Book(); Book c = new Book();
首先有這樣兩組對象與引用一一對應:
2.Book d = c;
新建一個Book引用變量d,并將c賦值給d,其結果為:c和d引用同一對象:
3.c = b;
將b的值賦值給c,其結果為:b和c引用同一對象
4.d = null;
將null賦值給d,表示它不引用任何事物;
而對象2由于沒有人可以引用它,只能被當作垃圾回收:
這次看書基本明白了java引用和對象的關系,但我還想知道java為什么要這樣設計。很遺憾,書中并沒有具體說明,我只能通過我微不足道的經驗談談自己的理解。
為了節省資源
java基本值傳遞,即拷貝傳遞,而拷貝引用顯然比拷貝對象更省資源。
就像你拜托朋友照看房子,肯定是把鑰匙的備份交給朋友,而非把房子的備份交給朋友。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/73350.html
摘要:使用反射機制,而不是字節碼增強程序來實現透明性。工具類初始化失敗為空,請檢查配置文件瞬時對象與持久化對象測試代碼當前在數據庫中沒有記錄進行關聯,所以此時是瞬時對象。將持久化當前在數據庫有唯一一條記錄對應,所以此時是持久化對象。 showImg(https://segmentfault.com/img/bVbo4at?w=2313&h=642); 一、什么是Hibernate? Hibe...
摘要:目錄往期博客課堂篇初識常量池簡單理解字符串常量池靜態常量池大整型常量池為什么要了解垃圾收集和內存分配如何判斷對象已死引用計數算法可達性分析算法之后引用的擴充回收方法區垃圾收集算法分代收集理論標記清除標記復制標記整理對象分 ...
摘要:而在中,表達式是對象,它們必須依附于一類特別的對象類型函數式接口。即表達式返回的是函數式接口類型。 Java8被稱作Java史上變化最大的一個版本。其中包含很多重要的新特性,最核心的就是增加了Lambda表達式和Stream API。這兩者也可以結合在一起使用。首先來看下什么是Lambda表達式。Lambda表達式,維基百科上的解釋是一種用于表示匿名函數和閉包的運算符,感覺看到這個解釋...
摘要:簡介年由公司發布的一門面向對象的程序設計語言虛擬機。兩個主要組件編譯器源程序轉成字節碼運行編譯后的程序后綴運行時環境。 Lecture1 Java簡介 1995年由Sun公司發布的一門面向對象的程序設計語言 JVM(Java Virtual Machine):Java虛擬機。是實現Java平臺無關性的關鍵Java程序的執行流程:解釋執行的過程由JVM來完成,即JVM把字節碼文件解釋...
閱讀 1552·2021-11-17 09:33
閱讀 1100·2021-11-12 10:36
閱讀 2414·2019-08-30 15:54
閱讀 2441·2019-08-30 13:14
閱讀 2914·2019-08-26 14:05
閱讀 3289·2019-08-26 11:32
閱讀 3001·2019-08-26 10:09
閱讀 2995·2019-08-26 10:09