Java編程基礎07——面向對象_類&private&this

1.面向對象思想概述(瞭解)

  • A:面向對象開發就是不斷的建立對象,使用對象,指揮對象作事情。
  • B:面向對象設計其實就是在管理和維護對象之間的關係。
  • C:面向對象特徵封裝(encapsulation)、繼承(inheritance)、多態(polymorphism)
類是對某一類事物共性的抽象概念,而對象描述的是一個具體的產物。
每個屬性的集合就構成了一個對象,可是全部的屬性都應該是羣體的定義,而羣體的定義就造成了一個類。
類是一個模板,而對象纔是類可使用的實例。
  • 在類之中通常會有兩個組成:

成員屬性:(Field)有時候會簡化成其爲屬性好比——年齡,姓名,性別
操做方法:(Method)定義對象具備的處理行爲好比——唱歌、跳舞、游泳、運動java

2.類的定義

  • A:咱們學習編程是爲了什麼編程

    • 爲了把咱們平常生活中實物用學習語言描述出來
  • B:咱們如何描述現實世界事物數組

    • 屬性 就是該事物的描述信息(事物身上的名詞)
    • 行爲 就是該事物可以作什麼(事物身上的動詞)
  • C:Java中最基本的單位是類,Java中用class描述事物也是如此安全

    • 成員變量 就是事物的屬性
    • 成員方法 就是事物的行爲
  • D:定義類其實就是定義類的成員(成員變量和成員方法)學習

    • a:成員變量 和之前定義變量是同樣的,只不過位置發生了改變。在類中,方法外。
    • b:成員方法 和之前定義方法是同樣的,只不過把static去掉,後面在詳細講解static的做用。

學生類的使用(掌握)

  • A:文件名問題測試

    • 在一個java文件中寫兩個類:一個基本的類,一個測試類。
    • 建議:文件名稱和測試類名稱一致。
  • B:如何使用對象?this

    • 建立對象並使用
    • 格式:類名 對象名 = new 類名();
    • 對象名,其實就是合法的標識符:若是是一個單詞,全部字母小寫;若是多個單詞,從第二個單詞開始首字母大寫
  • C:如何使用成員變量呢?spa

    • 對象名.變量名
  • D:如何使用成員方法呢?設計

    • 對象名.方法名(...)

3.學生類案例演示

* 屬性:姓名,年齡,性別
* 行爲:學習,睡覺

class JavaObject {
    public static void main(String [] args) {
        //類名 對象名 = new 類名();
        Student s = new Student();
        //調用屬性並賦值
        s.name = "張三";
        s.age = 23;
        s.gender = "男";
        System.out.println(s.name + "..." + s.age + "..." + s.gender);   //使用變量

        //調用方法
        s.study();
        s.sleep();
    }
}

class Student {
    String name;        //姓名
    int age;            //年齡屬性
    String gender;        //性別屬性

    public void study() {   //定義學習的方法;
        System.out.println("學生學習");
    }
    public void sleep() {
        System.out.println("學生睡覺");
    }
}

4.一個對象的內存圖

* 車
* 成員變量:顏色,輪胎數
* 成員方法:跑

    class JavaObject {
        public static void main(String [] args) {
            Car c = new Car();  //建立對象
            c.color = "red";//調用屬性並賦值
            c.num = 4;
            c.run();//調用方法

            Car c2 = new Car();
            c2.color = "black";
            c2.num = 3 ;
            c2.run();

            c2 = null;  //當引用設置爲null,空指針異常。
            c2.run();

            Car c3 = c2;
            c2.run();
        }
    }
    class Car {
        String color;        //顏色
        int num;            //輪胎數
        public void run() { 
            System.out.println("color" + num);
        }
    }

對象內存圖

