No_16_0226 Java基礎(chǔ)學(xué)習(xí)第七天

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

[TOC]


成員變量與局部變量

  • 成員變量與局部變量區(qū)別:
    • A:在類中的位置不同
      • 成員變量:在類中,方法外
      • 局部變量:在方法定義中或者方法聲明上。
    • B:在內(nèi)存中的位置不同:
      • 成員變量:在堆內(nèi)存
      • 局部變量:在棧內(nèi)存
    • C:生命周期不同
      • 成員變量:隨著對(duì)象的創(chuàng)建而存在文兑,隨著對(duì)象的消失而消失
      • 局部變量:隨著方法的調(diào)用而存在夕膀,隨著方法的調(diào)用完畢而存在
    • D:初始化值不同
      • 成員變量:有默認(rèn)初始值
      • 局部變量:沒有默認(rèn)初始值瓜饥,必須定義,賦值戴质,然后才能使用。
  • 注:局部變量名稱可以和成員變量名稱一致踢匣,在方法中使用的時(shí)候告匠,采用就近原則。

形式參數(shù)問(wèn)題

  • 一個(gè)方法的形式參數(shù)是一個(gè)類類型(引用類型)离唬,這里其實(shí)需要的是該類的對(duì)象后专。
//形式參數(shù)是 基本類型
class Demo {
    public int sum(int a,int b) {
        return a + b;
    }
}

//形式參數(shù)是 引用類型
class Student {
    public void show() {
        System.out.println("我愛學(xué)習(xí)");
    }
}

class StudentDemo {
    //如果你看到了一個(gè)方法的形式參數(shù)是一個(gè)類類型(引用類型),這里其實(shí)需要的是該類的對(duì)象输莺。
    public void method(Student s) { 
    //調(diào)用的時(shí)候戚哎,把main方法中的s的地址傳遞到了這里 Student s = new Student();
        s.show();
    }
}

class ArgsTest {
    public static void main(String[] args) {
        //形式參數(shù)是基本類型的調(diào)用
        Demo d = new Demo();
        int result = d.sum(10,20);
        System.out.println("result:"+result);
        System.out.println("--------------");
        
        //形式參數(shù)是引用類型的調(diào)用
        //需求:我要調(diào)用StudentDemo類中的method()方法
        StudentDemo sd = new StudentDemo();
        //創(chuàng)建學(xué)生對(duì)象
        Student s = new Student();
        sd.method(s); //把s的地址給到了這里
    }
}

匿名對(duì)象

  • 匿名對(duì)象:就是沒有名字的對(duì)象。
    • 是對(duì)象的一種簡(jiǎn)化表示形式
  • 匿名對(duì)象的兩種使用情況
    • 對(duì)象調(diào)用方法僅僅一次的時(shí)候
    • 作為實(shí)際參數(shù)傳遞
  • 匿名調(diào)用好處
    • 匿名對(duì)象調(diào)用完畢就是垃圾嫂用⌒偷剩可以被垃圾回收器回收。
class Student {
    public void show() {
        System.out.println("我愛學(xué)習(xí)");
    }
}

class StudentDemo {
    public void method(Student s) {
        s.show();
    }
}

class NoNameDemo {
    public static void main(String[] args) {
        //帶名字的調(diào)用
        Student s = new Student();
        s.show();
        s.show();
        System.out.println("--------------");

        //匿名對(duì)象
        //new Student();
        //匿名對(duì)象調(diào)用方法
        new Student().show();
        new Student().show(); //這里其實(shí)是重新創(chuàng)建了一個(gè)新的對(duì)象
        System.out.println("--------------");

        //匿名對(duì)象作為實(shí)際參數(shù)傳遞
        StudentDemo sd = new StudentDemo();
        //匿名對(duì)象
        sd.method(new Student());

        //再來(lái)一個(gè)
        new StudentDemo().method(new Student());
     }
}


封裝概述

  • 封裝概述
    • 是指隱藏對(duì)象的屬性和實(shí)現(xiàn)細(xì)節(jié)嘱函,僅對(duì)外提供公共訪問(wèn)方式甘畅。
  • 好處:
    • 隱藏實(shí)現(xiàn)細(xì)節(jié),提供公共的訪問(wèn)方式
    • 提高了代碼的復(fù)用性
    • 提高安全性往弓。
  • 封裝原則:
    • 將不需要對(duì)外提供的內(nèi)容都隱藏起來(lái)橄浓。
    • 把屬性隱藏,提供公共方法對(duì)其訪問(wèn)亮航。
  • 注:
    • 測(cè)試類一般只創(chuàng)建對(duì)象荸实,調(diào)用方法。

