java自學之路-----構造函數以及static的簡單用法

構造函數:

創建對象時調用,所有類都有構造函數,目的是爲了給對象進行初始化,可以有多個構造函數,以重載的形式定義;

類中不定義構造函數的話,該類會產生一個默認的空參數構造函數;如果定義的話默認的構造函數就消失了;

構造函數---對象創建會調用相應的構造函數進行初始化,有且僅調用一次,

一般函數---對象創建後,需要函數功能才調用,可以無限調用;

一般函數不可直接調用構造函數,構造函數內有return語句。 


static:

特點{

1.修飾類成員

2.修飾的成員被所有對象共享

3.優先於對象存在,加載類的時候,static成員便存在了

4.調用的時候有兩種方式,一種是對象調用,另一種是類名調用

5.修飾的爲共享數據,對象中存儲的是特有對象

6.只要變量是對象所共有的就可用static修飾

7.如果方法不需要調用非靜態成員就可定義爲靜態

8.類不封裝特有數據,可以把方法設爲static,該類稱工具類,不需要創建對象就能調用。爲了阻止其他程序創建該對象,可將該構造函數私有化}


成員變量與靜態變量的區別{

1.生命週期不同,成員變量跟着對象存在,消失;靜態變量跟着類

2.調用方式,成員變量只能通過對象調用

3.存儲位置不同,成員變量時在堆中的對象裏面;靜態變量在方法區的靜態區中}


注意{

由於靜態成員跟隨着類,還沒有對象的時候就可以操作靜態成員

1.靜態方法只能訪問靜態成員,非靜態方法可以訪問靜態和非靜態

2.靜態方法中不可有this和super

}


成員變量與局部變量重名時,用this來調用成員變量


this可用來在構造函數中調用其他構造函數,但必須爲構造函數的第一條語句

靜態代碼塊只在加載類的時候執行一次,構造代碼塊創建一次對象執行一次


public static void main(String【】 args)

1.格式是固定的,只有args可更換,爲了讓jvm識別;

2.訪問權限必須最大

3.static 爲了不創建對象直接地執行main方法

4.主函數沒有具體返回值

5.main一個被jvm識別的固定名字

6.String[] args:這是主函數的參數列表,是一個數組類型的參數,而且元素都是字符串類型


分析下面程序在內存中完成的動作

class Person{
		private String name = null;
		private int age = 0;
		public static String country = "CN"
		Person(String name){
			this.name = name
		}
		Person(String name,int age){
			this(name);
			this.age = age;
		}	
		
		public void print(){
			System.out.println(this.name + "  " + this.age);
		}	
}

class Demo{
		public static void main(String[] args){
			Person p1 = new Person("aa", 20);
			Person p2 = new Person("bb", 21);		
 }}
1.main函數進棧,存儲變量p1 2.在方法區加載Person類,在靜態區存儲country的值 3.new Person("aa", 20)堆中分配空間給第一個new 4.調用Person(String name,int age),構造函數進棧 5.this(name)再次調用另一個構造函數,Person(String name)進棧 6.將參數aa賦值給堆中對象的變量name   7.第5步的構造函數出棧 8.將參數20賦值給堆中對象的變量age 9.第4步的構造函數出棧 10.把該對象地址賦值給p1.11.重複3到10步驟 12.main函數出棧


該程序p1和p2共享country的值,構造函數使用this是由於能在局部變量找到就不會去尋找成員變量

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