No_16_0302 Java基礎(chǔ)學(xué)習(xí)第十天

文檔版本 開發(fā)工具 測試平臺(tái) 工程名字 日期 作者 備注
V1.0 2016.03.02 lutianfei none

[TOC]


  • 教練運(yùn)動(dòng)員案例



形式參數(shù)和返回值問題

  • 形式參數(shù)

    • 基本類型
    • 引用類型
      • (匿名對象時(shí)有講):需要的是該對象缴罗!
      • 抽象類:需要的是該抽象類子類對象覆获。
      • 接口: 需要的是該接口實(shí)現(xiàn)類對象锰什。
  • 返回值類型

    • 基本類型
    • 引用類型
      • :返回的是該對象
      • 抽象類:返回的是該抽象類子類對象
      • 接口類:返回的是該接口實(shí)現(xiàn)類對象

  • Eg: 當(dāng)作為形式參數(shù)的情況舉例:

class Student {
    public void study() {
        System.out.println("Good Good Study,Day Day Up");
    }
}

class StudentDemo {
    public void method(Student s) { //ss; ss = new Student();  Student s = new Student();
        s.study();
    }
}

class StudentTest {
    public static void main(String[] args) {
        //需求:我要測試Student類的study()方法
        Student s = new Student();
        s.study();
        System.out.println("----------------");
        
        //需求2:我要測試StudentDemo類中的method()方法
        StudentDemo sd = new StudentDemo();
        Student ss = new Student();
        sd.method(ss);
        System.out.println("----------------");
        
        //匿名對象用法
        new StudentDemo().method(new Student());
    }
}


  • Eg: 當(dāng)抽象類作為形式參數(shù)的情況舉例:
abstract class Person {
    public abstract void study();
}

class PersonDemo {
    public void method(Person p) {//p; p = new Student();  Person p = new Student(); //多態(tài)
        p.study();
    }
}

//定義一個(gè)具體的學(xué)生類
class Student extends Person {
    public void study() {
        System.out.println("Good Good Study,Day Day Up");
    }
}

class PersonTest {
    public static void main(String[] args) {
        //目前是沒有辦法的使用的
        //因?yàn)槌橄箢悰]有對應(yīng)的具體類
        //那么驶睦,我們就應(yīng)該先定義一個(gè)具體類
        //需求:我要使用PersonDemo類中的method()方法
        PersonDemo pd = new PersonDemo();
        Person p = new Student();
        pd.method(p);
    }
}


  • Eg: 當(dāng)接口作為形式參數(shù)的情況舉例:
//定義一個(gè)愛好的接口
interface Love {
    public abstract void love();
}

class LoveDemo {
    public void method(Love l) { //l; l = new Teacher();  Love l = new Teacher(); 多態(tài)
        l.love();
    }
}

//定義具體類實(shí)現(xiàn)接口
class Teacher implements Love {
    public void love() {
        System.out.println("老師愛學(xué)生,愛Java,愛林青霞");
    }
}

class TeacherTest {
    public static void main(String[] args) {
        //需求:我要測試LoveDemo類中的love()方法
        LoveDemo ld = new LoveDemo();
        Love l = new Teacher();
        ld.method(l);
    }
}


  • Eg: 當(dāng)作為返回值的情況舉例:
class Student {
    public void study() {
        System.out.println("Good Good Study,Day Day Up");
    }
}

class StudentDemo {
    public Student getStudent() {
        return new Student();
    }
}

class StudentTest2 {
    public static void main(String[] args) {
        //需求:我要使用Student類中的study()方法
        //但是,這一次我的要求是蒸播,不要直接創(chuàng)建Student的對象
        //讓你使用StudentDemo幫你創(chuàng)建對象
        StudentDemo sd = new StudentDemo();
        Student s = sd.getStudent(); //new Student(); Student s = new Student();
        s.study();
    }
}


  • Eg: 當(dāng)抽象類作為返回值的情況舉例:
abstract class Person {
    public abstract void study();
}

class PersonDemo {
    public Person getPerson() {
        //Person p = new Student();
        //return p;
        
        return new Student();
    }
}

class Student extends Person {
    public void study() {
        System.out.println("Good Good Study,Day Day Up");
    }
}

