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

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

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

瀏覽:120日期:2024-06-14 18:38:12
內(nèi)容: 關(guān)于Java構(gòu)造器作者:langm版權(quán)聲明:任何獲得Matrix授權(quán)的網(wǎng)站,轉(zhuǎn)載時(shí)請務(wù)必以超鏈接形式標(biāo)明文章原始出處和作者信息及本聲明作者:langm原文地址:http://www.matrix.org.cn/resource/article/44/44041.html關(guān)鍵詞: Java 構(gòu)造器 首先要注意的是Java的構(gòu)造器并不是函數(shù),所以他并不能被繼承,這在我們extends的時(shí)候?qū)懽宇惖臉?gòu)造器時(shí)比較的常見,即使子類構(gòu)造器參數(shù)和父類的完全一樣,我們也要寫super就是因?yàn)檫@個(gè)原因。 構(gòu)造器的修飾符比較的有限,僅僅只有public private protected這三個(gè),其他的例如任何修飾符都不能對其使用,也就是說構(gòu)造器不允許被成名成抽象、同步、靜態(tài)等等訪問限制以外的形式。 因?yàn)闃?gòu)造器不是函數(shù),所以它是沒有返回值的,也不允許有返回值。但是這里要說明一下,構(gòu)造器中允許存在return語句,但是return什么都不返回,如果你指定了返回值,雖然編譯器不會報(bào)出任何錯(cuò)誤,但是JVM會認(rèn)為他是一個(gè)與構(gòu)造器同名的函數(shù)罷了,這樣就會出現(xiàn)一些莫名其妙的無法找到構(gòu)造器的錯(cuò)誤,這里是要加倍注意的。 在我們extends一個(gè)子類的時(shí)候經(jīng)常會出現(xiàn)一些意想不到的問題,我在這里說一些和構(gòu)造器有關(guān)的。 首先說一下Java在構(gòu)造實(shí)例時(shí)的順序(不討論裝載類的過程) 構(gòu)造的粗略過程如下 1、分配對象空間,并將對象中成員初始化為0或者空,java不允許用戶操縱一個(gè)不定值的對象。2、執(zhí)行屬性值的顯式初始化(這里有一點(diǎn)變化,一會解釋,但大體是這樣的)3、執(zhí)行構(gòu)造器4、將變量關(guān)聯(lián)到堆中的對象上 介紹一下準(zhǔn)備知識,以備一會來詳細(xì)說明這個(gè)的流程 this() super()是你如果想用傳入當(dāng)前構(gòu)造器中的參數(shù)或者構(gòu)造器中的數(shù)據(jù)調(diào)用其他構(gòu)造器或者控制父類構(gòu)造器時(shí)使用的,在一個(gè)構(gòu)造器中你只能使用this()或者super()之中的一個(gè),而且調(diào)用的位置只能在構(gòu)造器的第一行, 在子類中如果你希望調(diào)用父類的構(gòu)造器來初始化父類的部分,那就用合適的參數(shù)來調(diào)用super(),如果你用沒有參數(shù)的super()來調(diào)用父類的構(gòu)造器(同時(shí)也沒有使用this()來調(diào)用其他構(gòu)造器),父類缺省的構(gòu)造器會被調(diào)用,如果父類沒有缺省的構(gòu)造器,那編譯器就會報(bào)一個(gè)錯(cuò)誤,注意此處,我們經(jīng)常在繼承父類的時(shí)候構(gòu)造器中并不寫和父類有關(guān)的內(nèi)容,此時(shí)如果父類沒有缺省構(gòu)造器,就會出現(xiàn)編譯器添加的缺省構(gòu)造器給你添麻煩的問題了哦。例如:Class b extends a{public b(){}}就沒有任何有關(guān)父類構(gòu)造器的信息,這時(shí)父類的缺省構(gòu)造器就會被調(diào)用。 舉個(gè)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(),編譯器會自動地添加一個(gè)空參數(shù)的缺省super構(gòu)造器,此時(shí)如果Employee類中沒有空參數(shù)的缺省構(gòu)造器,那就會導(dǎo)致一個(gè)編譯錯(cuò)誤13 department = d;14 }15 } 你必須在構(gòu)造器的第一行放置super或者this構(gòu)造器,否則編譯器會自動地放一個(gè)空參數(shù)的super構(gòu)造器的,其他的構(gòu)造器也可以調(diào)用super或者this,調(diào)用成一個(gè)遞歸構(gòu)造鏈,最后的結(jié)果是父類的構(gòu)造器(可能有多級父類構(gòu)造器)始終在子類的構(gòu)造器之前執(zhí)行,遞歸的調(diào)用父類構(gòu)造器 在具體構(gòu)造類實(shí)例的過程中,上邊過程的第二步和第三步是有一些變化的,這里的順序是這樣的,分配了對象空間及對象成員初始化為默認(rèn)值之后,構(gòu)造器就遞歸的從繼承樹由根部向下調(diào)用,每個(gè)構(gòu)造器的執(zhí)行過程是這樣的:1、Bind構(gòu)造器的參數(shù)2、如果顯式的調(diào)用了this,那就遞歸調(diào)用this構(gòu)造器然后跳到步驟53、遞歸調(diào)用顯式或者隱式的父類構(gòu)造器,除了Object以外,因?yàn)樗鼪]有父類4、執(zhí)行顯式的實(shí)例變量初始化(也就是上邊的流程中的第二步,調(diào)用返回以后執(zhí)行,這個(gè)步驟相當(dāng)于在父構(gòu)造器執(zhí)行后隱含執(zhí)行的,看樣子像一個(gè)特殊處理) 5、執(zhí)行構(gòu)造器的其它部分這里的步驟很重要哦!!!!! 從這個(gè)步驟中可以很明顯的發(fā)現(xiàn)這個(gè)實(shí)例初始化時(shí)的遞歸調(diào)用過程,估計(jì)看過這個(gè)你應(yīng)該能夠理解這個(gè)遞歸構(gòu)造鏈?zhǔn)窃趺礃踊厥铝恕? 這里還是給出SL-275中的一個(gè)例子,讓你充分理解一下這個(gè)遞歸的過程。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'):時(shí),步驟如下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)造器返回后子類才會初始化實(shí)例變量的值。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' 這個(gè)流程就說明了一切,這個(gè)步驟是要注意的。一會還有些內(nèi)容是要涉及到這里的。 寫在后邊的一些在使用構(gòu)造器中的注意事項(xiàng)。 一、構(gòu)造器中一定不要創(chuàng)建自身的實(shí)例,否則會造成調(diào)用棧溢出錯(cuò)誤。這個(gè)規(guī)則也適用于對象的實(shí)例變量,如果對象中有自身的引用,這個(gè)引用一定不能在定義中或者構(gòu)造器中初始化。class a{ a _a = new a(); public a(){ _a = new a(); a _b = new a();}}以上三種情況都會造成棧溢出,呵呵,這樣會造成一個(gè)無窮遞歸的調(diào)用棧。二、如果父類是一個(gè)抽象類,那通過調(diào)用父類的構(gòu)造器,也可以將它初始化,并且初始化其中的數(shù)據(jù)。三、如果你要在構(gòu)造器中調(diào)用一個(gè)方法時(shí),將該方法聲明為private。對于這個(gè)規(guī)則是需要一些說明的,假使你的父類構(gòu)造器中要調(diào)用一個(gè)非靜態(tài)方法,而這個(gè)方法不是private的又被子類所重載,這樣在實(shí)際創(chuàng)建子類的過程中遞歸調(diào)用到了父類的構(gòu)造器時(shí),父類構(gòu)造器對這個(gè)方法的調(diào)用就會由于多態(tài)而實(shí)際上調(diào)用了子類的方法,當(dāng)這個(gè)子類方法需要用到子類中實(shí)例變量的時(shí)候,就會由于變量沒有初始化而出現(xiàn)異常(至于為什么子類中的實(shí)例變量沒有初始化可以參考上邊的實(shí)例初始化過程),這是Java不想看到的情況。而當(dāng)父類構(gòu)造器中調(diào)用的方法是一個(gè)private方法時(shí),多態(tài)就不會出現(xiàn),也就不會出現(xiàn)父類構(gòu)造器調(diào)用子類方法的情況,這樣可以保證父類始終調(diào)用自己的方法,即使這個(gè)方法中調(diào)用了父類中的實(shí)例變量也不會出現(xiàn)變量未初始化的情況(變量初始化總是在當(dāng)前類構(gòu)造器主體執(zhí)行之前進(jìn)行)。 這就是我個(gè)人對構(gòu)造器和實(shí)例初始化(不包括類載入部分)的一點(diǎn)歸納,歡迎大家指正和補(bǔ)充。 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)載時(shí)請務(wù)必以超鏈接形式標(biāo)明文章原始出處和作者信息及本
標(biāo)簽: Java
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲精品影视| 免费视频亚洲| 天堂成人国产精品一区| 欧美福利专区| 久久中文字幕av一区二区不卡| 精品一区二区三区的国产在线观看 | 福利一区在线| 国产成人精品一区二区免费看京 | 99re国产精品| 中国女人久久久| 国产农村妇女精品一区二区 | 日本精品在线中文字幕| 黄在线观看免费网站ktv| 日韩一区二区三区免费| 欧美日韩中文一区二区| 婷婷中文字幕一区| 亚洲成人精选| 女主播福利一区| 丝袜亚洲另类欧美| 亚久久调教视频| 国产劲爆久久| 色一区二区三区四区| 久久国产主播| 亚洲一区二区三区高清不卡| 亚洲色图综合| 91精品丝袜国产高跟在线| 国产精品高清一区二区| 精品久久久网| 亚洲成av人片一区二区密柚| 欧美日韩国产精品一区二区亚洲| 国产视频一区欧美| 日韩精品视频在线看| 亚洲精品乱码久久久久久蜜桃麻豆 | 欧美aa一级| 成人羞羞在线观看网站| 亚洲二区三区不卡| 亚洲3区在线| 精品视频高潮| 精品免费av在线| 天堂va蜜桃一区二区三区| 国产日韩中文在线中文字幕| 国产亚洲欧美日韩精品一区二区三区 | 亚洲精品一二三区区别| 伊人久久大香伊蕉在人线观看热v| 欧美亚洲专区| 国产欧洲在线| 天使萌一区二区三区免费观看| 国产日韩一区| 精品三级久久| 亚洲精品第一| 9999国产精品| 亚洲一区二区小说| 电影91久久久| 免费看日韩精品| 欧美国产另类| 欧美日韩国产一区精品一区| 欧美日韩午夜电影网| 日韩在线高清| 综合一区在线| 中文一区一区三区高中清不卡免费| 亚洲精品国产偷自在线观看| 欧美在线首页| 免费毛片在线不卡| 91精品国产自产观看在线| 欧美亚洲日本精品| 一区二区三区四区在线观看国产日韩| 国产精品99久久久久久董美香| 久久久夜夜夜| 久久国产生活片100| 国产在线欧美| 欧美a一区二区| 中文在线一区| 激情黄产视频在线免费观看| 最新国产精品视频| 青青久久av| 国产日韩欧美在线播放不卡| 欧美精选一区二区三区| 免费在线观看一区| 一区二区电影| 久久亚洲资源中文字| 久久亚洲精品伦理| 欧美精品日日操| 国产亚洲精aa在线看| 欧美在线亚洲| 国产精品99久久精品| 欧美在线91| 99亚洲视频| 欧美日韩视频免费观看| 欧美亚洲三级| 巨乳诱惑日韩免费av| 神马午夜久久| 久久影视三级福利片| 亚洲精品第一| 精品欧美久久| 国产精品极品| 日本一区福利在线| 亚洲激情中文| 成人午夜国产| 国产一区二区三区四区| 青青草国产精品亚洲专区无| 蜜臀精品久久久久久蜜臀| 久久一区二区中文字幕| 精品国产一级| 欧美极品一区二区三区| 日韩精彩视频在线观看| 免费成人在线影院| 欧美精品一区二区久久| 五月激情久久| 日本а中文在线天堂| 久久精品 人人爱| 亚洲精品一级| 亚州精品视频| 麻豆91精品| 久久性天堂网| 视频一区二区不卡| 亚洲欧美视频| 日韩视频一区二区三区在线播放免费观看| 97精品国产福利一区二区三区| 麻豆精品一区二区综合av| 日本va欧美va欧美va精品| 蜜臀久久久99精品久久久久久| 国模 一区 二区 三区| 国产欧洲在线| 蜜臀国产一区| 麻豆国产一区| 老司机精品视频网| 国产麻豆一区二区三区精品视频| 日本久久一区| 日韩av不卡一区二区| 91在线成人| 国产精品一区亚洲| 久久国产精品色av免费看| **爰片久久毛片| 欧美片网站免费| 国产精品成人一区二区网站软件| 国产精品久久久久毛片大屁完整版| 色婷婷成人网| 日韩在线网址| 日韩国产欧美在线视频| 蜜桃视频一区二区三区| 在线免费观看亚洲| 美国三级日本三级久久99| 亚洲欧洲av| 国产日韩在线观看视频| 国产精品激情电影| 欧美xxxx中国| 亚洲风情在线资源| 欧美日韩国产在线观看网站 | 日本精品影院| 中文另类视频| 欧美国产91| 免费看黄色91| 国产欧美91| 91亚洲成人| 亚洲一级特黄| 日本欧洲一区二区| 日本欧美韩国一区三区| 精品一级视频| 欧美日韩在线播放视频| 首页欧美精品中文字幕| 日韩激情一二三区| 九九99久久精品在免费线bt| 成人日韩在线观看| 性色av一区二区怡红| 丝袜美腿高跟呻吟高潮一区| 日本亚洲最大的色成网站www | 中文av在线全新| 91久久久久| 国产亚洲一区| 成人污污视频| 伊人影院久久| 日韩av一区二区在线影视| 精品国产日韩欧美精品国产欧美日韩一区二区三区 | 日韩在线观看一区| 亚洲自啪免费| 国产精品第一| 午夜国产欧美理论在线播放| 日韩精品国产精品| 成人亚洲一区| 99国产精品久久久久久久| 日韩精品社区| 色偷偷色偷偷色偷偷在线视频| 午夜免费一区| 国产午夜久久av| 久久青草久久| 日本欧美大码aⅴ在线播放| 国产一区精品福利| 亚洲综合不卡| 福利视频一区| 亚洲精一区二区三区| 欧美激情在线精品一区二区三区| 欧美亚洲国产精品久久| 国产欧美日韩在线观看视频| 一区二区三区视频免费观看| 欧美在线首页| 精品1区2区3区4区| 久久久国产精品网站| 丝袜美腿亚洲一区二区图片| 国产精品伦理久久久久久| 亚洲欧洲免费|