Java類與對象-JVM內(nèi)存分析


面向?qū)ο?面向過程
弊端不能知道是哪個主體干了些什么事情

面向過程

    static void buy() {
        System.out.println("拿錢買菜");
    }
    static void doFood() {
        System.out.println("做飯");
    }
    
    public static void main(String[] args) {

        buy();
        doFood();

    }

面向?qū)ο笏枷?/strong>

面向?qū)ο笏枷?/div>

面向?qū)ο蟮哪康?
1.將復(fù)雜的事情簡單化
2.面向?qū)ο髮⒁郧暗倪^程中的執(zhí)行者變成了指揮官
3.面向?qū)ο筮@種思想是符合現(xiàn)在人們思考習(xí)慣的一種思想


面向?qū)ο蟮娜筇匦?/strong>
封裝/繼承/多態(tài)

面向?qū)ο蟮娜筇匦?/div>


對象

把具有相同"特性"和"行為"的多個對象的抽象就是類.
找多個對象共同的狀態(tài)和行為

用來描述事物
具體 某個事物

如下面每一個狗都是一個對象,它們都是狗類

萬物皆對象

對象和類的區(qū)別,對象是具體到一個人,類是人的集群

類的實例化(描述一個人)
把類具體到某一個對象上面,該對象有具體的什么狀態(tài)特征和什么行為

實例化對象

對象的一些狀態(tài)特征成員變量來表示
對象的行為方法表示
類的創(chuàng)建通常是開一個文件

類的定義

類的實例化

Person類

對象的創(chuàng)建
在程序中,必須先有類,再有對象(先得有模板,再有根據(jù)模板制造出來的個體)

        創(chuàng)建對象:  類  對象名 = new 類名()
                Person zz    = new Person();

        賦值:描述狀態(tài)具體的值(定義類時是什么類型,賦值是要賦值什么類型)
        賦值:對象.變量名=值
        zz.age = 18;
        zz.name = "我豬";
        zz.height = 1.65;

        取值:變量=對象名.變量名
        String name= zz.name;
        System.out.println(name);

        對象調(diào)用方法:對象名.方法名([實參])
        zz.sing("每一明天也是你");

JVM的內(nèi)存劃分
JVM將內(nèi)存主要劃分為:方法區(qū) 棧 本地方法棧 堆 程序計數(shù)器

運算時數(shù)據(jù)區(qū)

方法區(qū)存:又叫靜態(tài)區(qū),存放所有的class和static變量;方法分區(qū)中包含的都是在程序中永遠(yuǎn)的唯一元素

虛擬機(jī)棧:執(zhí)行引擎每調(diào)用一個函數(shù)是,就為這個函數(shù)創(chuàng)建一個棧幀,并加入虛擬機(jī)棧.換個角度理解,每個函數(shù)從調(diào)用到執(zhí)行結(jié)束,其實是對應(yīng)一個棧幀的入棧和出棧

本地方法區(qū):本地方法棧與虛擬機(jī)棧所發(fā)揮的作用很相似,他們的區(qū)別在于虛擬機(jī)棧為Java代碼方法服務(wù),而本地方法棧是為Native方法服務(wù)

堆:被所有線程共享的一塊區(qū)域,在虛擬機(jī)啟動是創(chuàng)建,所有的對象實例及數(shù)組都在堆上分配(使用new關(guān)鍵字,表示在堆中開辟一塊新的存儲空間)

程序計數(shù)器:每個線程的有個計數(shù)器幾率當(dāng)前執(zhí)行到哪個指令.可以把它看成是當(dāng)前限倉呢過所執(zhí)行的字節(jié)碼的行號指示器.


是一種數(shù)據(jù)結(jié)構(gòu)
特點:先進(jìn)后出(FILO)
例如:先穿襪子再穿鞋子,先脫鞋子再脫襪子

入棧:把元素放到棧里
棧頂:棧中的第一個元素
棧底:棧中的最后一個元素
出棧:把元素從棧中移除

    static void sum(int a, int b) {
        System.out.println(a + b);
    }

    public static void main(String[] args) {
        int x = 10;//main方法率先入棧
        sum(10,20);//sum方法進(jìn)棧
    }
sum方法先出棧,main方法后出棧
執(zhí)行完一個方法,它的棧幀就會出棧

堆的數(shù)組初始化與GC

        1.int[] ages 聲明了一個int類型的數(shù)組ages
        2.new int[] {10,20,30,40}; 在堆當(dāng)中初始化數(shù)組
        3.把初始化的地址賦值給了ages
        
        int[] ages=new int[] {10,20,30};
        
        System.out.println(ages);//[I@7852e922 打印出來的是一個內(nèi)存地址
        
        4.在堆中初始化了一個新的數(shù)組,把數(shù)組的地址重新賦值給了ages
        ages=new int[] {40,50,60};
image.png

GC:垃圾回收機(jī)制
Java是自動回收機(jī)制:
程序員不需要再動手控制內(nèi)存的釋放
當(dāng)JVM發(fā)現(xiàn)內(nèi)存資源緊張的時候,會自動的清理無用的對象


對象堆的內(nèi)存分析

NullPointerException  報錯,空指針
空指針

基本數(shù)據(jù)類型在堆中的初始值


基本數(shù)據(jù)類型在棧里面不初始化是不能使用的


基本數(shù)據(jù)類型與引用數(shù)據(jù)類型


引用數(shù)據(jù)類型,在棧中存放的是一個堆中地址,地址像一條指針一樣指向堆中的詳細(xì)信息
堆中存放的是詳細(xì)信息


基本數(shù)據(jù)類型:值傳遞
基本數(shù)據(jù)類型它是屬于值傳遞(傳遞 的是一個具體值)
(函數(shù)/方法中的數(shù)據(jù))直接存放在棧中


引用數(shù)據(jù)類型地址傳遞

    // 功能:交換一個數(shù)組的第一個元素和第二個元素
    static void swap(int[] nums) {

        // 1.把數(shù)組的第0個位置取出來,放到一個臨時的變量當(dāng)中 10
        int temp = nums[0];
        // 2.把第1個位置的值取出來,賦值給第0個位置
        nums[0] = nums[1];
        // 3.把臨時變量的值賦值給第1個位置
        nums[1] = temp;
        System.out.println("nums={"+nums[0]+","+nums[1]+"};");
    }

    public static void main(String[] args) {

        // {10,20} {20,10}
        int[] nums = new int[] { 10, 20 };
        swap(nums);
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 從三月份找實習(xí)到現(xiàn)在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂視家的研發(fā)崗...
    時芥藍(lán)閱讀 42,899評論 11 349
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對...
    cosWriter閱讀 11,694評論 1 32
  • 下午接了你放學(xué)回家,依舊是你寫作業(yè),媽媽做飯,我們在規(guī)定的時間內(nèi)完成了全部作業(yè),媽媽表揚(yáng)了你。接下來媽媽開...
    梓浩媽媽閱讀 207評論 0 0
  • 獲多福16K 、 綠盒120色 用時:13小時 公眾號:Anby彩鉛
    Anby群閱讀 1,216評論 2 34
  • 自從日更以來,逐漸發(fā)現(xiàn)自己每天寫的,連流水賬都算不上,壓根不成文啊~~ 然而,還是要硬著頭皮繼續(xù)更,不是么? 每天...
    9837fd914689閱讀 770評論 0 0

友情鏈接更多精彩內(nèi)容