最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java?面向?qū)ο笸ㄟ^(guò)new揭開(kāi)對(duì)象實(shí)例化

 更新時(shí)間:2022年04月06日 11:07:07   作者:是小魚(yú)兒哈  
各位鐵汁們大家好呀,我們上次博客講了,通過(guò)?Student?student1?=?new?Student();就可以實(shí)例化一個(gè)對(duì)象,這個(gè)對(duì)象就有Student類(lèi)中的所以成員變量。可是?對(duì)象student1?和?類(lèi)Student到底是怎樣建立聯(lián)系的,在內(nèi)存中到底發(fā)生了什么

更正說(shuō)明:

我之前的的標(biāo)題有點(diǎn)文不對(duì)題,我這篇博客的內(nèi)容明明說(shuō)的是:java中對(duì)象創(chuàng)建的過(guò)程,對(duì)內(nèi)存之種底層的東西,我其實(shí)提的不太多。

所以我原來(lái)的標(biāo)題:《當(dāng)你實(shí)例化對(duì)象時(shí),在內(nèi)存中到底發(fā)生了什么》是不合適的

概念了解

想要知道內(nèi)存中發(fā)生了什么,我們先來(lái)了解兩個(gè)內(nèi)存概念????

  • 堆內(nèi)存:保存對(duì)象的屬性?xún)?nèi)容。堆內(nèi)存需要用new關(guān)鍵字來(lái)分配空間;
  • 棧內(nèi)存:保存的是堆內(nèi)存的地址(在這里為了分析方便,可以簡(jiǎn)單理解為棧內(nèi)存保存的是對(duì)象的名字)。

Student student1 = new Student()

這行代碼可以分為兩部分

1、Student student1 聲明對(duì)象,會(huì)在棧上開(kāi)辟一塊區(qū)域,名叫student1,里面存了:堆中開(kāi)辟的內(nèi)存的地址??

2、new Student() 實(shí)例化student1對(duì)象,在堆里開(kāi)辟了一塊區(qū)域,名叫student1??

當(dāng)用等號(hào)將兩者關(guān)聯(lián)的時(shí)候,其實(shí)就是將棧上聲明的對(duì)象student1,指向堆上實(shí)例化的具體空間

如圖所示:

從圖中也可以看出,在“=”關(guān)聯(lián)的時(shí)候,就是將堆中student1開(kāi)辟內(nèi)存的地址0X99存放到了棧里,可以吧內(nèi)存地址看成Student類(lèi)的一把鑰匙??

實(shí)例化后對(duì)象student1獲得了這把鑰匙,所以可以在類(lèi)中任意拿東西,即調(diào)用屬性、方法等??

(大多數(shù)情況下可以這么認(rèn)為,其實(shí)變量名student1儲(chǔ)存的不一定是地址??)

第一種情況

因此可以通過(guò)對(duì)象名 student1 ,給堆中的具體成員變量賦值、調(diào)用??。

其實(shí)棧中存放的就是堆中某一個(gè)內(nèi)存的引用,這就是對(duì)象引用的概念,其中的 student1 也被稱(chēng)作對(duì)象的引用變量??

class Student {
    String name;   //學(xué)生類(lèi)的屬性
    int age;
    public void eat() {
        System.out.println(name + "在吃飯, 他" + age + "歲了");   // 學(xué)生類(lèi)的行為(方法)
    }
}
public class TestDemo3 {
    // 不同的實(shí)例化對(duì)象在棧中擁有不同的空間,他們也指向堆中不同的內(nèi)存地址
    public static void main(String[] args) {
        Student student1 = new Student();  // 學(xué)生對(duì)象student1
        student1.name = "小強(qiáng)";  // 通過(guò) 對(duì)象名.屬性 來(lái)給堆中的具體成員變量賦值
        student1.age = 18;
        student1.eat();        // 調(diào)用類(lèi)中的eat()方法
        
        Student student2 = new Student(); // 學(xué)生對(duì)象student2
        student2.name = "小紅";
        student2.age = 23;
        student2.eat();
    }
}

第二種情況

不同的實(shí)例化對(duì)象在棧中擁有不同的空間,他們也指向堆中不同的內(nèi)存地址,但是也可以有這樣的情況:棧中有不同的空間,他們指向堆中同一個(gè)內(nèi)存地址??。

class Dog {
    String name;
    int age;
    public void show() {
        System.out.println("姓名:" + name + "   年齡: " + age);
    }
}
public class TestDemo4 {
    public static void main(String[] args) {
        Dog one = new Dog();
        Dog two = one;
    }
}

對(duì)象one在實(shí)例化后,擁有一塊棧的空間,空間里存放堆的一個(gè)內(nèi)存地址??

那么將one賦值給two之后,two的棧的空間里,也會(huì)存放one擁有的堆的內(nèi)存地址??。

用一個(gè)很形象的比喻,妻子帶著一幅畫(huà)嫁給了丈夫,那么她的畫(huà)也就屬于丈夫了,兩人共有??。

不論是丈夫還是妻子,只要是對(duì)畫(huà)做出了最后的更改,那么這幅畫(huà)的內(nèi)容就會(huì)改變。即最后一次修改是有效的,會(huì)覆蓋掉原先的內(nèi)容??

用代碼來(lái)展示:

