java中有關構造方法中的輸出
有關構造方法中的輸出
在構造方法中的System.out.println是怎麼運行的呢?下面讓我們一起來看一下。
構造方法中的System.out.println:
先來看一個例子
package testasdd; public class Abcdefg { String name; int age; Abcdefg(String namel,int agel){ name=namel; age=agel; System.out.println("我可謝謝你瞭"); } void bank() { System.out.println("可以的"); } public static void main(String[] args) { // TODO Auto-generated method stub Abcdefg a= new Abcdefg("滑板", 22); String name=a.name; int age=a.age; System.out.println("我是"+name+"玩瞭"+age); a.bank(); } }
輸出如下:
我可謝謝你瞭
我是滑板玩瞭22
可以的
為什麼構造方法中的輸出也在控制臺輸出瞭呢?
因為構造方法在類被實例化的時候會被調用。
也就是在我們,新鍵一個對象的時候構造方法會被調用因此其中的System.out.println會在創建對象的時候被調用輸出。
這就是為什麼我們明明沒有有關他的語句卻有這句輸出的原因瞭。
java中構造方法的作用
初學Java的構造方法時,根本不能理解構造方法有什麼用,自己寫程序的時候也從來沒有用過。於是剛開始我寫的程序是這樣的:
package test3; public class Student { private String name; private long ID; private double score; public String getName() { return name; } public void setName(String name) { this.name = name; } public long getID() { return ID; } public void setID(long iD) { ID = iD; } public double getScore() { return score; } public void setScore(double score) { this.score = score; } public static void main(String[] args) { Student s = new Student(); s.setName("張三"); s.setID(170316); s.setScore(86.0); System.out.println("學號為" + s.getID + "的" + s.getName() + "的成績為" + s.getScore + "分。"); } }
然後我發現,這樣寫程序有弊端。就是比如我要登記學生的基本情況,有姓名、學號、年級班級、成績等等好多情況,如果有很多屬性,同時實例化瞭好多對象,我可能就會忘記忘記初始化一些屬性;同時,這樣還需要寫許多get和set方法,雖然可以由eclipse自動生成,但還是顯得代碼很冗長,不便於閱讀。這個時候就顯示出構造方法的重要性瞭。
構造方法的主要作用就是創建對象。
構造方法分為有參數和沒有參數兩種。有參數的構造方法主要就是用於對創建出來的對象進行初始化,比如下邊這個例子:
package test3; public class Test_Constructor1 { private String name; private String gender; private long ID; private long birthday; Test_Constructor1(String name, String gender, long ID, long birthday) { this.name = name; this.gender = gender; this.ID = ID; this.birthday = birthday; } public static void main(String[] args) { Test_Constructor1 s = new Test_Constructor1("Lily", "女", 100001, 200000226); System.out.println("姓名:" + s.name + " 性別:" + s.gender + " 學號:" + s.ID + " 生日:" + s.birthday); } }
在控制臺的輸出結果如下:
這樣在new一個對象出來的時候,就對它進行瞭初始化,避免瞭某些屬性忘記初始化的問題;同時可以看出代碼長度遠小於上一個例子,提高瞭程序的可閱讀性。
另一種是沒有參數的構造方法,又叫缺省構造方法。其實,你的類如果沒有定義任何構造方法,Java的編譯器會配上一個自動缺省構造方法,這個構造方法是空的,不做任何事情,隻是為瞭滿足編譯需要。或者,你也可以自己寫一個空的構造方法,在裡邊對一些屬性賦值,或者執行一些其他操作,比如下邊這個例子:
package test3; public class Test_Constructor2 { private int i; Test_Constructor2() { i = 5; System.out.println("i的值是" + i); } public static void main(String[] args) { Test_Constructor2 s = new Test_Constructor2(); } }
在控制臺的輸出結果如下:
沒有參數的構造方法創建對象時也會被調用。創建對象時,首先變量中的所有變量會得到零值,然後執行定義初始化,最後執行構造方法。
其實,構造方法的主要作用就是為對象成員變量賦初始值,總是與new運算符一起使用在創建對象的語句中——也就是說,隻要你new一個對象出來,就會相應地調用這個類的構造方法。有參數的構造方法可以對對象進行初始化,但建議寫瞭有參的構造方法後再寫一個無參的空的構造方法,便於創建一個對象而不給它的成員變量賦初值。要註意,自己寫瞭有參的構造方法,編譯器是不會再補充一個缺省構造方法的。
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- 一篇文章帶你瞭解JAVA結構化編程詳情
- java System類和Arrays類詳解
- 一文帶你瞭解Java中的Object類及類中方法
- 一篇文章帶你深入瞭解Java對象與Java類
- 手把手帶你粗略瞭解Java–類和對象