1. 程式人生 > >Java碼農進階之路~構造方法&靜態與成員變數及方法

Java碼農進階之路~構造方法&靜態與成員變數及方法

一 構造方法

當你在這個類中沒有提供無參的構造方法的時候,系統會在你建立物件的時候,也會呼叫無參的構造,而這個無參方法,系統會幫你提供一個.

如果你只是提供了有參的構造方法,那麼系統將不再給你提供 無參構造方法了

建議:寫類的時候 ,無參,有參的構造方法都寫上以保證不會出錯.

二 靜態變數和成員變數

靜態變數(相當於一個共享的變數 每個物件都能訪問到)

使用關鍵詞 static 修飾

靜態變數(類變數)的呼叫

1.可以使用物件 直接呼叫(不建議)

2.使用類名直接呼叫(建議)

為什麼建議使用類名直接呼叫?

使用類名呼叫靜態變數 可以和 成員變數區分

直接使用類名呼叫更準確 有靜態變數時 物件還沒有建立

靜態變數的好處

節約記憶體(靜態變數 是一個共享變數)

舉例:

老師被所有學生共享

靜態變數和成員變數的區別:

1.所屬不同

靜態變數:屬於類的也叫類變數

成員變數:屬於物件的 也叫物件變數(例項變數)

2.在記憶體中所處的位置不同

靜態變數:在方法區的靜態區

成員變數:在堆區中

3.在記憶體中的載入時機不同(生命週期)

靜態變數:隨著類的載入而載入 隨著類的銷燬而銷燬(程式結束銷燬)

成員變數:隨著物件的建立而建立 隨著物件的銷燬而銷燬

4.呼叫方法不同

靜態變數:物件名 和 類名(推薦)

成員變數:只能使用 物件名

public class Demo03 {
	public static void main(String[] args) {
		AVGirl girl1 = new AVGirl();
		girl1.name = "蒼老師";
		AVGirl.country = "japan";
		
		AVGirl girl2 = new AVGirl();
		girl2.name = "小澤老師";
		girl1.sayHi();
		girl2.sayHi();
	}
}
class AVGirl {
	 String name;//姓名
	 static String country;//國籍
	 
	 // 思考: 構造方法能用private 修飾?可以 (特殊用途)
	 public void sayHi() {
		 System.out.println("我的名字是" + name + ", 國籍是" + country);
	 }
}
物件載入到記憶體中的表現步驟:

1.載入有main方法 類的class檔案到 方法區中

2.main方法 入棧(需要建立AVGirl物件)

3.先把AVGirl.class載入到 方法區中

4.堆記憶體中 開闢空間 建立 AVGirl 的物件

5.賦值方法入棧 出棧

6.main方法執行完畢 出棧

7.程式結束



三 靜態方法和成員方法

靜態方法:隨著類的載入而載入(跟靜態變數一樣)(類方法)

靜態方法的執行 跟 成員方法一樣 入棧和出棧

靜態方法中不能使用成員變數

(靜態方法載入的時候還沒有物件)

簡單記 :

靜態的只能調靜態的

成員的既能呼叫成員的 也可以呼叫靜態的

四 解析main函式

public 需要java虛擬機器jvm

呼叫main方法的hi後 需要最高的許可權

static 呼叫靜態方法 是不需要建立物件

main 不是關鍵詞 當程式執行時,JVM只會呼叫main函式 使用類名呼叫 一個叫main的函式

String[] args 原來是用來 接收鍵盤輸入的字串

(可以使用 java 和 java 指令 測試)

public class Demo05 {
	public static void main(String[] args) {
		//獲取陣列的長度
		System.out.println(args.length); // 0
		//遍歷陣列
		for (int i = 0; i < args.length; i++) {
			System.out.println(args[i]);
		}
	}
}