No_16_0226 Java基礎學習第七天

文檔版本 開發工具 測試平臺 工程名字 日期 作者 備注
V1.0 2016.02.26 lutianfei none

[TOC]


成員變量與局部變量

  • 成員變量與局部變量區別:
    • A:在類中的位置不同
      • 成員變量:在類中,方法外
      • 局部變量:在方法定義中或者方法聲明上。
    • B:在內存中的位置不同:
      • 成員變量:在堆內存
      • 局部變量:在棧內存
    • C:生命周期不同
      • 成員變量:隨著對象的創建而存在,隨著對象的消失而消失
      • 局部變量:隨著方法的調用而存在,隨著方法的調用完畢而存在
    • D:初始化值不同
      • 成員變量:有默認初始值
      • 局部變量:沒有默認初始值,必須定義,賦值,然后才能使用。
  • 注:局部變量名稱可以和成員變量名稱一致,在方法中使用的時候,采用就近原則。

形式參數問題

  • 一個方法的形式參數是一個類類型(引用類型),這里其實需要的是該類的對象。
//形式參數是 基本類型
class Demo {
    public int sum(int a,int b) {
        return a + b;
    }
}

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

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

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

匿名對象

  • 匿名對象:就是沒有名字的對象。
    • 是對象的一種簡化表示形式
  • 匿名對象的兩種使用情況
    • 對象調用方法僅僅一次的時候
    • 作為實際參數傳遞
  • 匿名調用好處
    • 匿名對象調用完畢就是垃圾??梢员焕厥掌骰厥?。
class Student {
    public void show() {
        System.out.println("我愛學習");
    }
}

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

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

        //匿名對象
        //new Student();
        //匿名對象調用方法
        new Student().show();
        new Student().show(); //這里其實是重新創建了一個新的對象
        System.out.println("--------------");

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

        //再來一個
        new StudentDemo().method(new Student());
     }
}


封裝概述

  • 封裝概述
    • 是指隱藏對象的屬性和實現細節,僅對外提供公共訪問方式。
  • 好處:
    • 隱藏實現細節,提供公共的訪問方式
    • 提高了代碼的復用性
    • 提高安全性。
  • 封裝原則:
    • 將不需要對外提供的內容都隱藏起來。
    • 把屬性隱藏,提供公共方法對其訪問。
  • 注:
    • 測試類一般只創建對象,調用方法。

private關鍵字

  • private關鍵字:

    • 是一個權限修飾符,是封裝的一種體現。
    • 可以修飾成員(成員變量和成員方法)
    • 被private修飾的成員只在本類中才能訪問。
  • private最常見的應用:

    • 把成員變量用private修飾
    • 提供對應的getXxx()/setXxx()方法
    • 一個標準的案例的使用

this關鍵字

  • this:代表所在類的對象引用
  • 記?。?
    • 方法被哪個對象調用,this就代表那個對象
class Student {
    //姓名
    private String name;
    //年齡
    private int age;
    
    //姓名獲取值
    public String getName() {
        return name;
    }
    
    //姓名設置值
    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;
    }
}

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

構造方法

  • 構造方法作用概述
    • 給對象的數據進行初始化
  • 構造方法格式
    • 方法名類名相同
    • 沒有返回值類型,連void都沒有
    • 沒有具體的返回值。(可以有return;這一語句,表示方法到這里結束)
  • 構造方法注意事項
    • 如果你不提供構造方法,系統會給出默認無參構造方法
    • 如果你提供了構造方法,系統將不再提供默認的無參構造方法。必須自己給出。(建議永遠自己給出無參構造方法?。?/li>
    • 構造方法也是可以重載
class Student {
    private String name;
    private int age;

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

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


一個基本類的標準代碼寫法

    • 成員變量
    • 構造方法
      • 無參構造方法
      • 帶參構造方法
    • 成員方法
      • getXxx()
      • setXxx()
  • 給成員變量賦值的方式
    • 無參構造方法+setXxx()
    • 帶參構造方法
/*
    一個標準代碼的最終版。
    
    學生類:
        成員變量:
            name,age
        構造方法:
            無參,帶兩個參
        成員方法:
            getXxx()/setXxx()
            show():輸出該類的所有成員變量值
            
    給成員變量賦值:
        A:setXxx()方法
        B:構造方法
        
    輸出成員變量值的方式:
        A:通過getXxx()分別獲取然后拼接
        B:通過調用show()方法搞定
*/
class Student {
    //姓名
    private String name;
    //年齡
    private int age;
    
    //構造方法
    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);
    }
}