private關(guān)鍵字

  • private關(guān)鍵字:

    • 是一個(gè)權(quán)限修飾符,是封裝的一種體現(xiàn)缴淋。
    • 可以修飾成員(成員變量和成員方法)
    • 被private修飾的成員只在本類中才能訪問(wèn)准给。
  • private最常見的應(yīng)用:

    • 把成員變量用private修飾
    • 提供對(duì)應(yīng)的getXxx()/setXxx()方法
    • 一個(gè)標(biāo)準(zhǔn)的案例的使用

this關(guān)鍵字

  • this:代表所在類的對(duì)象引用
  • 記仔⒘琛:
    • 方法被哪個(gè)對(duì)象調(diào)用供搀,this就代表那個(gè)對(duì)象
class Student {
    //姓名
    private String name;
    //年齡
    private int age;
    
    //姓名獲取值
    public String getName() {
        return name;
    }
    
    //姓名設(shè)置值
    public void setName(String name) { //name = "林青霞";
        //Student.name = name;
        this.name = name;
    }
    
    //年齡獲取值
    public int getAge() {
        return age;
    }
    
    //年齡賦值
    public void setAge(int age) {
        this.age = age;
    }
}

//測(cè)試類
class StudentTest {
    public static void main(String[] args) {
        //創(chuàng)建學(xué)生對(duì)象
        Student s = new Student();
        
        //給成員變量賦值
        s.setName("林青霞");
        s.setAge(27);
        //獲取數(shù)據(jù)
        System.out.println(s.getName()+"---"+s.getAge());
    }
}

構(gòu)造方法

  • 構(gòu)造方法作用概述
    • 給對(duì)象的數(shù)據(jù)進(jìn)行初始化
  • 構(gòu)造方法格式
    • 方法名類名相同
    • 沒有返回值類型,連void都沒有
    • 沒有具體的返回值含长。(可以有return钟沛;這一語(yǔ)句畔规,表示方法到這里結(jié)束)
  • 構(gòu)造方法注意事項(xiàng)
    • 如果你不提供構(gòu)造方法,系統(tǒng)會(huì)給出默認(rèn)無(wú)參構(gòu)造方法
    • 如果你提供了構(gòu)造方法恨统,系統(tǒng)將不再提供默認(rèn)的無(wú)參構(gòu)造方法叁扫。必須自己給出三妈。(建議永遠(yuǎn)自己給出無(wú)參構(gòu)造方法!)
    • 構(gòu)造方法也是可以重載
class Student {
    private String name;
    private int age;

    public Student() {
        System.out.println("這是無(wú)參構(gòu)造方法");
    }
    
    //構(gòu)造方法的重載格式
    public Student(String name) {
        System.out.println("這是帶一個(gè)String類型的構(gòu)造方法");
        this.name = name;
    }
    
    public Student(int age) {
        System.out.println("這是帶一個(gè)int類型的構(gòu)造方法");
        this.age = age;
    }
    
    public Student(String name,int age) {
        System.out.println("這是一個(gè)帶多個(gè)參數(shù)的構(gòu)造方法");
        this.name = name;
        this.age = age;
    }
    
    public void show() {
        System.out.println(name+"---"+age);
    }
}

class ConstructDemo2 {
    public static void main(String[] args) {
        //創(chuàng)建對(duì)象
        Student s = new Student();
        s.show();
        System.out.println("-------------");
        
        //創(chuàng)建對(duì)象2
        Student s2 = new Student("林青霞");
        s2.show();
        System.out.println("-------------");
        
        //創(chuàng)建對(duì)象3
        Student s3 = new Student(27);
        s3.show();
        System.out.println("-------------");
        
        //創(chuàng)建對(duì)象4
        Student s4 = new Student("林青霞",27);
        s4.show();
    }
}


一個(gè)基本類的標(biāo)準(zhǔn)代碼寫法

    • 成員變量
    • 構(gòu)造方法
      • 無(wú)參構(gòu)造方法
      • 帶參構(gòu)造方法
    • 成員方法
      • getXxx()
      • setXxx()
  • 給成員變量賦值的方式
    • 無(wú)參構(gòu)造方法+setXxx()
    • 帶參構(gòu)造方法
/*
    一個(gè)標(biāo)準(zhǔn)代碼的最終版莫绣。
    
    學(xué)生類:
        成員變量:
            name畴蒲,age
        構(gòu)造方法:
            無(wú)參,帶兩個(gè)參
        成員方法:
            getXxx()/setXxx()
            show():輸出該類的所有成員變量值
            
    給成員變量賦值:
        A:setXxx()方法
        B:構(gòu)造方法
        
    輸出成員變量值的方式:
        A:通過(guò)getXxx()分別獲取然后拼接
        B:通過(guò)調(diào)用show()方法搞定
*/
class Student {
    //姓名
    private String name;
    //年齡
    private int age;
    
