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