成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

java 初識對象和對象引用的關(guān)系

Betta / 2734人閱讀

摘要:在接觸之前就知道了的對象引用,但概念一直很模糊,看了后覺得書中的例子很有趣,便分享給大家。

在接觸java之前就知道了java的對象引用,但概念一直很模糊,看了《Head First in Java》后覺得書中的例子很有趣,便分享給大家。

首先要搞清對象引用是什么?

我們都知道變量可以存放數(shù)據(jù),就像杯子一樣,不同大小的杯子存放不同種類的飲料:

但是對象卻是一類特殊的數(shù)據(jù)類型,在實(shí)例化一個對象時,是將對象分配到“堆”的存儲空間的:

而對象引用的作用就像“遙控器”一樣去間接地指揮對象工作:

對象與引用的“前世今生”

明白了上述概念后,就能簡單通過下例搞明白,在對象創(chuàng)建過程中引用究竟和對象是怎樣聯(lián)系在一起的。
有如下實(shí)例:

1、聲明一個引用變量

Dog myDog = new Dog();

jvm(java虛擬機(jī))分配空間給Dog類型的引用變量myDog,換言之,它是一個只能控制Dog的遙控器

2、創(chuàng)建對象

Dog myDog = new Dog();
jvm分配堆空間給對象

3、連接對象在和引用

Dog myDog = new Dog();
即設(shè)置遙控器控制的對象

對象與引用的“恩恩怨怨”

引用在相互賦值,過程中,其實(shí)是對對象“控制權(quán)”的轉(zhuǎn)讓,沒有人要的對象,就會被jvm檢測到并清除。
有如下例:

1.
Book b = new Book();
Book c = new Book();

首先有這樣兩組對象與引用一一對應(yīng):

2.
Book d = c;

新建一個Book引用變量d,并將c賦值給d,其結(jié)果為:c和d引用同一對象:

3.
c = b;

將b的值賦值給c,其結(jié)果為:b和c引用同一對象

4.
d = null;

將null賦值給d,表示它不引用任何事物;
而對象2由于沒有人可以引用它,只能被當(dāng)作垃圾回收:

總結(jié)

這次看書基本明白了java引用和對象的關(guān)系,但我還想知道java為什么要這樣設(shè)計。很遺憾,書中并沒有具體說明,我只能通過我微不足道的經(jīng)驗(yàn)談?wù)勛约旱睦斫狻?br>為了節(jié)省資源
java基本值傳遞,即拷貝傳遞,而拷貝引用顯然比拷貝對象更省資源。
就像你拜托朋友照看房子,肯定是把鑰匙的備份交給朋友,而非把房子的備份交給朋友。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/73350.html

相關(guān)文章

  • 初識Hibernate

    摘要:使用反射機(jī)制,而不是字節(jié)碼增強(qiáng)程序來實(shí)現(xiàn)透明性。工具類初始化失敗為空,請檢查配置文件瞬時對象與持久化對象測試代碼當(dāng)前在數(shù)據(jù)庫中沒有記錄進(jìn)行關(guān)聯(lián),所以此時是瞬時對象。將持久化當(dāng)前在數(shù)據(jù)庫有唯一一條記錄對應(yīng),所以此時是持久化對象。 showImg(https://segmentfault.com/img/bVbo4at?w=2313&h=642); 一、什么是Hibernate? Hibe...

    tomato 評論0 收藏0
  • 《深入理解Java虛擬機(jī)第3版》垃圾收集器與內(nèi)存分配策略、虛擬機(jī)性能監(jiān)控故障處理工具

    摘要:目錄往期博客課堂篇初識常量池簡單理解字符串常量池靜態(tài)常量池大整型常量池為什么要了解垃圾收集和內(nèi)存分配如何判斷對象已死引用計數(shù)算法可達(dá)性分析算法之后引用的擴(kuò)充回收方法區(qū)垃圾收集算法分代收集理論標(biāo)記清除標(biāo)記復(fù)制標(biāo)記整理對象分 ...

    Kerr1Gan 評論0 收藏0
  • Java8-1-初識Lambda表達(dá)式與函數(shù)式接口

    摘要:而在中,表達(dá)式是對象,它們必須依附于一類特別的對象類型函數(shù)式接口。即表達(dá)式返回的是函數(shù)式接口類型。 Java8被稱作Java史上變化最大的一個版本。其中包含很多重要的新特性,最核心的就是增加了Lambda表達(dá)式和Stream API。這兩者也可以結(jié)合在一起使用。首先來看下什么是Lambda表達(dá)式。Lambda表達(dá)式,維基百科上的解釋是一種用于表示匿名函數(shù)和閉包的運(yùn)算符,感覺看到這個解釋...

    jzman 評論0 收藏0
  • Chapter1 Java初識

    摘要:簡介年由公司發(fā)布的一門面向?qū)ο蟮某绦蛟O(shè)計語言虛擬機(jī)。兩個主要組件編譯器源程序轉(zhuǎn)成字節(jié)碼運(yùn)行編譯后的程序后綴運(yùn)行時環(huán)境。 Lecture1 Java簡介 1995年由Sun公司發(fā)布的一門面向?qū)ο蟮某绦蛟O(shè)計語言 JVM(Java Virtual Machine):Java虛擬機(jī)。是實(shí)現(xiàn)Java平臺無關(guān)性的關(guān)鍵Java程序的執(zhí)行流程:解釋執(zhí)行的過程由JVM來完成,即JVM把字節(jié)碼文件解釋...

    K_B_Z 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<