1. 程式人生 > >記 2018/11/08 面向物件基礎學習 1#

記 2018/11/08 面向物件基礎學習 1#

一、類與物件概述

  1、為了把日常生活中實物用學習語言描述出來

 

  2、如何描述現實事物

    屬性:就是該事物的描述資訊(名詞)

    行為:就是該事物能夠做什麼(動詞)

  3、Java中最基本單位是類

    成員變數:事物的屬性

    成員方法:事物的行為

  4、定義類其實就是定義類的成員(成員變數和成員方法 )

    成員變數  和在類中,方法外

    成員方法  去掉satatic

  5、類和物件的概念

    類: 是一組相關的屬性和行為的集合

    物件: 是該類事物的具體體現

類定義例項:

  

class
Student String name; int age; String gender; public void study() { System.out.println("我要學習"); } public void sleep() { System.out.println("我要睡覺"); }

 

二、面向物件(類的使用)

  1、建立物件格式

    類名  物件名 = new 類名();

  2、使用成員變數

    物件名.變數名

  3、使用成員方法

    物件名.方法名(...)

類使用例項

  

class Test1_Phone {
    public static void main(String[] args) {
        //建立物件
        Phone p = new Phone();
        //呼叫物件中的屬性並賦值
        p.brand = "iphone";
        p.price = 998;

        System.out.println(p.brand + "..."  + p.price);

        //呼叫成員方法
        p.call();
        p.sendMessage();
        p.playGame();
    }
}

/* * 模仿學生類,讓學生自己完成 * 屬性:品牌(brand)價格(price) * 行為:打電話(call),發信息(sendMessage)玩遊戲(playGame) */ class Phone { String brand; //品牌 int price; //價格 public void call() { //打電話 System.out.println("打電話"); } public void sendMessage() { //發信息 System.out.println("發信息"); } public void playGame() { //玩遊戲 System.out.println("玩遊戲"); } }

三、成員變數和區域性變數的區別

  1、在型別中的位置不同

    成員變數:在類中方法外

    區域性變數:在方法定義中或者方法宣告上

  2、在記憶體中的位置不同

    成員變數:在堆記憶體中(成員變數屬於物件,物件進對記憶體)

    區域性變數:在棧記憶體中(區域性變數屬於方法,隨著方法的呼叫完畢彈棧消失)

  3、生命週期不同

    成員變數:隨著物件的建立而存在,隨著物件的消失而消失

    區域性變數:隨著方法的呼叫而存在,隨著方法的呼叫完畢而消失

  4、初始化值不同

    成員變數:由預設初始化值 String--null  int--0  boolean--false...

    區域性變數:沒有預設初始化值,必須定義,賦值,然後才能使用

  5、注意事項

    區域性變數名稱可以和成員變數名稱一樣,在方法中使用的時候採用就近原則

    基本資料型別比那輛包括:byte,short,int,long,float,double,boolean,char

    引用資料型別變數包括:陣列,類,介面,列舉

四、引用型別當形式引數

  如果一個方法的形式引數是一個類型別(引用型別,這裡其實需要該類的物件)。

五、匿名物件的概述和應用

  1、什麼是匿名物件--沒有名字的物件

  2、匿名物件應用場景

    呼叫方法,僅僅只呼叫一次的時候。

    匿名物件可以作為實際引數傳遞

例項

    

class Demo2_Car {
    public static void main(String[] args) {
        /*Car c1 = new Car();            //建立有名字的物件
        c1.run();
        c1.run();

        new Car().run();            //匿名物件呼叫方法
        new Car().run();    */        //匿名物件只適合對方法的一次呼叫,因為呼叫多次就會產生多個物件,不如用有名字的物件    
    
        //匿名物件是否可以呼叫屬性並賦值?有什麼意義?
        /*
        匿名物件可以呼叫屬性,但是沒有意義,因為呼叫後就變成垃圾
        如果需要賦值還是用有名字物件
        */
        new Car().color = "red";
        new Car().num = 8;
        new Car().run();
    }
}

class Car {
    String color;            //顏色
    int num;                //輪胎數

    public void run() {
        System.out.println(color + "..." + num);
    }
}

六、封裝的概述

  1、是指隱藏物件的屬性和實現細節,僅對外提供公共訪問方式。

  2、好處

    隱藏實現細節,提供公共訪問方式

    提高程式碼複用性

    提高安全性

  3、原則

    將不需要對外提供的內容都隱藏起來

    把屬性隱藏,提供公共方法對其訪問

七、private關鍵字概述和特點

  特點:

    是一個許可權修飾符

    可以修飾成員變數和成員方法

    被其修飾的成員只能在本類中被訪問

八、this關鍵字

  this代表當前物件的引用

  用來區分成員變數和區域性變數重名

例項

    

class Demo2_Phone {
                public static void main(String[] args) {
                    Phone p1 = new Phone();
                    p1.setBrand("三星");
                    p1.setPrice(5288);
            
                    System.out.println(p1.getBrand() + "..." + p1.getPrice());
                    p1.call();
                    p1.sendMessage();
                    p1.playGame();
                }
            }
            /*
            手機類
                屬性:品牌brand,價格price
                行為:打電話call,發簡訊sendMessage,玩遊戲,playGame
            */
            class Phone {                                //java bean
                private String brand;                    //品牌
                private int price;                        //價格
            
                public void setBrand(String brand) {    //設定品牌
                    this.brand = brand;
                }
            
                public String getBrand() {                //獲取品牌
                    return this.brand;                    //this.可以省略,你不加系統會預設給你加
                }
            
                public void setPrice(int price) {        //設定價格
                    this.price = price;
                }
            
                public int getPrice() {                    //獲取價格
                    return price;
                }
            
                public void call() {                    //打電話
                    System.out.println("打電話");
                }
            
                public void sendMessage() {                //發簡訊
                    System.out.println("發簡訊");
                }
            
                public void playGame() {                //玩遊戲
                    System.out.println("玩遊戲");
                }
            }