class PersonTest2 {
    public static void main(String[] args) {
        //需求:我要測試Person類中的study()方法
        PersonDemo pd = new PersonDemo();
        Person p = pd.getPerson(); //new Student();  Person p = new Student(); 多態(tài)
        p.study();
    }
}


  • Eg: 當(dāng)接口作為返回值的情況舉例:
interface Love {
    public abstract void love();
}

class LoveDemo {
    public Love getLove() {
        //Love l = new Teacher();
        //return l;
        
        return new Teacher();
    }
}

//定義具體類實(shí)現(xiàn)接口
class Teacher implements Love {
    public void love() {
        System.out.println("老師愛學(xué)生,愛Java,愛林青霞");
    }
}

class TeacherTest2 {
    public static void main(String[] args) {
        //如何測試呢?
        LoveDemo ld = new LoveDemo();
        Love l = ld.getLove(); //new Teacher(); Love l = new Teacher(); 多態(tài)
        l.love();
    }
}


鏈?zhǔn)骄幊?/h3>
  • 形式:對象.方法1().方法2()....方法n()
  • 每次調(diào)用方法完畢后睡榆,返回的是一個(gè)對象萍肆。
    • 方法1調(diào)用完畢后應(yīng)該返回一個(gè)對象方法2調(diào)用完畢后應(yīng)該返回一個(gè)對象胀屿,方法n調(diào)用完畢后可能是對象塘揣,也可能不是對象。
/*
    鏈?zhǔn)骄幊獭?        每次調(diào)用完畢方法后宿崭,返回的是一個(gè)對象亲铡。
*/
class Student {
    public void study() {
        System.out.println("Good Good Study,Day Day Up");
    }
}

class StudentDemo {
    public Student getStudent() {
        return new Student();
    }
}

class StudentTest3 {
    public static void main(String[] args) {
        //如何調(diào)用的呢?
        StudentDemo sd = new StudentDemo();
        //Student s = sd.getStudent();
        //s.study();
        
        //
        sd.getStudent().study();
    }
}


包的概述(其實(shí)就是文件夾)

  • 作用:對類進(jìn)行分類管理
  • 包的劃分:
    • 舉例:
      • 基本的劃分:按照模塊和功能分。
      • 高級(jí)的劃分:就業(yè)班做項(xiàng)目的時(shí)候你就能看到了葡兑。

包的定義及注意事項(xiàng)

  • 定義包的格式

    • package 包名;
    • 多級(jí)包用.分開即可
  • 注意事項(xiàng):

    • package語句必須是程序的第一條可執(zhí)行(可被虛擬機(jī)執(zhí)行)的代碼
    • package語句在一個(gè)java文件中只能有一個(gè)
    • 如果沒有package奖蔓,默認(rèn)表示無包名
  • 帶包的編譯和運(yùn)行

    • 手動(dòng)式
      • a:通過javac命令編譯該java文件
      • b:手動(dòng)創(chuàng)建包名。
      • c:將a步驟產(chǎn)生的類文件放在b步驟的最底層包讹堤。
      • d:帶包地址運(yùn)行java命令
    • 自動(dòng)式
      • javac編譯的時(shí)候帶上-d即可
        • javac -d . HelloWorld.java

導(dǎo)包

  • 導(dǎo)包概述

    • 不同包下的類之間的訪問吆鹤,每次使用不同包下的類的時(shí)候,都需要加包的全路徑洲守。方便起見疑务,java提供了導(dǎo)包的功能。
  • 導(dǎo)包格式

    • import 包名;
  • 注意:

    • 這種方式導(dǎo)入是到的名稱梗醇。
    • 雖然可以最后寫*知允,但是不建議。
  • package,import,class有沒有順序關(guān)系(面試題)

    • package>import>class
    • package : 只能有一個(gè)
    • import:可以有多個(gè)
    • class:可以有多個(gè)叙谨,建議是一個(gè)温鸽。

修飾符

  • 權(quán)限修飾符:private,默認(rèn)的protected,public
  • 狀態(tài)修飾符:static,final
  • 抽象修飾符:abstract

權(quán)限修飾符