5.成員變量和局部變量的區別Person(掌握)

  • A:在類中的位置不一樣指針

    • 成員變量:在類中方法外
    • 局部變量:在方法定義中或者方法聲明上
  • B:在內存中的位置不一樣

    • 成員變量:在堆內存(成員變量屬於對象,對象進堆內存)
    • 局部變量:在棧內存(局部變量屬於方法,方法進棧內存)
  • C:生命週期不一樣

    • 成員變量:隨着對象的建立而存在,隨着對象的消失而消失
    • 局部變量:隨着方法的調用而存在,隨着方法的調用完畢而消失
  • D:初始化值不一樣

    • 成員變量:有默認初始化值(null或0)
    • 局部變量:沒有默認初始化值;使用前必須定義,賦值,而後才能使用。
  • 注意事項:

    • 局部變量名稱能夠和成員變量名稱同樣,在方法中使用的時候,採用的是就近原則(why能夠同名?)。
    • 基本數據類型變量包括哪些:byte,short,int,long,float,double,boolean,char
    • 引用數據類型變量包括哪些:數組,類,接口,枚舉
class JavaObject {
    public static void main(String [] args) {
        Person p = new Person();
        p.speak();
    }
}
class Person {
    String name;                //成員變量
    int num;
    public void speak() {  //x和num都是局部變量
        int num = 10;
        System.out.println(num);    
        System.out.println(name);  //就近原則
    }
}

6.方法的形式參數是類名的時候如何調用(掌握)

  • A:方法的參數是類名public void print(Student s){}//print(new Student());

    • 若是你看到了一個方法的形式參數是一個類(引用數據類型),這裏其實須要的是該類的對象(new地址值)。
    • (~ 記住: 引用數據類型當作形式參數的時候給的是地址值;二基本數據類型當作形參的時候給的是值)
class JavaObject {
    public static void main(String [] args) {
        print(10);   //賦值
        Student s = new Student();  //建立對象
        print(s);

    }
    public static void print(int x) {  //形式參數是基本數據類型,傳遞的值
        System.out.println(x);
    }
    //形式參數是引用數據類型,傳遞的地址值
    public static void print(Student stu) {  //Student stu = new Student();
        stu.name = "張三";
        stu.age = 23;
        stu.speak();
    }
}
class Student {
    String name;                //成員變量
    int age;
    public void speak() {  //局部變量
        System.out.println(name + "..." + age);            
    }
}

7.匿名對象的概述和應用Car(掌握)

  • 沒有名字的對象叫作匿名對象;
  • 只適合調用一次的時候。優勢是節省代碼,調用完畢就是垃圾,能夠被垃圾回收器回收。
  • a:調用方法

    class JavaObject {
        public static void main(String [] args) {
            //Car c1 = new Car();  //建立有名字的對象
            //c1.run();
    
            //new Car().run();   //匿名對象調用完就變成垃圾了
            //new Car().run();   //匿名對象只適合對方法的一次調用,由於調用屢次就會產生多個對象,不如用有名字對象,不然浪費內存
            //匿名對象能夠調用屬性,可是沒有意義,由於調用後就變成垃圾,若是須要賦值仍是用有名字對象
            new Car().color = "red";
            new Car().num = 23;
            new Car().run();
            }
    }
    class Car {
        String color;
        int num;
        public void run() {
            System.out.println(color + "..." + num);
        }
    }
  • b:匿名對象能夠做爲實際參數傳遞

    class JavaObject {
        public static void main(String [] args) {
            /*Car c1 = new Car();  //建立有名字的對象
            c1.color = "red";
            c1.num = 8;
            c1.run();*/
    
            //Car c1 = new Car();
            //method(c1);
            //method(new Car());
    
            //Car c2 = new Car();
            //method(c2);
            //method(new Car());
    
            for (int i = 0;i < 10 ;i ++ ) {
                method(new Car());
            }
        }
        //抽取方法,提升代碼的複用性 protected  default
        public static void method(Car cc) { //Car cc = new Car();
            cc.color = "red";
            cc.num = 8;
            cc.run();
        }
    }

