日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

有關(guān)于Java構(gòu)造器

瀏覽:121日期:2024-06-14 18:38:12
內(nèi)容: 關(guān)于Java構(gòu)造器作者:langm版權(quán)聲明:任何獲得Matrix授權(quán)的網(wǎng)站,轉(zhuǎn)載時請務(wù)必以超鏈接形式標(biāo)明文章原始出處和作者信息及本聲明作者:langm原文地址:http://www.matrix.org.cn/resource/article/44/44041.html關(guān)鍵詞: Java 構(gòu)造器 首先要注意的是Java的構(gòu)造器并不是函數(shù),所以他并不能被繼承,這在我們extends的時候?qū)懽宇惖臉?gòu)造器時比較的常見,即使子類構(gòu)造器參數(shù)和父類的完全一樣,我們也要寫super就是因為這個原因。 構(gòu)造器的修飾符比較的有限,僅僅只有public private protected這三個,其他的例如任何修飾符都不能對其使用,也就是說構(gòu)造器不允許被成名成抽象、同步、靜態(tài)等等訪問限制以外的形式。 因為構(gòu)造器不是函數(shù),所以它是沒有返回值的,也不允許有返回值。但是這里要說明一下,構(gòu)造器中允許存在return語句,但是return什么都不返回,如果你指定了返回值,雖然編譯器不會報出任何錯誤,但是JVM會認(rèn)為他是一個與構(gòu)造器同名的函數(shù)罷了,這樣就會出現(xiàn)一些莫名其妙的無法找到構(gòu)造器的錯誤,這里是要加倍注意的。 在我們extends一個子類的時候經(jīng)常會出現(xiàn)一些意想不到的問題,我在這里說一些和構(gòu)造器有關(guān)的。 首先說一下Java在構(gòu)造實例時的順序(不討論裝載類的過程) 構(gòu)造的粗略過程如下 1、分配對象空間,并將對象中成員初始化為0或者空,java不允許用戶操縱一個不定值的對象。2、執(zhí)行屬性值的顯式初始化(這里有一點變化,一會解釋,但大體是這樣的)3、執(zhí)行構(gòu)造器4、將變量關(guān)聯(lián)到堆中的對象上 介紹一下準(zhǔn)備知識,以備一會來詳細(xì)說明這個的流程 this() super()是你如果想用傳入當(dāng)前構(gòu)造器中的參數(shù)或者構(gòu)造器中的數(shù)據(jù)調(diào)用其他構(gòu)造器或者控制父類構(gòu)造器時使用的,在一個構(gòu)造器中你只能使用this()或者super()之中的一個,而且調(diào)用的位置只能在構(gòu)造器的第一行, 在子類中如果你希望調(diào)用父類的構(gòu)造器來初始化父類的部分,那就用合適的參數(shù)來調(diào)用super(),如果你用沒有參數(shù)的super()來調(diào)用父類的構(gòu)造器(同時也沒有使用this()來調(diào)用其他構(gòu)造器),父類缺省的構(gòu)造器會被調(diào)用,如果父類沒有缺省的構(gòu)造器,那編譯器就會報一個錯誤,注意此處,我們經(jīng)常在繼承父類的時候構(gòu)造器中并不寫和父類有關(guān)的內(nèi)容,此時如果父類沒有缺省構(gòu)造器,就會出現(xiàn)編譯器添加的缺省構(gòu)造器給你添麻煩的問題了哦。例如:Class b extends a{public b(){}}就沒有任何有關(guān)父類構(gòu)造器的信息,這時父類的缺省構(gòu)造器就會被調(diào)用。 舉個SL-275中的例子1 public class Manager extends Employee {2 private String department;34 public Manager(String name, double salary, String dept) {5 super(name, salary);6 department = dept;7 }8 public Manager(String n, String dept) {9 super(name);10 department = dept;11 }12 public Manager(String dept) { // 這里就沒有super(),編譯器會自動地添加一個空參數(shù)的缺省super構(gòu)造器,此時如果Employee類中沒有空參數(shù)的缺省構(gòu)造器,那就會導(dǎo)致一個編譯錯誤13 department = d;14 }15 } 你必須在構(gòu)造器的第一行放置super或者this構(gòu)造器,否則編譯器會自動地放一個空參數(shù)的super構(gòu)造器的,其他的構(gòu)造器也可以調(diào)用super或者this,調(diào)用成一個遞歸構(gòu)造鏈,最后的結(jié)果是父類的構(gòu)造器(可能有多級父類構(gòu)造器)始終在子類的構(gòu)造器之前執(zhí)行,遞歸的調(diào)用父類構(gòu)造器 在具體構(gòu)造類實例的過程中,上邊過程的第二步和第三步是有一些變化的,這里的順序是這樣的,分配了對象空間及對象成員初始化為默認(rèn)值之后,構(gòu)造器就遞歸的從繼承樹由根部向下調(diào)用,每個構(gòu)造器的執(zhí)行過程是這樣的:1、Bind構(gòu)造器的參數(shù)2、如果顯式的調(diào)用了this,那就遞歸調(diào)用this構(gòu)造器然后跳到步驟53、遞歸調(diào)用顯式或者隱式的父類構(gòu)造器,除了Object以外,因為它沒有父類4、執(zhí)行顯式的實例變量初始化(也就是上邊的流程中的第二步,調(diào)用返回以后執(zhí)行,這個步驟相當(dāng)于在父構(gòu)造器執(zhí)行后隱含執(zhí)行的,看樣子像一個特殊處理) 5、執(zhí)行構(gòu)造器的其它部分這里的步驟很重要哦!!!!! 從這個步驟中可以很明顯的發(fā)現(xiàn)這個實例初始化時的遞歸調(diào)用過程,估計看過這個你應(yīng)該能夠理解這個遞歸構(gòu)造鏈?zhǔn)窃趺礃踊厥铝恕? 這里還是給出SL-275中的一個例子,讓你充分理解一下這個遞歸的過程。public class Object {...public Object() {}...}public class Employee extends Object {private String name;private double salary = 15000.00;private Date birthDate;public Employee(String n, Date DoB) {// implicit super();name = n;birthDate = DoB;}public Employee(String n) {this(n, null);}}public class Manager extends Employee {private String department;public Manager(String n, String d) {super(n);department = d;}}在創(chuàng)建Manager('Joe Smith','Sales'):時,步驟如下0 basic initialization0.1 allocate memory for the complete Manager object0.2 initialize all instance variables to their default values (0 or null)1 call constructor: Manager('Joe Smith', 'Sales')1.1 bind constructor parameters: n='Joe Smith', d='Sales'1.2 no explicit this() call1.3 call super(n) for Employee(String)1.3.1 bind constructor parameters: n='Joe Smith'1.3.2 call this(n, null) for Employee(String, Date)1.3.2.1 bind constructor parameters: n='Joe Smith', DoB=null1.3.2.2 no explicit this() call1.3.2.3 call super() for Object()1.3.2.3.1 no binding necessary1.3.2.3.2 no this() call1.3.2.3.3 no super() call (Object is the root)1.3.2.3.4 no explicit variable initialization for Object1.3.2.3.5 no method body to call1.3.2.4 initialize explicit Employee variables: salary=15000.00;注意:在父構(gòu)造器返回后子類才會初始化實例變量的值。1.3.2.5 execute body: name='Joe Smith'; date=null;1.3.3 - 1.3.4 steps skipped1.3.5 execute body: no body in Employee(String)1.4 no explicit initializers for Manager1.5 execute body: department='Sales' 這個流程就說明了一切,這個步驟是要注意的。一會還有些內(nèi)容是要涉及到這里的。 寫在后邊的一些在使用構(gòu)造器中的注意事項。 一、構(gòu)造器中一定不要創(chuàng)建自身的實例,否則會造成調(diào)用棧溢出錯誤。這個規(guī)則也適用于對象的實例變量,如果對象中有自身的引用,這個引用一定不能在定義中或者構(gòu)造器中初始化。class a{ a _a = new a(); public a(){ _a = new a(); a _b = new a();}}以上三種情況都會造成棧溢出,呵呵,這樣會造成一個無窮遞歸的調(diào)用棧。二、如果父類是一個抽象類,那通過調(diào)用父類的構(gòu)造器,也可以將它初始化,并且初始化其中的數(shù)據(jù)。三、如果你要在構(gòu)造器中調(diào)用一個方法時,將該方法聲明為private。對于這個規(guī)則是需要一些說明的,假使你的父類構(gòu)造器中要調(diào)用一個非靜態(tài)方法,而這個方法不是private的又被子類所重載,這樣在實際創(chuàng)建子類的過程中遞歸調(diào)用到了父類的構(gòu)造器時,父類構(gòu)造器對這個方法的調(diào)用就會由于多態(tài)而實際上調(diào)用了子類的方法,當(dāng)這個子類方法需要用到子類中實例變量的時候,就會由于變量沒有初始化而出現(xiàn)異常(至于為什么子類中的實例變量沒有初始化可以參考上邊的實例初始化過程),這是Java不想看到的情況。而當(dāng)父類構(gòu)造器中調(diào)用的方法是一個private方法時,多態(tài)就不會出現(xiàn),也就不會出現(xiàn)父類構(gòu)造器調(diào)用子類方法的情況,這樣可以保證父類始終調(diào)用自己的方法,即使這個方法中調(diào)用了父類中的實例變量也不會出現(xiàn)變量未初始化的情況(變量初始化總是在當(dāng)前類構(gòu)造器主體執(zhí)行之前進(jìn)行)。 這就是我個人對構(gòu)造器和實例初始化(不包括類載入部分)的一點歸納,歡迎大家指正和補充。 Java, java, J2SE, j2se, J2EE, j2ee, J2ME, j2me, ejb, ejb3, JBOSS, jboss, spring, hibernate, jdo, struts, webwork, ajax, AJAX, mysql, MySQL, Oracle, Weblogic, Websphere, scjp, scjd 關(guān)于Java構(gòu)造器作者:langm版權(quán)聲明:任何獲得Matrix授權(quán)的網(wǎng)站,轉(zhuǎn)載時請務(wù)必以超鏈接形式標(biāo)明文章原始出處和作者信息及本
標(biāo)簽: Java
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产精品一站二站| 四虎精品永久免费| 一二三区精品| 久久国产99| 亚洲精品欧洲| 免费在线成人网| 中文字幕一区二区av| 一区二区高清| 久久国产精品色av免费看| 欧美一区激情| 久久久精品区| 日韩精品91| 尤物在线精品| 日本综合精品一区| 欧美激情福利| 国产成人精品一区二区三区视频| 国产一区二区三区黄网站| 国产拍在线视频| 天堂√中文最新版在线| 欧美+日本+国产+在线a∨观看| 91久久午夜| 日本不卡视频在线观看 | 日韩精品欧美激情一区二区| 久久久蜜桃一区二区人| 黄色精品网站| 日韩免费精品| 高清不卡一区| 国产亚洲精品v| 日韩不卡手机在线v区| 久久亚洲资源中文字| 99视频精品视频高清免费| 国产精品7m凸凹视频分类| 亚洲一区二区日韩| 国产精品美女午夜爽爽| 日韩欧美网址| 亚洲丝袜啪啪| 精品国产黄a∨片高清在线| 天堂日韩电影| 免费观看在线综合| 另类小说一区二区三区| 国产一区亚洲| 国产欧美大片| 亲子伦视频一区二区三区| 亚洲欧美专区| www在线观看黄色| 丝袜美腿亚洲色图| 国产乱子精品一区二区在线观看| 欧洲一区二区三区精品| 综合视频一区| 日韩国产一区二区三区| 中文字幕亚洲影视| 精品国产乱码久久久久久1区2匹| 今天的高清视频免费播放成人| 日韩一区精品| 亚洲精品福利电影| 日欧美一区二区| 欧美男人天堂| 日韩黄色在线观看| 99久久www免费| 国产香蕉精品| 99国产精品久久久久久久成人热| 日韩av影院| 在线日韩中文| 久久午夜影院| 日韩中文字幕| 美女亚洲一区| 精品国产不卡| 亚洲精品综合| 国产99久久久国产精品成人免费| 国产剧情在线观看一区| 99国产一区| 中文字幕高清在线播放| 日韩1区2区日韩1区2区| 红桃视频国产精品| 新版的欧美在线视频| 国产欧美丝祙| 日韩一级欧洲| 深夜视频一区二区| 麻豆国产精品一区二区三区| 中文字幕亚洲在线观看| 欧美日韩水蜜桃| 成人在线视频免费看| 亚洲精品乱码日韩| 欧美 日韩 国产精品免费观看| 精品成人18| 国产日产精品一区二区三区四区的观看方式 | av不卡在线看| 91日韩在线| 国产高清日韩| 国产亚洲久久| 日韩精品亚洲专区| 日韩一区欧美二区| 99国产精品久久久久久久| 五月激情久久| 中文一区一区三区高中清不卡免费| 国产精选一区| 91亚洲精品在看在线观看高清| 在线一区免费| 亚洲午夜在线| 另类中文字幕国产精品| 91亚洲一区| 青青草91视频| 日韩黄色av| 亚洲乱码一区| 蜜臀av亚洲一区中文字幕| 伊人成人网在线看| 蜜桃tv一区二区三区| 99tv成人| 日韩不卡视频在线观看| 日韩国产一区| 精品丝袜在线| 99精品在线观看| 欧美亚洲激情| 九色精品91| 91精品91| 91久久午夜| 不卡在线一区二区| 欧美.日韩.国产.一区.二区| 久久国产电影| 国产尤物精品| 夜夜嗨av一区二区三区网站四季av| 亚洲激情社区| 欧美专区一区二区三区| 99国产精品私拍| 伊人久久亚洲| 欧美一级一区| 麻豆91精品视频| 日本а中文在线天堂| 日韩三区在线| 精品1区2区3区4区| 免费看日韩精品| 天海翼亚洲一区二区三区| 亚洲精品自拍| 国产精品日韩精品中文字幕| 久久99久久久精品欧美| 高清精品久久| 亚洲福利国产| 亚洲最新av| 国产精品亲子伦av一区二区三区| 麻豆成人综合网| 欧洲av一区二区| 99国产成+人+综合+亚洲欧美| 综合激情视频| 国产精品欧美大片| 狠狠久久伊人| 国产综合欧美| 亚洲精品人人| 国产欧美丝祙| 丝袜美腿诱惑一区二区三区| 欧美理论视频| 日韩av二区在线播放| 国产96在线亚洲| 欧美一级精品| 日韩一区二区三区精品视频第3页| 国产精品资源| 久久久精品午夜少妇| 蜜臀av在线播放一区二区三区| 国产欧美激情| 99久久亚洲精品| 午夜视频一区二区在线观看| 国产精品xvideos88| 午夜精品成人av| 欧美日韩国产在线观看网站| 日韩精品一区二区三区av | 麻豆理论在线观看| 国产亚洲一级| 国产精品15p| 久久高清精品| 日韩不卡在线观看日韩不卡视频| 精品视频一二| 99国产一区| 久久免费视频66| 不卡中文字幕| 日本精品久久| 日韩在线免费| 日本成人在线视频网站| 亚洲伦乱视频| 日本成人在线一区| 日韩欧美在线中字| 亚洲欧美在线综合| 高潮一区二区| 日韩视频一二区| 色88888久久久久久影院| 蜜桃久久久久久| 在线人成日本视频| 青青草91久久久久久久久| 久久精品导航| 久久国产人妖系列| 久久久精品五月天| 国产欧美高清视频在线| 免费视频一区三区| 国产精品对白久久久久粗| 亚洲精品va| 色爱综合网欧美| 日韩精品导航| 黄色亚洲精品| 亚洲欧洲美洲av| 国产日韩一区| 免费一区二区视频| 91精品国产福利在线观看麻豆|