Java 基礎(chǔ)

看慕課網(wǎng)Java第二季整理

訪問修飾符

訪問修飾符 本類 同包 子類 其他
private
默認(rèn)
protected
public

this

this關(guān)鍵字代表當(dāng)前對象

this.屬性 操作當(dāng)前對象的屬性
this.方法 操作當(dāng)前對象的方法

final

"最終的"

可以修飾類崭孤、方法胀溺、屬性厘唾、變量

  • 修飾類,則該類不允許被繼承
  • 修飾方法鹃操,則該方法不允許被覆蓋(重寫)
  • 修飾屬性韭寸,則該類的屬性不會進行飲食的初始化,類的初始化屬性必須有值荆隘,或在構(gòu)造方法中賦值恩伺。(只能選擇其一)
  • 修飾變量,則該變量的值只能賦一次值為椰拒,即變?yōu)槌A?/li>

super

在對象的內(nèi)部使用晶渠,可以代表父類對象

  • 訪問父類的屬性:super.屬性名 如super.age
  • 訪問父類的方法:super.方法名 如super.eat()
  • 如果子類的構(gòu)造方法中沒有顯式調(diào)用父類的構(gòu)造方法,則系統(tǒng)默認(rèn)調(diào)用父類無參的構(gòu)造方法
  • 如果顯式的調(diào)用構(gòu)造方法燃观,必須在子類的構(gòu)造方法的第一行褒脯。
  • 如果子類構(gòu)造方法中既沒有顯式調(diào)用父類的構(gòu)造方法,而父類有沒有無參的構(gòu)造方法缆毁,則編譯出錯番川。

內(nèi)部類

內(nèi)部類( Inner Class )就是定義在另外一個類里面的類。與之對應(yīng),包含內(nèi)部類的類被稱為外部類颁督。

內(nèi)部類的主要作用如下:

  1. 內(nèi)部類提供了更好的封裝践啄,可以把內(nèi)部類隱藏在外部類之內(nèi),不允許同一個包中的其他類訪問該類

  2. 內(nèi)部類的方法可以直接訪問外部類的所有數(shù)據(jù)沉御,包括私有的數(shù)據(jù)

  3. 內(nèi)部類所實現(xiàn)的功能使用外部類同樣可以實現(xiàn)屿讽,只是有時使用內(nèi)部類更方便

分類

  • 成員內(nèi)部類
  • 靜態(tài)內(nèi)部類
  • 方法內(nèi)部類
  • 匿名內(nèi)部類

成員內(nèi)部類

【示例】

//外部類HelloWorld
public class HelloWorld{
    
    //外部類的私有屬性name
    private String name = "imooc";
    
    //外部類的成員屬性
    int age = 20;
    
    //成員內(nèi)部類Inner
    public class Inner {
        String name = "愛慕課";
        //內(nèi)部類中的方法
        public void show() { 
            System.out.println("外部類中的name:" + HelloWorld.this.name);
            System.out.println("內(nèi)部類中的name:" + name );
            System.out.println("外部類中的age:" + age);
        }
    }
    
    //測試成員內(nèi)部類
    public static void main(String[] args) {
        
        //創(chuàng)建外部類的對象
        HelloWorld o = new HelloWorld (); 
        
        //創(chuàng)建內(nèi)部類的對象
        Inner inn =  o.new Inner();
        
        //調(diào)用內(nèi)部類對象的show方法
        inn.show();
    }
}

詳細(xì)解釋,慕課網(wǎng)文檔

靜態(tài)內(nèi)部類

【示例】

//外部類
public class HelloWorld {
    
    // 外部類中的靜態(tài)變量score
    private static int score = 84;
    
    // 創(chuàng)建靜態(tài)內(nèi)部類
    public   static       class SInner {
        // 內(nèi)部類中的變量score
        int score = 91;
        