類及其組成可以用的修飾符

  • 類:

    • 權(quán)限修飾符:默認(rèn)的,public
    • 狀態(tài)修飾符(外部類):final 手负, (內(nèi)部類可以使用static)
    • 抽象修飾符:abstract
    • 我們自己定義:public居多
  • 成員變量:

    • 權(quán)限修飾符:private,默認(rèn)的涤垫,protected,public
    • 狀態(tài)修飾符:static,final
    • 我們自己定義:private居多
  • 構(gòu)造方法:

    • 權(quán)限修飾符:private,默認(rèn)的protected,public
    • 我們自己定義:public 居多
  • 成員方法:

    • 權(quán)限修飾符:private,默認(rèn)的虫溜,protected,public
    • 狀態(tài)修飾符:static,final
    • 抽象修飾符:abstract
    • 我們自己定義:public居多
  • 除此以外的組合規(guī)則:

    • 成員變量:public static final
    • 成員方法:
      • public static
      • public abstract
      • public final

內(nèi)部類

內(nèi)部類概述

  • 把類定義在其他類的內(nèi)部雹姊,這個(gè)類就被稱為內(nèi)部類
    • 舉例:在類A中定義了一個(gè)類B衡楞,類B就是內(nèi)部類吱雏。
  • 內(nèi)部類的訪問特點(diǎn):
    • 內(nèi)部類可以直接訪問外部類的成員,包括私有瘾境。
    • 外部類要訪問內(nèi)部類的成員歧杏,必須創(chuàng)建對象

內(nèi)部類的位置

  • 按照內(nèi)部類在類中定義的位置不同迷守,可以分為如下兩種格式:
    • 成員位置(成員內(nèi)部類)
    • 局部位置(局部內(nèi)部類)
成員內(nèi)部類
  • 成員內(nèi)部類不是靜態(tài)的:
    • 外部類名.內(nèi)部類名 對象名 = new 外部類對象.new 內(nèi)部類對象;
  • 成員內(nèi)部類是靜態(tài)的(被靜態(tài)修飾后的訪問方式是):
    • 外部類名.內(nèi)部類名 對象名 = new 外部類名.內(nèi)部類名();
class Outer {
    private int num = 10;
    
    class Inner {
        public void show() {
            System.out.println(num);
        }
    }
}

class InnerClassDemo3 {
    public static void main(String[] args) {
        //格式:外部類名.內(nèi)部類名 對象名 = 外部類對象.內(nèi)部類對象;
        Outer.Inner oi = new Outer().new Inner();
        oi.show();
    }
}


  • 上面成員內(nèi)部類的使用犬绒,但是一般來說,在實(shí)際開發(fā)中是不會(huì)這樣使用的兑凿。因?yàn)?strong>一般內(nèi)部類就是不讓外界直接訪問的凯力。
class Body {
   private class Heart {
       public void operator() {
           System.out.println("心臟搭橋");
       }
   }
   
   public void method() {
       if(如果你是外科醫(yī)生) {
           Heart h = new Heart();
           h.operator();
       }
   }
}
成員內(nèi)部的常見修飾符
  • private 為了保證數(shù)據(jù)的安全性
  • static 為了讓數(shù)據(jù)訪問更方便,一般加public
  • 靜態(tài)修飾成員內(nèi)部類只能訪問外部類靜態(tài)成員
  • 內(nèi)部類被靜態(tài)修飾后的方法
    • 格式:外部類名.內(nèi)部類名 對象名 = new 外部類名.內(nèi)部類名();
      ?
class Outer {
    private int num = 10;
    private static int num2 = 100;
    
    //內(nèi)部類用靜態(tài)修飾是因?yàn)閮?nèi)部類可以看出是外部類的成員
    public static class Inner {
        public void show() {
            //System.out.println(num);
            System.out.println(num2);
        }

        public static void show2() {
            //System.out.println(num);
            System.out.println(num2);
        }        
    }
}

class InnerClassDemo4 {
    public static void main(String[] args) {
        //成員內(nèi)部類被靜態(tài)修飾后的訪問方式是:
        //格式:外部類名.內(nèi)部類名 對象名 = new 外部類名.內(nèi)部類名();
        Outer.Inner oi = new Outer.Inner();
        oi.show();
        oi.show2();
        
        //show2()的另一種調(diào)用方式
        Outer.Inner.show2();
    }
}
  • Eg:補(bǔ)齊程序(注意:內(nèi)部類和外部類沒有繼承關(guān)系)要求請?zhí)羁辗謩e輸出30 20 10