    //構(gòu)造方法
    public Student() {
    }
    
    public Student(String name,int age) {
        this.name = name;
        this.age = age;
    }
    
    public String getName() {
        return name;
    }
    
    public void setName(String name) {
        this.name = name;
    }
    
    public int getAge() {
        return age;
    }
    
    public void setAge(int age) {
        this.age = age;
    }
    
    //輸出所有的成員變量值
    public void show() {
        System.out.println(name+"---"+age);
    }
}

//測(cè)試類
class StudentTest {
    public static void main(String[] args) {
        //方式1給成員變量賦值
        //無(wú)參構(gòu)造+setXxx()
        Student s1 = new Student();
        s1.setName("林青霞");
        s1.setAge(27);
        //輸出值
        System.out.println(s1.getName()+"---"+s1.getAge());
        s1.show();
        System.out.println("----------------------------");
        
        //方式2給成員變量賦值
        Student s2 = new Student("劉意",30);
        System.out.println(s2.getName()+"---"+s2.getAge());
        s2.show();
    }
}


Student s = new Student();在內(nèi)存中做了哪些事情?

  • 加載Student.class文件進(jìn)內(nèi)存
  • 內(nèi)存為s開辟空間
  • 內(nèi)存為學(xué)生對(duì)象開辟空間
  • 對(duì)學(xué)生對(duì)象的成員變量進(jìn)行默認(rèn)初始化
  • 對(duì)學(xué)生對(duì)象的成員變量進(jìn)行顯示初始化
  • 通過(guò)構(gòu)造方法對(duì)學(xué)生對(duì)象的成員變量賦值
  • 學(xué)生對(duì)象初始化完畢对室,把對(duì)象地址賦值給s變量


static關(guān)鍵字

  • 可以修飾成員變量和成員方法
  • static關(guān)鍵字特點(diǎn)
    • 隨著類的加載而加載
    • 優(yōu)先于對(duì)象存在
    • 被類的所有對(duì)象共享
      • 這也是我們判斷是否使用靜態(tài)關(guān)鍵字的條件
    • 可以通過(guò)類名調(diào)用,也可以通過(guò)對(duì)象調(diào)用模燥。
  • static關(guān)鍵字注意事項(xiàng)
    • 靜態(tài)方法中是<font color = red>沒有this關(guān)鍵字</font>的(無(wú)法從靜態(tài)上下文引用非靜態(tài) 變量 xxx)
      • 因?yàn)殪o態(tài)時(shí)隨著的加載而加載,this是隨著對(duì)象的創(chuàng)建而存在掩宜。
      • 靜態(tài)比對(duì)象先存在蔫骂。
    • 靜態(tài)方法只能訪問(wèn)靜態(tài)的成員變量靜態(tài)的成員方法,非靜態(tài)方法可以隨意訪問(wèn)牺汤。
class Teacher {
    public int num = 10;
    public static int num2 = 20;
    
    public void show() {
        System.out.println(num); //隱含的告訴你訪問(wèn)的是成員變量
        System.out.println(this.num); //明確的告訴你訪問(wèn)的是成員變量
        System.out.println(num2);

    }
    
    public static void method() {
        //無(wú)法從靜態(tài)上下文中引用非靜態(tài) 變量 num
        //System.out.println(num);
        System.out.println(num2);
        
        //無(wú)法從靜態(tài)上下文中引用非靜態(tài) 方法 function()
        //function();
        function2();
    }
    
    public void function() {
    
    }
    
    public static void function2() {
    
    }
}

class TeacherDemo {
    public static void main(String[] args) {
        //創(chuàng)建對(duì)象
        Teacher t = new Teacher();
        t.show();
        System.out.println("------------");
        t.method();
    }
}


靜態(tài)變量成員變量的區(qū)別

  • 所屬不同
    • 靜態(tài)變量屬于類纠吴,所以也稱為為類變量
    • 成員變量屬于對(duì)象,所以也稱為實(shí)例變量(對(duì)象變量)
  • 內(nèi)存中位置不同
    • 靜態(tài)變量存儲(chǔ)于方法區(qū)靜態(tài)區(qū)
    • 成員變量存儲(chǔ)于堆內(nèi)存
  • 內(nèi)存出現(xiàn)時(shí)間不同
    • 靜態(tài)變量隨著的加載而加載慧瘤,隨著類的消失而消失
    • 成員變量隨著對(duì)象的創(chuàng)建而存在戴已,隨著對(duì)象的消失而消失
  • 調(diào)用不同
    • 靜態(tài)變量可以通過(guò)類名調(diào)用,也可以通過(guò)對(duì)象調(diào)用
    • 成員變量只能通過(guò)對(duì)象名調(diào)用

