java中有關(guān)構(gòu)造方法中的輸出
有關(guān)構(gòu)造方法中的輸出
在構(gòu)造方法中的System.out.println是怎么運(yùn)行的呢?下面讓我們一起來看一下。
構(gòu)造方法中的System.out.println:
先來看一個(gè)例子
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
可以的
為什么構(gòu)造方法中的輸出也在控制臺輸出了呢?
因?yàn)闃?gòu)造方法在類被實(shí)例化的時(shí)候會被調(diào)用。
也就是在我們,新鍵一個(gè)對象的時(shí)候構(gòu)造方法會被調(diào)用因此其中的System.out.println會在創(chuàng)建對象的時(shí)候被調(diào)用輸出。
這就是為什么我們明明沒有有關(guān)他的語句卻有這句輸出的原因了。
java中構(gòu)造方法的作用
初學(xué)Java的構(gòu)造方法時(shí),根本不能理解構(gòu)造方法有什么用,自己寫程序的時(shí)候也從來沒有用過。于是剛開始我寫的程序是這樣的:
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("學(xué)號為" + s.getID + "的" + s.getName() + "的成績?yōu)? + s.getScore + "分。"); } }
然后我發(fā)現(xiàn),這樣寫程序有弊端。就是比如我要登記學(xué)生的基本情況,有姓名、學(xué)號、年級班級、成績等等好多情況,如果有很多屬性,同時(shí)實(shí)例化了好多對象,我可能就會忘記忘記初始化一些屬性;同時(shí),這樣還需要寫許多get和set方法,雖然可以由eclipse自動(dòng)生成,但還是顯得代碼很冗長,不便于閱讀。這個(gè)時(shí)候就顯示出構(gòu)造方法的重要性了。
構(gòu)造方法的主要作用就是創(chuàng)建對象。
構(gòu)造方法分為有參數(shù)和沒有參數(shù)兩種。有參數(shù)的構(gòu)造方法主要就是用于對創(chuàng)建出來的對象進(jìn)行初始化,比如下邊這個(gè)例子:
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 + " 學(xué)號:" + s.ID + " 生日:" + s.birthday); } }
在控制臺的輸出結(jié)果如下:
這樣在new一個(gè)對象出來的時(shí)候,就對它進(jìn)行了初始化,避免了某些屬性忘記初始化的問題;同時(shí)可以看出代碼長度遠(yuǎn)小于上一個(gè)例子,提高了程序的可閱讀性。
另一種是沒有參數(shù)的構(gòu)造方法,又叫缺省構(gòu)造方法。其實(shí),你的類如果沒有定義任何構(gòu)造方法,Java的編譯器會配上一個(gè)自動(dòng)缺省構(gòu)造方法,這個(gè)構(gòu)造方法是空的,不做任何事情,只是為了滿足編譯需要。或者,你也可以自己寫一個(gè)空的構(gòu)造方法,在里邊對一些屬性賦值,或者執(zhí)行一些其他操作,比如下邊這個(gè)例子:
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(); } }
在控制臺的輸出結(jié)果如下:
沒有參數(shù)的構(gòu)造方法創(chuàng)建對象時(shí)也會被調(diào)用。創(chuàng)建對象時(shí),首先變量中的所有變量會得到零值,然后執(zhí)行定義初始化,最后執(zhí)行構(gòu)造方法。
其實(shí),構(gòu)造方法的主要作用就是為對象成員變量賦初始值,總是與new運(yùn)算符一起使用在創(chuàng)建對象的語句中——也就是說,只要你new一個(gè)對象出來,就會相應(yīng)地調(diào)用這個(gè)類的構(gòu)造方法。有參數(shù)的構(gòu)造方法可以對對象進(jìn)行初始化,但建議寫了有參的構(gòu)造方法后再寫一個(gè)無參的空的構(gòu)造方法,便于創(chuàng)建一個(gè)對象而不給它的成員變量賦初值。要注意,自己寫了有參的構(gòu)造方法,編譯器是不會再補(bǔ)充一個(gè)缺省構(gòu)造方法的。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- Java基礎(chǔ)學(xué)習(xí)之構(gòu)造方法詳解
- java線程組構(gòu)造方法源碼解析
- 詳解Java的構(gòu)造方法及類的初始化
- 深入探究Java線程的創(chuàng)建與構(gòu)造方法
- java中構(gòu)造方法及this關(guān)鍵字的用法實(shí)例詳解(超詳細(xì))
- Java字節(jié)緩存流的構(gòu)造方法之文件IO流
- Java構(gòu)造方法和方法重載詳解
- Java 構(gòu)造方法的使用詳解
- Java構(gòu)造方法 super 及自定義異常throw合集詳解用法
- java構(gòu)造器 默認(rèn)構(gòu)造方法及參數(shù)化構(gòu)造方法
- Java構(gòu)造方法有什么作用?
相關(guān)文章
詳解MyBatis如何在大數(shù)據(jù)量下使用流式查詢進(jìn)行數(shù)據(jù)同步
通常的數(shù)據(jù)同步中,如果數(shù)據(jù)量比較少的話可以直接全量同步,但是如果數(shù)據(jù)量很大的話,全量同步需要大量的內(nèi)存,所以本文為大家介紹了MyBatis使用流式查詢實(shí)現(xiàn)數(shù)據(jù)同步的方法,希望對大家有所幫助2023-05-05簡單講解Java設(shè)計(jì)模式編程中的單一職責(zé)原則
這篇文章主要介紹了Java設(shè)計(jì)模式編程中的單一職責(zé)原則,這在團(tuán)隊(duì)開發(fā)編寫接口時(shí)經(jīng)常使用這樣的約定,需要的朋友可以參考下2016-02-02SpringMVC4.3?HandlerExceptionResolver異常處理源碼解析
這篇文章主要為大家介紹了SpringMVC4.3?HandlerExceptionResolver異常處理源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪<BR>2023-09-09被遺忘的Java關(guān)鍵字transient的使用詳解
在 Java 中,transient 是一個(gè)關(guān)鍵字,用于指定一個(gè)類的字段(成員變量)在序列化時(shí)應(yīng)該被忽略。本文將通過示例為大家簡單講講transient的使用,需要的可以參考一下2023-04-04SpringBoot將項(xiàng)目打成war包步驟解析
這篇文章主要介紹了SpringBoot將項(xiàng)目打成war包步驟解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03Spring Security OAuth2集成短信驗(yàn)證碼登錄以及第三方登錄
這篇文章主要介紹了Spring Security OAuth2集成短信驗(yàn)證碼登錄以及第三方登錄,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-04-04移動(dòng)開發(fā)Spring Boot外置tomcat教程及解決方法
這篇文章主要介紹了移動(dòng)開發(fā)SpringBoot外置tomcat教程,需要的朋友可以參考下2017-11-11Java設(shè)計(jì)模式之構(gòu)建者模式知識總結(jié)
這幾天剛好在復(fù)習(xí)Java的設(shè)計(jì)模式,今天就給小伙伴們?nèi)婵偨Y(jié)一下開發(fā)中最常用的設(shè)計(jì)模式-建造者模式的相關(guān)知識,里面有很詳細(xì)的代碼示例及注釋哦,需要的朋友可以參考下2021-05-05