構造方法:
概述:
1.構造方法:構造函數,構造器,Constructor
2.作用:用於給對象中的成員變量賦值。
3.構造方法的格式:
修飾符 類名{
方法體
}
4.構造方法格式的說明:
1.構造方法的方法名稱,必須和類名一模一樣,連大小寫都一樣。
2.構造方法沒有返回值類型,連void也沒有
3.構造方法沒有return語句, 如果一定需要return語句,就寫一個return
構造方法其他說明:
構造方法不需要手動調用,由JVM虛擬機在 創建對象的時候自動調用
對象本身不能調用構造方法
構造方法只能調用一次
class Demo01_構造方法 { public static void main(String[] args) { Person p = new Person(); System.out.println(p.getName() + "..." + p.getAge()); //Person p2 = new Person();這是創建第二個對象;同一個對象只能調用一次構造方法 //p.Person();編譯報錯,構造方法不能通過對象名稱手動調用 } } class Person { private String name; private int age; public Person() { name = "張三瘋"; age = 123; } public void setName(String name) { this.name = name; } public String getName(){ return name; } public void setAge(int age) { this.age = age; } public int getAge() { return age; } }
構造方法的注意事項:構造方法分為有參構造方法和無參構造方法
如果類中沒有手動的寫構造方法,那么系統會默認提供一個構造方法(無參構造方法)。
如果類中已經手動寫了構造方法,那么系統不會再默認提供構造方法了。
構造方法可以重載
class Demo02_構造方法的注意事項 { public static void main(String[] args) { Person p1 = new Person("張三瘋", 123); System.out.println(p1.getName() + "..." + p1.getAge()); Person p2 = new Person("李四光", 124); System.out.println(p2.getName() + "..." + p2.getAge()); Person p3 = new Person(); System.out.println(p3.getName() + "..." + p3.getAge()); } } class Person { private String name; private int age; /* public Person() { System.out.println("自己定義的空參構造執行了!!!"); } */ public Person() { } public Person(String name, int age) { this.name = name; this.age = age; } public void setName(String name) { this.name = name; } public String getName(){ return name; } public void setAge(int age) { this.age = age; } public int getAge() { return age; } }
構造方法和set方法的比較:
1.構造方法和set方法都是用來給成員變量賦值。
區別:構造方法是在創建對象的同時,由jvm自動調用執行,用於給屬性賦值,只能執行一次。
Set方法是在創建對象之后,由對象手動調用,用於給屬性修改值,可以調用多次。
靜態:
靜態的作用就是將程序中多次要用的變量用static修飾,這樣這個變量就成了一個常量,以后要使用這個變量時,直接調用被staitc修飾的那個就好了,這樣子節省了內存空間,而且便於修改,維護。
靜態的加載時機:隨着類被加載到內存中去,就直接在靜態區開辟了存儲靜態變量的內存空間
靜態變量優先於對象而存在。
靜態變量被所有該類對象所共享。
靜態變量可以被類名直接打點調用,不需要創建對象
靜態方法:在方法的聲明上,加上static關鍵字的方法,就是靜態方法。
靜態方法不能訪問非靜態的變量:原因:靜態方法在靜態方法區,非靜態變量在普通變量區,靜態方法區里找不到非靜態變量,所以不能訪問。同理,靜態方法不能訪問非靜態方法。
靜態變量和非靜態變量的區別:
概念上,所屬不同:
非靜態變量屬於對象
靜態變量屬於類,類對象。
內存空間不同,存儲位置不同:
非靜態變量屬於對象,所以存儲在堆內存中,靜態變量屬於類,存儲在方法區的靜態區中。
內存時間不同,聲明周期不同:
非靜態變量屬於周期,所以生命周期和對象相同,隨着對象的創建而存在,隨着對象的消失而消失。
靜態變量屬於類,所以生命周期和類相同,隨着類的加載而存在,隨着類的消失而消失。
訪問方式不同:非靜態變量只能通過對象來訪問,靜態變量可以通過類名打點來調用,也可以通過對象來調用。