小白學習Java第三天,JVM的內存劃分及方法中參數的傳遞

一、JVM的內存劃分

內存是計算機中的重要原件,臨時存儲區域,作用是運行程序。我們編寫的程序是存放在硬盤中的,在硬盤中的程 序是不會運行的,必須放進內存中才能運行,運行完畢後會清空內存。Java虛擬機要運行程序,必須要對內存進行空間的分配和管理。
爲了提高運算效率,就對空間進行了不同區域的劃分,因爲每一片區域都有特定的處理數據方式和內存管理方式,共分爲5部分:
棧:存儲的都是方法中的局部變量,方法運行一定要在棧中運行。
堆:存儲對象或者數組,new來創建的,都存儲在堆內存
方法區:存儲可以運行的class文件,包含方法的信息。
寄存器:給CPU使用,和我們開發無關。
本地方法棧:JVM在使用操作系統功能的時候使用,和我們開發無關。
程序執行過程示例圖:
在這裏插入圖片描述

二、方法中參數的傳遞實質

方法:就是將一個功能抽取出來,把代碼單獨定義在一個大括號內,形成一個單獨的功能。當我們需要這個功能的時候,就可以去調用。這樣即實現了代碼的複用性,也解決了代碼冗餘的現象。
定義格式:

修飾符 返回值類型 方法名(參數列表){ 
	代碼... 
	return 結果; }

定義格式解釋:
修飾符: 目前固定寫法 public static 。
返回值類型: 目前固定寫法 void ,其他返回值類型在後面的課程講解。
方法名:爲我們定義的方法起名,滿足標識符的規範,用來調用方法。
參數列表: 空車,有參兩種形式。
return:方法結束。因爲返回值類型是void,方法大括號內的return可以不寫。
舉例:

public static void methodName() { 
	System.out.println(“這是一個方法”);
}

方法重載:指在同一個類中,允許存在一個以上的同名方法,只要它們的參數列表不同即可,與修飾符和返回值類型無關。參數列表:個數不同,數據類型不同,順序不同。
重載方法調用:JVM通過方法的參數列表,調用不同的方法。
方法的參數爲基本類型時,傳遞的是數據值. 方法的參數爲引用類型時,傳遞的是地址值。
參數爲引用數據類型是值傳遞很好理解,可見下方實例圖所示。

public static void main(String[] args) { 
	int[] arr = getArray(); 
	for (int i = 0; i < arr.length; i++) {
 		System.out.println(arr[i]);
	}
 }
 public static int[] getArray() { 
 	int[] arr = { 1, 3, 5, 7, 9 }; 
 	//返回數組的地址,返回到調用者 
 	return arr; 
 }

在這裏插入圖片描述
重點說一下參數爲基本數據類型的值。
值傳遞:是指在調用函數時,將實際參數複製一份傳遞給函數,這樣在函數中修改參數時,不會影響到實際參數。其實,就是在說值傳遞時,只會改變形參,不會改變實參。
這裏,需要特別強調的是,千萬不要以爲傳遞的參數是值就是值傳遞,傳遞的是引用就是引用傳遞。也不要以爲傳遞的參數是基本數據類型就是值傳遞,傳遞的是對象就是引用傳遞。 這是大錯特錯的。以前的我,一直都是這樣認爲的,現在想來真是太天真了。判斷是值傳遞還是引用傳遞的標準,和傳遞參數的類型是沒有一毛錢關係的。
以下面試題爲例:

package com.cp.demo;
public class Method_Demo1 {
    public static void main(String[] args) {
        int a = 1;
        int b = 2;
        System.out.println(a); //1
        System.out.println(b); //2
        change(a, b);
        System.out.println(a); //1
        System.out.println(b); //2
    }
    public static void change(int a, int b) {
        a = a + b;
        b = b + a;
        System.out.println(a);
        System.out.println(b);
    }
}

結果爲:
1
2
3
5
1
2

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章