        public void show() {
            System.out.println("訪問外部類中的score:" +  HelloWorld.score          );
            System.out.println("訪問內(nèi)部類中的score:" + score);
        }
    }
    // 測試靜態(tài)內(nèi)部類
    public static void main(String[] args) {
        // 直接創(chuàng)建內(nèi)部類的對象
        SInner si = new SInner();
        
        // 調(diào)用show方法
        si.show();
    }
}

詳細(xì)解釋吠裆,慕課網(wǎng)文檔

方法內(nèi)部類

方法內(nèi)部類就是內(nèi)部類定義在外部類的方法中伐谈,方法內(nèi)部類只在該方法的內(nèi)部可見,即只在該方法內(nèi)可以使用硫痰。

注意:由于方法內(nèi)部類不能在外部類的方法以外的地方使用衩婚,因此方法內(nèi)部類不能使用訪問控制符和 static 修飾符窜护。

【示例】

//外部類
public class HelloWorld {
    
    private String name = "愛慕課";
    
    // 外部類中的show方法
    public void show() { 
        // 定義方法內(nèi)部類
        class MInner {
            int score = 83;
            public int getScore() {
                return score + 10;
            }
        }
        // 創(chuàng)建方法內(nèi)部類的對象
        MInner mi = new MInner();
        
        // 調(diào)用內(nèi)部類的方法
        int newScore = mi.getScore();
        
        System.out.println("姓名:" + name + "\n加分后的成績:" + newScore);
    }
    
    // 測試方法內(nèi)部類
    public static void main(String[] args) {
        
        // 創(chuàng)建外部類的對象
        HelloWorld mo = new HelloWorld();
        
        // 調(diào)用外部類的方法
        mo.show();
    }
}

抽象類

使用abstract關(guān)鍵字修飾的類為抽象類效斑。

應(yīng)用場景

  • 父類只知道子類應(yīng)該包含怎樣的方法,但無法準(zhǔn)確知道這些子類如何實現(xiàn)這些方法柱徙。
  • 從多個具有相同特征的類中抽象出一個抽象類缓屠,以這個抽象類作為子類的模板,從而避免了子類設(shè)計的隨意性

作用

限制規(guī)定子類必須實現(xiàn)某些方法护侮,但不關(guān)注實現(xiàn)細(xì)節(jié)

使用規(guī)則

  • abstract定義抽象類
  • abstract定義抽象方法敌完,只有聲明,不需要實現(xiàn)
  • 包含抽象方法的類是抽象類
  • 抽象類中可以包含普通的方法羊初,也可以沒有抽象方法
  • 抽象類不能直接創(chuàng)建滨溉,可以定義引用變量

【示例】

public abstract class Telephone{
    public abstract void call();
    public abstract void message();
}

public class Cellphone extends Telphone{
    
    @Override
    public void call(){
        System.out.println("通過鍵盤打電話");
    }

    @Override
    public void message(){
        System.out.println("通過鍵盤發(fā)短信");
    }

}

public class Smartphone extends Telphone{
    
    @Override
    public void call(){
        System.out.println("通過語音打電話");
    }

    @Override
    public void message(){
        System.out.println("通過語音發(fā)短信");
    }

}

封裝

將類的某些信息隱藏在類內(nèi)部,不允許外部程序直接訪問长赞,而是通過該類提供的方法來實現(xiàn)對隱藏信息的操作和訪問晦攒。

繼承

  • 先初始化父類再初始化子類
  • 先執(zhí)行初始化對象中屬性,再執(zhí)行構(gòu)造方法中的初始化

多態(tài)

引用多態(tài)

  • 父類的引用可以指向本類的對象得哆。
  • 父類的引用可以指向子類的對象脯颜。

方法多態(tài)

  • 創(chuàng)建本類對象時,調(diào)用的方法為本類方法
  • 創(chuàng)建子類對象時贩据,調(diào)用的方法為本類重寫的方法或者繼承的方法