main方法是靜態(tài)的

  • public static void main(String[] args) {}
    • public 公共的锅减,訪問(wèn)權(quán)限最大糖儡,因?yàn)楸籮vm調(diào)用,需要訪問(wèn)權(quán)限足夠大怔匣。
    • static 靜態(tài)的握联,不需要?jiǎng)?chuàng)建對(duì)象,被jvm調(diào)用每瞒,不用創(chuàng)建對(duì)象金闽,直接類名訪問(wèn)
    • void被jvm調(diào)用,不需要給jvm返回值
    • main 一個(gè)通用的名稱剿骨,雖然不是關(guān)鍵字代芜,但是被jvm識(shí)別
    • String[] args 以前用于接收鍵盤錄入的
      • eg:java MainDemo hello world java
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市浓利,隨后出現(xiàn)的幾起案子挤庇,更是在濱河造成了極大的恐慌,老刑警劉巖贷掖,帶你破解...
    沈念sama閱讀 221,635評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嫡秕,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡苹威,警方通過(guò)查閱死者的電腦和手機(jī)昆咽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人掷酗,你說(shuō)我怎么就攤上這事调违。” “怎么了汇在?”我有些...
    開封第一講書人閱讀 168,083評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵翰萨,是天一觀的道長(zhǎng)脏答。 經(jīng)常有香客問(wèn)我糕殉,道長(zhǎng),這世上最難降的妖魔是什么殖告? 我笑而不...
    開封第一講書人閱讀 59,640評(píng)論 1 296
  • 正文 為了忘掉前任阿蝶,我火速辦了婚禮,結(jié)果婚禮上黄绩,老公的妹妹穿的比我還像新娘羡洁。我一直安慰自己,他們只是感情好爽丹,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評(píng)論 6 397
  • 文/花漫 我一把揭開白布筑煮。 她就那樣靜靜地躺著,像睡著了一般粤蝎。 火紅的嫁衣襯著肌膚如雪真仲。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,262評(píng)論 1 308
  • 那天初澎,我揣著相機(jī)與錄音秸应,去河邊找鬼。 笑死碑宴,一個(gè)胖子當(dāng)著我的面吹牛软啼,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播延柠,決...
    沈念sama閱讀 40,833評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼祸挪,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了贞间?” 一聲冷哼從身側(cè)響起匕积,我...
    開封第一講書人閱讀 39,736評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎榜跌,沒想到半個(gè)月后闪唆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,280評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡钓葫,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評(píng)論 3 340
  • 正文 我和宋清朗相戀三年悄蕾,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,503評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡帆调,死狀恐怖奠骄,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情番刊,我是刑警寧澤含鳞,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站芹务,受9級(jí)特大地震影響蝉绷,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜枣抱,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評(píng)論 3 333
  • 文/蒙蒙 一熔吗、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧佳晶,春花似錦桅狠、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至菇篡,卻和暖如春漩符,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背逸贾。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工陨仅, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人铝侵。 一個(gè)月前我還...
    沈念sama閱讀 48,909評(píng)論 3 376
  • 正文 我出身青樓灼伤,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親咪鲜。 傳聞我的和親對(duì)象是個(gè)殘疾皇子狐赡,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評(píng)論 2 359

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

  • 一:java概述:1,JDK:Java Development Kit疟丙,java的開發(fā)和運(yùn)行環(huán)境颖侄,java的開發(fā)工...
    ZaneInTheSun閱讀 2,661評(píng)論 0 11
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類相關(guān)的語(yǔ)法享郊,內(nèi)部類的語(yǔ)法览祖,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法炊琉,線程的語(yǔ)...
    子非魚_t_閱讀 31,662評(píng)論 18 399
  • Win7下如何打開DOS控制臺(tái)展蒂? a:開始--所有程序--附件--命令提示符 b:開始--搜索程序和文件--cmd...
    逍遙嘆6閱讀 1,600評(píng)論 4 12
  • (一)Java部分 1又活、列舉出JAVA中6個(gè)比較常用的包【天威誠(chéng)信面試題】 【參考答案】 java.lang;ja...
    獨(dú)云閱讀 7,114評(píng)論 0 62
  • 今天一早,付了0.1元訂閱了得到“每天聽本書”锰悼,把我所有已購(gòu)柳骄、或已讀的書逐個(gè)的“拿下”并“下載”有26本。早上揣著...
    三葉草的練習(xí)本閱讀 242評(píng)論 0 0