class Dog {
    String name;
    int age;
    public void show() {
        System.out.println("姓名:" + name + "   年齡: " + age);
    }
}
public class TestDemo4 {
    public static void main(String[] args) {
        Dog one = new Dog();
        Dog two = one;
        one.name = "阿黃";
        one.age = 10;
        
        two.name = "旺財(cái)";
        two.age = 3;
        one.show();
        System.out.println("========這是分割線========");
        two.show();
    }
}

怎么樣!通過(guò)對(duì)象one對(duì)姓名和年齡的賦值是不是被覆蓋掉了,內(nèi)存中的場(chǎng)景大概是這樣 

 棧中的對(duì)象one、two同時(shí)指向堆中的同一塊空間,也就是不同的??梢孕薷耐粔K堆內(nèi)存的內(nèi)容??,這樣堆內(nèi)存的內(nèi)容自然就是最后對(duì)象two所賦值的內(nèi)容了??。

哈哈! 原來(lái)在我們實(shí)例化new一個(gè)對(duì)象的時(shí)候,內(nèi)存里偷偷干了這么多事啊??!

各位鐵汁們,我們下篇博客見(jiàn),嘻嘻?? 

到此這篇關(guān)于Java 通過(guò)new揭開(kāi)對(duì)象實(shí)例化的文章就介紹到這了,更多相關(guān)Java 對(duì)象實(shí)例化內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringSecurity?認(rèn)證實(shí)現(xiàn)流程分析

    SpringSecurity?認(rèn)證實(shí)現(xiàn)流程分析

    SpringSecurity框架通過(guò)一個(gè)過(guò)濾器鏈來(lái)處理認(rèn)證和授權(quán),主要包括UsernamePasswordAuthenticationFilter負(fù)責(zé)處理登錄請(qǐng)求,本文給大家介紹SpringSecurity?認(rèn)證實(shí)現(xiàn)登錄校驗(yàn),感興趣的朋友跟隨小編一起看看吧
    2024-10-10
  • SpringBoot項(xiàng)目中枚舉類(lèi)型字段與前端和數(shù)據(jù)庫(kù)的交互方法

    SpringBoot項(xiàng)目中枚舉類(lèi)型字段與前端和數(shù)據(jù)庫(kù)的交互方法

    最近做的這個(gè)項(xiàng)目中,用到了大量的枚舉類(lèi),下面這篇文章主要給大家介紹了關(guān)于SpringBoot項(xiàng)目中枚舉類(lèi)型字段與前端和數(shù)據(jù)庫(kù)的交互方法,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-07-07
  • 基于jdbc處理Clob的使用介紹

    基于jdbc處理Clob的使用介紹

    本篇文章是對(duì)jdbc處理Clob的使用進(jìn)行了分析介紹,需要的朋友參考下
    2013-05-05
  • Spring Cloud Gateway重試機(jī)制原理解析

    Spring Cloud Gateway重試機(jī)制原理解析

    這篇文章主要介紹了Spring Cloud Gateway重試機(jī)制原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • 詳解JAVA調(diào)用WCF服務(wù)的示例代碼

    詳解JAVA調(diào)用WCF服務(wù)的示例代碼

    這篇文章主要介紹了詳解JAVA調(diào)用WCF服務(wù)的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-09-09
  • 如何定位java程序中占用cpu最高的線程堆棧信息

    如何定位java程序中占用cpu最高的線程堆棧信息

    這篇文章主要介紹了如何定位java程序中占用cpu最高的線程堆棧信息方法的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • Spring + Spring Boot + MyBatis + MongoDB的整合教程

    Spring + Spring Boot + MyBatis + MongoDB的整合教程

    這篇文章主要給大家介紹了關(guān)于Spring + Spring Boot + MyBatis + MongoDB的整合教程,文中通過(guò)圖文以及示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。
    2017-12-12
  • Spring學(xué)習(xí)教程之AOP模塊的概述

    Spring學(xué)習(xí)教程之AOP模塊的概述

    AOP 從功能的角度來(lái)講,可能看作OOP編程方式的一種補(bǔ)充,提供了一種不同的代碼或者系統(tǒng)組織方式,下面這篇文章主要給大家介紹了關(guān)于Spring學(xué)習(xí)教程之AOP模塊的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2018-05-05
  • 簡(jiǎn)單了解Java字符串(操作)

    簡(jiǎn)單了解Java字符串(操作)

    這篇文章主要介紹了Java字符串(操作),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,下面小編和大家一起來(lái)學(xué)習(xí)吧
    2019-05-05
  • 帶你快速上手Servlet

    帶你快速上手Servlet

    這篇文章主要介紹了帶你快速上手Servlet,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-05-05

最新評(píng)論

宁城县| 峨山| 轮台县| 汝南县| 麦盖提县| 鹿邑县| 乌鲁木齐县| 原阳县| 资源县| 濮阳市| 山西省| 阳信县| 象山县| 会昌县| 双峰县| 颍上县| 莆田市| 石景山区| 伊春市| 石嘴山市| 中超| 赫章县| 颍上县| 邢台县| 仙桃市| 凤城市| 玛曲县| 陆河县| 木里| 绥滨县| 定西市| 兴城市| 兴山县| 扎赉特旗| 西平县| 汉中市| 准格尔旗| 亳州市| 兴国县| 曲阳县| 永新县|