引用類型轉(zhuǎn)換

  • 向上類型轉(zhuǎn)換(隱式/自動類型轉(zhuǎn)換)栋操,是小類型到大類型的轉(zhuǎn)換
  • 向下類型轉(zhuǎn)換(強制類型轉(zhuǎn)換),是大類型到小類型
  • instanceof運算符饱亮,來解決引用對象的類型矾芙,避免類型轉(zhuǎn)換的安全性問題

【instanceof 示例】

//Dog,Cat類繼承Animal類
Dog dog=new Dog();
Animal animal=dog;//向上類型轉(zhuǎn)換 自動類型轉(zhuǎn)換
if(animal instanceof Dog){
    Dog dog2=(Dog)animal;
}else{
    System.out.println("無法進行類型轉(zhuǎn)換 Dog");
}
if(animal instanceof Cat){
    Cat cat=(Cat)animal;
}else{
    System.out.println("無法進行類型轉(zhuǎn)換 Cat");
}
//會打印出來 “無法進行類型轉(zhuǎn)換 Cat”

方法的重寫

重寫父類繼承的方法,調(diào)用方法是優(yōu)先調(diào)用子類的方法近上。

規(guī)則:返回值類型剔宪,方法名,參數(shù)類型及個數(shù)都相同。

接口 interface

類是一種具體實現(xiàn)體歼跟,而接口定義了某一批類所需要遵守的規(guī)范和媳,接口不關(guān)心這些類的內(nèi)部數(shù)據(jù),也不關(guān)心這些類里方法的實現(xiàn)細(xì)節(jié)哈街,而只規(guī)定這些類里必須提供某些方法留瞳。

接口定義的基本語法

[修飾符]  interface 接口名 [extends 父接口1,父接口2...]
{
    零個到多個常量定義
    零個到多個抽象方法的定義
}
  • 接口就是用來被繼承被實現(xiàn)的,修飾符一般建議用public
  • 注意:不能使用private和protected修飾接口骚秦。
  • 接口是抽象的她倘,abstract(不寫abstract系統(tǒng)會自動加上)

常量:接口中的屬性是常量,即使定義時不添加public static final 修飾符作箍,系統(tǒng)也會自動加上

方法:接口中的方法只能是抽象方法硬梁,即使定義時不添加public abstract修飾符,系統(tǒng)也會自動加上胞得。

[修飾符] class 類名 extends 父類 implements 接口1,接口2...{
    類體部分//如果繼承了抽象類荧止,需要實現(xiàn)繼承的抽象方法;要實現(xiàn)接口中的抽象方法
}

如果要繼承父類阶剑,繼承父類必須在實現(xiàn)接口之前

使用接口

一個類可以實現(xiàn)一個或多個接口跃巡,實現(xiàn)接口使用implements關(guān)鍵字。Java中一個類只能繼承一個負(fù)類牧愁,不夠靈活素邪,通過實現(xiàn)多個接口可以做補充。

匿名內(nèi)部類

接口在使用過程中猪半,還經(jīng)常與匿名內(nèi)部類配合使用

匿名內(nèi)部類就是沒有名字的內(nèi)部類兔朦,多用于關(guān)注實現(xiàn)而不關(guān)注實現(xiàn)類的名稱

【示例】

IPlayGame ip=new IPlayGame(){
    @Override
    public void playGame(){
        System.out.println("使用匿名內(nèi)部類的方式實現(xiàn)接口");
    }
};
ip.playGame();

或者

new IPlayGame(){
    @Override
    public void playGame(){
        System.out.println("使用匿名內(nèi)部類的方式實現(xiàn)接口");
    }
}.playGame();

語法

Interface i=new Interface(){
    public void method(){
        System.out.println("匿名內(nèi)部類實現(xiàn)接口的方式")
    }
}

Object 類

所有類的父類,如果一個類沒有使用extends關(guān)鍵字明確標(biāo)識繼承另外一個類磨确,那么這個類默認(rèn)繼承Object類沽甥。Object類中的方法,適合所有子類

toString()

