摘要:對于一個(gè)名為的外圍類和一個(gè)的內(nèi)部類,在編譯成功后,會出現(xiàn)這樣兩個(gè)文件和。
Java知識點(diǎn)總結(jié)(三個(gè)步驟)
@(Java知識點(diǎn)總結(jié))[Java, Java面向?qū)ο骫
[toc]
1-定義類 修飾符 訪問修飾符:public
protected
default
private
其他修飾符abstract:抽象類不能實(shí)例化,專門用于繼承的類
final:最終類不能被繼承
駝峰標(biāo)識- 每個(gè)單詞首字母大寫
extendsJava中的繼承是單一繼承
繼承關(guān)系中,會調(diào)用父類的構(gòu)造方法來構(gòu)造子類對象
當(dāng)父類存在無參構(gòu)造器時(shí),子類構(gòu)造器中 Super 關(guān)鍵字,因?yàn)樗鼤[式的調(diào)用父類的無參構(gòu)造器
public Son(){ //Super(); }
當(dāng)父類沒有無參構(gòu)造器時(shí),子類需要顯示的調(diào)用帶參構(gòu)造器,否則編譯不通過。
public Son(參數(shù)類型 參數(shù)名){ Super(參數(shù)名); this.參數(shù)名 = 參數(shù)名; }implements
一個(gè)類可以實(shí)現(xiàn)多個(gè)接口來扮演多個(gè)角色
多個(gè)接口之間用逗號隔開
內(nèi)部類定義:在一個(gè)類的內(nèi)部在定義一個(gè)類
內(nèi)部類可以用多個(gè)實(shí)例,每個(gè)實(shí)例都有自己的狀態(tài)信息,而且與其他外部對象的信息互相獨(dú)立
在單個(gè)外部類中,可以讓多個(gè)內(nèi)部類已不同的方式實(shí)現(xiàn)同一個(gè)接口,或者繼承同一個(gè)類
創(chuàng)建內(nèi)部類對象的時(shí)刻并不依賴于外部類對象的創(chuàng)建。
內(nèi)部類并沒有令人迷惑的"is-a"關(guān)系,他就是一個(gè)獨(dú)立的實(shí)體
內(nèi)部類提供更好的封裝,除了該外部類,其他類都不能訪問
內(nèi)部類是個(gè)編譯時(shí)的概念,一旦編譯成功后,它就與外部類屬于兩個(gè)完全不同的類(當(dāng)然他們之間還是有聯(lián)系的)。對于一個(gè)名為OuterClass的外圍類和一個(gè)InnerClass的內(nèi)部類,在編譯成功后,會出現(xiàn)這樣兩個(gè)class文件:OuterClass.class和OuterClass$InnerClass.class。
成員內(nèi)部類成員內(nèi)部類也是最普通的內(nèi)部類,它是外部類的一個(gè)成員,所以他是可以無限制的訪問外圍類的所有成員屬性和方法,盡管是private 的,但是外圍類要訪問內(nèi)部類的成員屬性和方法則需要通過內(nèi)部類的實(shí)例去訪問
在成員內(nèi)部類中要注意兩個(gè)點(diǎn):
成員內(nèi)部類中不能存在任何static的變量和方法
成員內(nèi)部類是依附外部類的,所以只有先創(chuàng)建了外部類才能創(chuàng)建內(nèi)部類
public class OuterClass {
private String name = "張三" ;
public void outPrint(){
System.out.println("我是外部類的方法");
}
// 內(nèi)部類
public class InnerClass{ // 可以聲明成public或private
//private static int id; //成員內(nèi)部類中不能存在任何static的變量和方法; public void innerPrint(){ //可以直接使用外部類的屬性和方法 System.out.println(name+"你好,我是內(nèi)部類"); outPrint(); }
}
public InnerClass getInnerClass(){
return new InnerClass();
}
public static void main(String[] args) {
//InnerClass innerClass = new InnerClass(); // 不能直接實(shí)例化內(nèi)部類對象 //通過外部類調(diào)用內(nèi)部類 InnerClass innerClass = new OuterClass().new InnerClass(); OuterClass.InnerClass innerClass2 = new OuterClass().new InnerClass(); //通過get方法來獲取內(nèi)部類(推薦) InnerClass innerClass3 = new OuterClass().getInnerClass(); innerClass3.innerPrint(); /*張三你好,我是內(nèi)部類 我是外部類的方法*/
}
}
局部內(nèi)部類局部內(nèi)部類是嵌套在方法和作用于域的,對于這個(gè)類的使用主要是應(yīng)用與解決比較復(fù)雜的問題想創(chuàng)建一個(gè)類來輔助我們的解決方案,到那時(shí)又不希望這個(gè)類是公共可用的,所以就產(chǎn)生了局部內(nèi)部類。
局部內(nèi)部類和成員內(nèi)部類一樣被編譯,只是它的作用域發(fā)生了改變,它只能在該方法和屬性中被使用,出了該方法和屬性就會失效
public class Outer { private String info = ",我是外部類的屬性"; public void test(final String name){ // 方法中的參數(shù)要被內(nèi)部類訪問,必需加上final修飾 // 定義于方法內(nèi)的類 class Inner{ public void print(){ System.out.println(name+info); //使用外部類的屬性和方法中的參數(shù) } } new Inner().print(); } public static void main(String[] args) { new Outer().test("張三"); /*張三,我是外部類的屬性*/ } }匿名內(nèi)部類
匿名內(nèi)部類:創(chuàng)建的對象沒有名字
匿名內(nèi)部類是不能加訪問修飾符
要使用匿名類,這個(gè)類是要先定義的
當(dāng)所在的方法的形參需要被內(nèi)部類里面使用時(shí),該形參必須為final修飾
(內(nèi)部類并不是直接調(diào)用方法傳進(jìn)來的參數(shù),而是內(nèi)部類將傳進(jìn)來的參數(shù)通過自己的構(gòu)造器備份到自己的內(nèi)部,外部類的方法修改)
public class Outer2 { public Inner2 getInner(final String name){ return new Inner2(){ private String info = ",我是內(nèi)部類屬性"; @Override public void print() { System.out.println(name+info); } public void test(){ System.out.println("我是接口中未定義的方法"); } }; } public static void main(String[] args) { Inner2 inner2 =new Outer2().getInner("張三"); inner2.print(); //inner2.test(); //不能調(diào)用接口中未定義的方法 } } interface Inner2{ void print(); }靜態(tài)內(nèi)部類
使用static修飾的內(nèi)部類我們稱之為靜態(tài)內(nèi)部類,不過我們更喜歡稱之為嵌套內(nèi)部類
靜態(tài)內(nèi)部類與非靜態(tài)內(nèi)部類之間存在一個(gè)最大的區(qū)別,我們知道非靜態(tài)內(nèi)部類在編譯完成之后會隱式地保存著一個(gè)一引用,該引用是指向創(chuàng)建它的外部類,但是靜態(tài)內(nèi)部類卻沒有。沒有這個(gè)引用就意味著:
它的創(chuàng)建不需要依賴外部類
它不能使用任何外部類的非static成員變量和方法
public class Outer3 {
private String info1 = "我是外部類非靜態(tài)屬性";
private static String info2 = "我是外部類靜態(tài)屬性";
private String getInfo1(){
return "我是外部類非靜態(tài)方法";
}
private static String getInfo2(){
return "我是外部類靜態(tài)方法";
}
//靜態(tài)內(nèi)部類
public static class Inner3{
public void print(){ //System.out.println(info1); System.out.println(info2); System.out.println(getInfo2()); }
}
public static void main(String[] args) {
new Inner3().print(); //不依賴于外部類,可以直接new 對象 /*我是外部類靜態(tài)屬性 我是外部類靜態(tài)方法*/
}
}
public class Test extends Outer4.inner{ //Test 類必須存在外部類作為形參的構(gòu)造方法,否則編譯不通過 Test(Outer4 out){ out.super(); } } class Outer4 { class inner{ } }2-創(chuàng)建對象 new 構(gòu)造器(構(gòu)造方法)
構(gòu)造方法定義:
名字跟類名完全一致
沒有返回類型
支持重載
可以通過this調(diào)用當(dāng)前類已有其他構(gòu)造器
隱式構(gòu)造器:如果一個(gè)類沒有寫任何構(gòu)造器,編譯器就會生成默認(rèn)無參構(gòu)造器
3-給對象發(fā)送消息文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/69150.html
摘要:知識點(diǎn)總結(jié)連接步驟及知識點(diǎn)總結(jié)連接數(shù)據(jù)庫步驟依序關(guān)閉使用的對象連接操作加載對應(yīng)驅(qū)動建立連接連接對象內(nèi)部包含了對象,是一個(gè)遠(yuǎn)程連接。比較耗時(shí)這是對象管理的一個(gè)要點(diǎn)真正開發(fā)中,為了提高效率,都會使用連接池來管理連接對象張柏芝女張三執(zhí)行結(jié)果 Java知識點(diǎn)總結(jié)(JDBC-連接步驟及CRUD) @(Java知識點(diǎn)總結(jié))[Java, JDBC] 連接數(shù)據(jù)庫步驟 showImg(https://s...
摘要:開發(fā)流程對于一個(gè)項(xiàng)目,最大的問題就是如何拆解為任務(wù),分配到合適的人手里,并在有限的時(shí)間內(nèi)完成它。但是我們把整個(gè)項(xiàng)目進(jìn)行拆解的話,每個(gè)星期進(jìn)行統(tǒng)計(jì)分析,就可以對癥下藥,提高開發(fā)效率。 開發(fā)流程 對于一個(gè)項(xiàng)目,最大的問題就是如何拆解為任務(wù),分配到合適的人手里,并在有限的時(shí)間內(nèi)完成它。 就像做建筑工程一樣,其實(shí)做IT也是可以量化的,可能有的人砌磚砌得慢一些,有的人快一些。 但是我們把整個(gè)項(xiàng)目...
摘要:入門,第一個(gè)這是一門很新的語言,年前后正式公布,算起來是比較年輕的編程語言了,更重要的是它是面向程序員的函數(shù)式編程語言,它的代碼運(yùn)行在之上。它通過編輯類工具,帶來了先進(jìn)的編輯體驗(yàn),增強(qiáng)了語言服務(wù)。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不覺已經(jīng)到來了,總結(jié)過去的 2017,相信小伙們一定有很多收獲...
摘要:入門,第一個(gè)這是一門很新的語言,年前后正式公布,算起來是比較年輕的編程語言了,更重要的是它是面向程序員的函數(shù)式編程語言,它的代碼運(yùn)行在之上。它通過編輯類工具,帶來了先進(jìn)的編輯體驗(yàn),增強(qiáng)了語言服務(wù)。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不覺已經(jīng)到來了,總結(jié)過去的 2017,相信小伙們一定有很多收獲...
閱讀 1342·2021-11-11 16:55
閱讀 1629·2021-10-08 10:16
閱讀 1266·2021-09-26 10:20
閱讀 3663·2021-09-01 10:47
閱讀 2521·2019-08-30 15:52
閱讀 2744·2019-08-30 13:18
閱讀 3261·2019-08-30 13:15
閱讀 1204·2019-08-30 10:55