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
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]);
}
}
}