8.封裝的概述(掌握)

  • A:封裝概述

    • 是指隱藏對象的屬性和實現細節,僅對外提供公共訪問方式。
  • B:封裝好處

    • 隱藏實現細節,提供公共的訪問方式
    • 提升了代碼的複用性
    • 提升安全性。
  • C:封裝原則

    • 將不須要對外提供的內容都隱藏起來。
    • 把屬性隱藏,提供公共方法對其訪問。

9.private關鍵字的概述和特色(掌握) public protected default

  • A:人類賦值年齡的問題
  • B:private關鍵字特色

    • a:是一個權限修飾符
    • b:能夠修飾成員變量和成員方法
    • c:被其修飾的成員只能在本類中被訪問
  • C:案例演示

    • 封裝和private的應用:
    • A:把成員變量用private修飾
    • B:提供對應的getXxx()和setXxx()方法
    • private僅僅是封裝的一種體現形式,不能說封裝就是私有(講包時會有更好的理解)
public class JavaObject {
    public static void main(String [] args) {
        System.out.println("");
            Person p1 = new Person();
            p1.name = "張三";
            //p1.age = 23;
            //p1.speak();
            p1.setAge(-17);
            //int age1 = p1.getAge();
            System.out.println(p1.getAge());
    }
}
class Person {
    String name;
    private int age;         //私有成員變量
    public void setAge(int a) {  //a = 17 //對外提供公共的訪問方法
        if (a > 18 && a<120) {
            age = a;
        } else {
            System.out.println("輸入有誤");
        }
    }
    public int getAge() {  //對外提供公共的訪問方法
        return age;
    }
    public void speak() {
        System.out.println(name + "..." + age);
    }
}

10.this關鍵字的概述和應用(掌握)

  • A:this關鍵字特色

    • 表明當前對象的引用 (誰來調用我,我就表明誰)
  • B:案例演示

    • this的應用場景
    • 用來區分紅員變量和局部變量重名,調用成員變量
public class JavaObject {
    public static void main(String [] args) {
        System.out.println("");
            Person p1 = new Person();
            p1.setName("張三");
            p1.setAge(23);
            System.out.println(p1.getName() + "..." + p1.getAge());
            Person p2 = new Person();
            p2.setName("李四");
            p2.setAge(32);
            p2.speak();
    }
}
class Person {
    private String name;
    private int age;
    public void setName(String name) {
        this.name = name;//在這裏this表明p1的地址值
    }
    public String getName() {
        return name;
    }
    public void setAge(int age) {  //a = 17
        if (age > 18 && age<120) {
            this.age = age;
        } else {
            System.out.println("輸入有誤");
        }
    }
    public int getAge() {
        return age;
    }

    public void speak() {
        System.out.println(name + "..." + age);
    }
}

11.手機類代碼及其測試(掌握)

  • 把手機類寫成一個標準類,而後建立對象測試功能。
  • 手機類

    • 屬性:品牌brand,價格price
    • 行爲:打電話call,發短信sendMessage,玩遊戲playGame
    • 成員方法對應的getXxx()和setXxx()方法
public class JavaObject {    //建立對象phone  
    public static void main(String [] args) {
        Phone p1 = new Phone();  //01,主方法聲明p1,堆內存建立實體
        p1.setBrand("Apple");    //03進棧內存 賦值brand
        p1.setPrice(5288);  //05price

        System.out.println(p1.getBrand() + "..." + p1.getPrice());//09
    }
}

class Phone {
    private String brand;     //品牌   02null
    private int price;        //價格    0



    public void setBrand(String brand) {   //設置品牌04賦值
        this.brand = brand;
    }
    public String getBrand() {     //獲取品牌07
        return brand;
    }


    public void setPrice(int price) {        //設置價格 06
        this.price = price;
    }
    public int getPrice() {            //獲取價格08
        return price;
    }


    public void call() {
        System.out.println("打電話");
    }
    public void sendMessage() {
    System.out.println("發信息");
    }
    public void palyGame() {
    System.out.println("打遊戲");
    }
}
相關文章
相關標籤/搜索