在Objecty類里面定義toString()方法的時候反悔對象的Hash code(對象地址字符串)俐填。

可以通過重寫toString()方法表示出對象的屬性安接。

equals()

比較的是對象的引用是否指向同一塊內(nèi)存地址。

UML

概念

Unified Modeling Language(UML)統(tǒng)一建模語言或標(biāo)準(zhǔn)建模語言

是一個支持模型化和軟件系統(tǒng)開發(fā)的圖形化語言

為軟件開發(fā)的所有階段提供模型化和可視化支持

常用UML圖

用例圖(The Use Case Diagram):用例圖能夠以可視化的方式英融,表達系統(tǒng)如何滿足所收集的業(yè)務(wù)規(guī)則盏檐,以及特定的用戶需求等信息。

序列圖(The Sequence Diagram):序列圖用于按照交互發(fā)生的一系列順序驶悟,顯示對象之間的這些交互胡野。

類圖(The Class Diagram):UML類圖、業(yè)務(wù)邏輯和所有支持結(jié)構(gòu)一同被用于定義全部的代碼結(jié)構(gòu)痕鳍。

UML建模工具

Visio硫豆、Rational Rose龙巨、PowerDesigner

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市熊响,隨后出現(xiàn)的幾起案子旨别,更是在濱河造成了極大的恐慌,老刑警劉巖汗茄,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件秸弛,死亡現(xiàn)場離奇詭異,居然都是意外死亡洪碳,警方通過查閱死者的電腦和手機递览,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瞳腌,“玉大人绞铃,你說我怎么就攤上這事∩┦蹋” “怎么了儿捧?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長吵冒。 經(jīng)常有香客問我痹栖,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任钮蛛,我火速辦了婚禮岭辣,結(jié)果婚禮上沦童,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布霹陡。 她就那樣靜靜地躺著,像睡著了一般催束。 火紅的嫁衣襯著肌膚如雪摘昌。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天湘纵,我揣著相機與錄音梧喷,去河邊找鬼砌左。 笑死脖咐,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的汇歹。 我是一名探鬼主播屁擅,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼产弹!你這毒婦竟也來了派歌?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤痰哨,失蹤者是張志新(化名)和其女友劉穎胶果,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體斤斧,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡早抠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了撬讽。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蕊连。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖游昼,靈堂內(nèi)的尸體忽然破棺而出甘苍,到底是詐尸還是另有隱情,我是刑警寧澤烘豌,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布载庭,位于F島的核電站,受9級特大地震影響扇谣,放射性物質(zhì)發(fā)生泄漏昧捷。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一罐寨、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧序矩,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至租幕,卻和暖如春舷手,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背劲绪。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工男窟, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留盆赤,地道東北人。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓歉眷,卻偏偏與公主長得像牺六,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子汗捡,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,700評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 一:java概述:1淑际,JDK:Java Development Kit,java的開發(fā)和運行環(huán)境扇住,java的開發(fā)工...
    ZaneInTheSun閱讀 2,650評論 0 11
  • Win7下如何打開DOS控制臺春缕? a:開始--所有程序--附件--命令提示符 b:開始--搜索程序和文件--cmd...
    逍遙嘆6閱讀 1,595評論 4 12
  • 在經(jīng)過一次沒有準(zhǔn)備的面試后,發(fā)現(xiàn)自己雖然寫了兩年的android代碼艘蹋,基礎(chǔ)知識卻忘的差不多了锄贼。這是程序員的大忌,沒...
    猿來如癡閱讀 2,839評論 3 10
  • 1簿训、一個".java"源文件中是否可以包括多個類(不是內(nèi)部類)咱娶?有什么限制?答:可以有多個類强品,但只能有一個publ...
    岳小川閱讀 928評論 0 2
  • 這個系列面試題主要目的是幫助你拿輕松到offer膘侮,同時還能開個好價錢。只要能夠搞明白這個系列的絕大多數(shù)題目的榛,在面試...
    獨念白閱讀 338評論 0 3