//測試類
class StudentTest {
    public static void main(String[] args) {
        //方式1給成員變量賦值
        //無參構造+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();在內存中做了哪些事情?

  • 加載Student.class文件進內存
  • 內存為s開辟空間
  • 內存為學生對象開辟空間
  • 對學生對象的成員變量進行默認初始化
  • 對學生對象的成員變量進行顯示初始化
  • 通過構造方法對學生對象的成員變量賦值
  • 學生對象初始化完畢,把對象地址賦值給s變量


static關鍵字

  • 可以修飾成員變量和成員方法
  • static關鍵字特點
    • 隨著類的加載而加載
    • 優先于對象存在
    • 被類的所有對象共享
      • 這也是我們判斷是否使用靜態關鍵字的條件
    • 可以通過類名調用,也可以通過對象調用。
  • static關鍵字注意事項
    • 靜態方法中是<font color = red>沒有this關鍵字</font>的(無法從靜態上下文引用非靜態 變量 xxx)
      • 因為靜態時隨著的加載而加載,this是隨著對象的創建而存在。
      • 靜態比對象先存在。
    • 靜態方法只能訪問靜態的成員變量靜態的成員方法,非靜態方法可以隨意訪問。
class Teacher {
    public int num = 10;
    public static int num2 = 20;
    
    public void show() {
        System.out.println(num); //隱含的告訴你訪問的是成員變量
        System.out.println(this.num); //明確的告訴你訪問的是成員變量
        System.out.println(num2);

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

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


靜態變量成員變量的區別

  • 所屬不同
    • 靜態變量屬于類,所以也稱為為類變量
    • 成員變量屬于對象,所以也稱為實例變量(對象變量)
  • 內存中位置不同
    • 靜態變量存儲于方法區靜態區
    • 成員變量存儲于堆內存
  • 內存出現時間不同
    • 靜態變量隨著的加載而加載,隨著類的消失而消失
    • 成員變量隨著對象的創建而存在,隨著對象的消失而消失
  • 調用不同
    • 靜態變量可以通過類名調用,也可以通過對象調用
    • 成員變量只能通過對象名調用

main方法是靜態的

  • public static void main(String[] args) {}
    • public 公共的,訪問權限最大,因為被jvm調用,需要訪問權限足夠大。
    • static 靜態的,不需要創建對象,被jvm調用,不用創建對象,直接類名訪問
    • void被jvm調用,不需要給jvm返回值
    • main 一個通用的名稱,雖然不是關鍵字,但是被jvm識別
    • String[] args 以前用于接收鍵盤錄入的
      • eg:java MainDemo hello world java
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,460評論 6 538
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,067評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 177,467評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,468評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,184評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,582評論 1 325
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,616評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,794評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,343評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,096評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,291評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,863評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,513評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,941評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,190評論 1 291
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,026評論 3 396
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,253評論 2 375

推薦閱讀更多精彩內容

  • 一:java概述:1,JDK:Java Development Kit,java的開發和運行環境,java的開發工...
    ZaneInTheSun閱讀 2,682評論 0 11
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,729評論 18 399
  • Win7下如何打開DOS控制臺? a:開始--所有程序--附件--命令提示符 b:開始--搜索程序和文件--cmd...
    逍遙嘆6閱讀 1,608評論 4 12
  • (一)Java部分 1、列舉出JAVA中6個比較常用的包【天威誠信面試題】 【參考答案】 java.lang;ja...
    獨云閱讀 7,131評論 0 62
  • 今天一早,付了0.1元訂閱了得到“每天聽本書”,把我所有已購、或已讀的書逐個的“拿下”并“下載”有26本。早上揣著...
    三葉草的練習本閱讀 248評論 0 0