Java基礎學習第七天——物件導向常見概念__Java

來源:互聯網
上載者:User
文檔版本 開發工具 測試平台 工程名字 日期 作者 備忘
V1.0 2016.02.26 lutianfei none
成員變數與局部變數 成員變數與局部變數區別:
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修飾 提供對應的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;這一語句,表示方法到這裡結束)

構造方法注意事項 如果你不提供構造方法,系統會給出預設無參構造方法 如果你提供了構造方法,系統將不再提供預設的無參構造方法。必須自己給出。(建議永遠自己給出無參構造方法。) 構造方法也是可以重載

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關鍵字注意事項靜態方法中是沒有this關鍵字(無法從靜態上下文引用非靜態 變數 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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.