class Outer {
    public int  num = 10;
    class Inner {
        public int  num = 20;
        public void show() {
            int  num = 30;
            System.out.println(?); //num
            System.out.println(??);//this.num
            System.out.println(???);
            //new Outer().num
            // Outer.this.num
        }
    }
}
局部內(nèi)部類
  • 可以直接訪問外部類的成員
  • 可以創(chuàng)建內(nèi)部類對象茵瘾,通過對象調(diào)用內(nèi)部類方法,來使用局部內(nèi)部類功能
  • 局部內(nèi)部類訪問局部變量的注意事項(xiàng): 必須被final修飾
    • 因?yàn)榫植孔兞繒?huì)隨著方法的調(diào)用完畢而消失咐鹤,這個(gè)時(shí)候拗秘,局部對象并沒有立馬從堆內(nèi)存中消失,還要使用那個(gè)變量祈惶。為了讓數(shù)據(jù)還能繼續(xù)被使用雕旨,就用fianl修飾,這樣捧请,在堆內(nèi)存里面存儲(chǔ)的其實(shí)是一個(gè)常量值凡涩。
class Outer {
    private int num  = 10;
    
    public void method() {
        //int num2 = 20;
        //final int num2 = 20;
        class Inner {
            public void show() {
                System.out.println(num);
                //從內(nèi)部類中訪問本地變量num2; 需要被聲明為最終類型
                System.out.println(num2);//20
            }
        }
        
        //System.out.println(num2);
        
        Inner i = new Inner();
        i.show();
    }
}

class InnerClassDemo5 {
    public static void main(String[] args) {
        Outer o = new Outer();
        o.method();
    }
}


匿名內(nèi)部類
  • 就是內(nèi)部類簡化寫法。
  • 前提:存在一個(gè)或者接口
    • 這里的類可以是具體類也可以是抽象類疹蛉。
  • 格式:new 類名或者接口名() {重寫方法;}
  • 本質(zhì):是一個(gè)繼承了該或者實(shí)現(xiàn)了接口子類匿名對象
interface Inter {
    public abstract void show();
    public abstract void show2();
}

class Outer {
    public void method() {
        //一個(gè)方法的時(shí)候
        /*
        new Inter() {
            public void show() {
                System.out.println("show");
            }
        }.show();
        */
        
        //二個(gè)方法的時(shí)候
        /*
        new Inter() {
            public void show() {
                System.out.println("show");
            }
            
            public void show2() {
                System.out.println("show2");
            }
        }.show();
        
        new Inter() {
            public void show() {
                System.out.println("show");
            }
            
            public void show2() {
                System.out.println("show2");
            }
        }.show2();
        */
        
        //如果我是很多個(gè)方法活箕,就很麻煩了
        //那么,我們有沒有改進(jìn)的方案呢?
        Inter i = new Inter() { //多態(tài)
            public void show() {
                System.out.println("show");
            }
            
            public void show2() {
                System.out.println("show2");
            }
        };
        
        i.show();
        i.show2();
    }
}

class InnerClassDemo6 {
    public static void main(String[] args) {
        Outer o = new Outer();
        o.method();
    }
}


  • 匿名內(nèi)部類在開發(fā)中的使用
interface Person {
    public abstract void study();
}

class PersonDemo {
    //接口名作為形式參數(shù)
    //其實(shí)這里需要的不是接口氧吐,而是該接口的實(shí)現(xiàn)類的對象
    public void method(Person p) {
        p.study();
    }
}

//實(shí)現(xiàn)類
class Student implements Person {
    public void study() {
        System.out.println("好好學(xué)習(xí),天天向上");
    }
}

