Java構造方法和靜态方法
構造方法
一個類 可以有多個構造函數。構造函數的主要作用 一是用來執行個體化該類。二是 讓該類執行個體化的時候執行哪些方法,初始化哪些屬性。
* 注意事項
1.如果你沒寫無參構造方法 系統會給你提供一個無參構造方法
2.如果隻寫了有參的構造方法 這時系統不再提供 無參構造方法
3.寫類的時候 建議 無參有參構造方法一起寫
public class Demo01 {
public static void main(String[] args) {
Car car = new Car();
car.name = "保時捷";
car.num = ;
car.sayHi();
//使用有參構造方法建立對象
Car car2 = new Car("比亞迪", F10);
System.out.println(car2.name + " " + car2.num);
//在指派成員變量時 使用哪種方法好? set方法 和 有參構造方法
//具體看情況 大多使用set方法
}
}
class Car{
String name;
int num;
// 構造方法的重載:隻跟參數有關
//無參 構造方法
public Car() {
System.out.println("我是無參的構造方法");
}
//有參 構造方法
public Car(String name, int num) {
this.name = name;
this.num = num;
System.out.println("我是有參的構造方法");
}
//當類中的成員變量 需要計算的時候 可以在構造方法中完成
public void sayHi() {
System.out.println(name + " " + num);
}
}
靜态方法
靜态方法是使用公共記憶體空間的,所有對象都可以直接引用,不需要建立對象再使用該方法.
* 靜态方法的調用
1.可以使用 對象 來調用
2.推薦 使用類名調用,因為隻要加載了.class 檔案 就加載了靜态變量 這時還沒有對象産生
* 靜态變量(屬于類 也叫類變量 ) 和 非靜态變量(屬于對象或者說對象變量) 的差別
1.調用方式不同
靜态變量 : 對象或類名去調用(推薦)
非靜态變量 :隻能使用對象來調用
2.記憶體中存在的位置不同
靜态變量 :方法區的靜态區
非靜态變量 :堆記憶體區
3.加載的時機不同
靜态變量 :随着類的加載而加載(不依賴對象而加載)
非靜态變量 :随着對象的建立而建立(依賴對象)
4.生命周期不同
靜态變量 :随着類的銷毀而銷毀
非靜态變量 :随着對象的銷毀而銷毀
- 靜态變量在記憶體中加載步驟
加載.class檔案(位元組碼檔案)到方法區
main方法入棧
建立類 的對象 先 加載 類.class 檔案 其檔案中 分為靜态區和非靜态區 這時初始化靜态變量 初值為 Null
建立對象(堆區開辟空間)
把對象的位址指派給對象 儲存
通關類名 修改 靜态類變量的值
調用方法入棧 執行語句
方法出棧
main出棧
那麼靜态方法和非靜态方法有什麼差別呢?
非靜态方法:
1.可以使用靜态變量和非靜态變量
2.可以使用靜态方法和非靜态方法
靜态方法:
1.隻能使用靜态變量
2.隻能使用靜态方法
靜态變量和靜态方法在記憶體中的表現
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0NXYFhGd192UvwVe0lmdhJ3ZvwFM38CXlZHbvN3cpR2Lc1TPB10QGtWUCpEMJ9CXsxWam9CXwADNvwVZ6l2c052bm9CXUJDT1wkNhVzLcRnbvZ2LcVnRtJmb1IjY2YFShZXUYpVd1kmYr50MZV3YyI2cKJDT29GRjBjUIF2LcRHelR3LcJzLctmch1mclRXY39DN4QTM0QDMxITOwEDM4EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)