class InnerClassTest2 {
    public static void main(String[] args) {
        //測試
        PersonDemo pd = new PersonDemo();
        Person p = new Student();
        pd.method(p);
        System.out.println("--------------------");
        
        //匿名內(nèi)部類在開發(fā)中的使用
        //匿名內(nèi)部類的本質(zhì)是繼承類或者實(shí)現(xiàn)了接口的子類匿名對象
        pd.method(new Person(){
            public void study() {
                System.out.println("好好學(xué)習(xí),天天向上");
            }
        });
    }
}


  • 匿名內(nèi)部類面試題:要求在控制臺(tái)輸出”HelloWorld”
  interface Inter { 
      void show();
  }
  class Outer { //補(bǔ)齊代碼 
  
  }
  
  class OuterDemo {
      public static void main(String[] args) {
        Outer.method().show();
    }
  }
//分析:
/*
1:由Outer.method()可以看出method()應(yīng)該是outer中的一個(gè)靜態(tài)方法讹蘑。
2:Outer.method().show()可以看出method()方法的返回值是一個(gè)對象
3:由于接口Inter中有一個(gè)show()方法末盔,所以認(rèn)為method()方法的返回值類型是一個(gè)接口筑舅。
*/

//* 補(bǔ)充代碼如下:在不起代碼后:
public static Inter method(){
    return new Inter(){
        public void show(){
            System.out.println("HelloWorld");
        }
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市陨舱,隨后出現(xiàn)的幾起案子翠拣,更是在濱河造成了極大的恐慌,老刑警劉巖游盲,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件误墓,死亡現(xiàn)場離奇詭異,居然都是意外死亡益缎,警方通過查閱死者的電腦和手機(jī)谜慌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來莺奔,“玉大人欣范,你說我怎么就攤上這事×钣矗” “怎么了恼琼?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長屏富。 經(jīng)常有香客問我晴竞,道長,這世上最難降的妖魔是什么狠半? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任噩死,我火速辦了婚禮颤难,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘已维。我一直安慰自己乐严,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布衣摩。 她就那樣靜靜地躺著昂验,像睡著了一般。 火紅的嫁衣襯著肌膚如雪艾扮。 梳的紋絲不亂的頭發(fā)上既琴,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天,我揣著相機(jī)與錄音泡嘴,去河邊找鬼甫恩。 笑死,一個(gè)胖子當(dāng)著我的面吹牛酌予,可吹牛的內(nèi)容都是我干的磺箕。 我是一名探鬼主播,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼抛虫,長吁一口氣:“原來是場噩夢啊……” “哼松靡!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起建椰,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤雕欺,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后棉姐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體屠列,經(jīng)...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年伞矩,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了笛洛。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,110評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡乃坤,死狀恐怖苛让,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情侥袜,我是刑警寧澤蝌诡,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站枫吧,受9級(jí)特大地震影響浦旱,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜九杂,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一颁湖、第九天 我趴在偏房一處隱蔽的房頂上張望宣蠕。 院中可真熱鬧,春花似錦甥捺、人聲如沸抢蚀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽皿曲。三九已至,卻和暖如春吴侦,著一層夾襖步出監(jiān)牢的瞬間屋休,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工备韧, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留劫樟,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓织堂,卻偏偏與公主長得像叠艳,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子易阳,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,047評論 2 355

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

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法附较,類相關(guān)的語法,內(nèi)部類的語法闽烙,繼承相關(guān)的語法翅睛,異常的語法,線程的語...
    子非魚_t_閱讀 31,639評論 18 399
  • Win7下如何打開DOS控制臺(tái)黑竞? a:開始--所有程序--附件--命令提示符 b:開始--搜索程序和文件--cmd...
    逍遙嘆6閱讀 1,599評論 4 12
  • 面向?qū)ο笾饕槍γ嫦蜻^程。 面向過程的基本單元是函數(shù)疏旨。 什么是對象:EVERYTHING IS OBJECT(萬物...
    sinpi閱讀 1,057評論 0 4
  • 1很魂、一個(gè)".java"源文件中是否可以包括多個(gè)類(不是內(nèi)部類)?有什么限制檐涝?答:可以有多個(gè)類遏匆,但只能有一個(gè)publ...
    岳小川閱讀 928評論 0 2
  • 今予之所以傷神幅聘,一為英語作文獨(dú)霸一方之“沾沾自喜”,另一則為語文作文飄忽不定之“憂心忡忡”窃植。予以語文英語為長而穩(wěn)立...
    凌梓木閱讀 201評論 0 4