天天看點

JAVA基礎再回首(四)——面向對象思想、類與對象、成員/局部變量、匿名對象、封裝、private、this、構造方法JAVA基礎再回首(四)——面向對象思想、類與對象、成員/局部變量、匿名對象、封裝、private、this、構造方法

JAVA基礎再回首(四)——面向對象思想、類與對象、成員/局部變量、匿名對象、封裝、private、this、構造方法

好久沒更了,畢業季的離别總令人傷感,我相信再見是為了我們更好的遇見。好了,來繼續學習吧!

一、面向對象思想

  • 概述: 面向對象是基于面向過程的程式設計思想
  • 特點:
    • 更符合我們思想習慣的思想
    • 可以将複雜的事情簡單化
    • 将我們從執行者變成了指揮者(角色發生了轉換)
  • 說了上面的概念,有的人肯定沒有明白和了解
  • 那麼,我們就針對面向對象思想舉幾個例子吧。

1.買電腦:

面向過程:我要了解電腦–了解我自己的需求–找對應的參數資訊–去中關村買電腦–讨價還價–買回電腦

面向對象:我知道我要買電腦 – 計算機老師去給我買 – 老師就買回來了

2.洗衣服:

面向過程:把衣服脫下–找一個盆–放點洗衣粉–加點水–把衣服扔進去–搓一搓–清洗衣服–擰幹–晾起來

面向對象:把衣服脫下–打開全自動洗衣機–扔進去–一鍵即可–晾起來

  • 列舉了上面兩個例子,我們可以看出,運用面向對象的思想可以很友善的解決我們的問題,同時我們也可以把面向對象思想的使用規則做以總結,讓我們更符合面向對象思想
    • A:首先分析有那些類
    • B:接着分析每個類應該有什麼
    • C:最後分析類與類的關系

我們知道了面向對象的使用規則,就來做一道練習吧!

練習:把大象裝進冰箱。

  • 分析:
    • 面向過程:
      • 動作有哪些呢?

        A:打開冰箱門

        B:裝進大象

        C:關閉冰箱門

    • 代碼展現:
class Demo {
                public static void main(String[] args) {
                    //調用方法
                    open();
                    in();
                    close();
                }

                public static void open() {
                    System.out.println("打開冰箱門");
                }

                public static void in() {
                    System.out.println("裝進大象");
                }

                public static void close() {
                    System.out.println("關閉冰箱門");
                }
            }
           
運作結果:
JAVA基礎再回首(四)——面向對象思想、類與對象、成員/局部變量、匿名對象、封裝、private、this、構造方法JAVA基礎再回首(四)——面向對象思想、類與對象、成員/局部變量、匿名對象、封裝、private、this、構造方法
  • 我們從面向對象的思想來分析,并實作代碼:
    • A:有哪些類呢?
      • 大象、冰箱、Demo
    • B:每個類有哪些東西呢?
      • 大象:
        • 進去
      • 冰箱:
        • 開門、關門
      • Demo:
        • main方法
    • C:類與類直接的關系是什麼呢?
      • Demo中使用大象和冰箱類的功能。

代碼實作:

class DaXiang {
                public static void in() {
                    System.out.println("裝進大象");
                }
            }

            class BingXiang {
                public static void open() {
                    System.out.println("打開冰箱門");
                }

                public static void close() {
                    System.out.println("關閉冰箱門");
                }
            }

            class Demo {
                public static void main(String[] args) {
                    //冰箱調用開門
                    BingXiang.open();
                    //大象調用進去
                    DaXiang.in();
                    //冰箱調用關門
                    BingXiang.close();
                }
            }
           
運作結果:
JAVA基礎再回首(四)——面向對象思想、類與對象、成員/局部變量、匿名對象、封裝、private、this、構造方法JAVA基礎再回首(四)——面向對象思想、類與對象、成員/局部變量、匿名對象、封裝、private、this、構造方法
是不是發現運作結果都是一樣的呀,但是對于運用面向對象思想實作的代碼,在以後的開發中是很好維護的,是以我們要運用面向對象的思想去程式設計。
  • 面向對象開發
    • 就是不斷的建立對象,使用對象,指揮對象做事情。
  • 面向對象設計
    • 其實就是在管理和維護對象之間的關系。
  • 面向對象特征
    • 封裝(encapsulation)
    • 繼承(inheritance)
    • 多态(polymorphism)

二、類與對象的關系

  • 類:是一組相關的屬性和行為的集合
    • 屬性——事物的基本描述,行為——事物的功能
    • Java語言中最基本的機關是類。是以,我們要用類來展現事物
  • 對象:是該類事物的具體展現
  • 舉例:
    • 類 ——學生就是類
    • 對象 ——班長就是一個對象

三、成員變量和局部變量的差別

  • 在類中的位置不同
    • 成員變量——類中方法外
    • 局部變量——方法内或者方法聲明上
  • 在記憶體中的位置不同
    • 成員變量——堆記憶體
    • 局部變量——棧記憶體
  • 生命周期不同
    • 成員變量——随着對象的存在而存在,随着對象的消失而消失
    • 局部變量——随着方法的調用而存在,随着方法的調用完畢而消失
  • 初始化值不同
    • 成員變量——有預設的初始化值
    • 局部變量——沒有預設的初始化值,必須先定義,指派,才能使用。

注意:成員變量和名稱可以不可和局部變量一樣呢?

答案當然是可以的,但是使用的時候要注意,先找小範圍,再找大範圍。

四、匿名對象

匿名對象:就是沒有名字的對象。

是對象的一種簡化表示形式

  • 匿名對象的兩種使用情況
    • 對象調用方法僅僅一次的時候
    • 作為實際參數傳遞
      我們來舉例說明:
//正常寫法
    Student s = new Student();
    s.age=;
    //匿名寫法
    new Student().age = ;

//我們可以看到,用匿名寫法時不用起名字就可以直接修改age的值了。
           
// 輸出學生的數量
System.out.println("一共有"+new Student().num + "個學生");

//這種方法就是作為實際參數傳遞
           

五、封裝(Encapsulation)

封裝屬于面向對象的三大特征之一。我們來一起學習它。
  • 封裝的概述:是指隐藏對象的屬性和實作細節,僅對外提供公共通路方式。
  • 好處:
    • 隐藏實作細節,提供公共的通路方式
    • 提高了代碼的複用性
    • 提高安全性
  • 原則:
    • 将不需要對外提供的内容都隐藏起來
    • 把屬性隐藏,提供公共方法對其通路
      我們來寫一個Demo
public class StudentDemo {

    public static void main(String[] args) {

        Student s = new Student();
        s.age=;    //給成員變量指派
        s.study();  //調用方法  
    }
}

class Student{

    String name;//姓名
    int age;    //年齡

    //定義學習的方法
    public void study(){
        System.out.println("學生愛學習");
    }
}
           
輸出結果:學生愛學習

六、private

  • private 關鍵字(意思是私有的)
    • 是一個權限修飾符。
    • 可以修飾成員(成員變量和成員方法)
    • 被private修飾的成員隻在本類中才能通路。
  • private最常見的應用:
    • 把成員變量用private修飾
    • 提供對應的getXxx()/setXxx()方法
    • 一個标準的案例的使用
我們一起寫一個Demo來學習private關鍵字
JAVA基礎再回首(四)——面向對象思想、類與對象、成員/局部變量、匿名對象、封裝、private、this、構造方法JAVA基礎再回首(四)——面向對象思想、類與對象、成員/局部變量、匿名對象、封裝、private、this、構造方法

在上面這個Demo中,我們可以發現,當我們用private修飾Student類中的成員變量時,在StudentDemo類中我們就不能調用它的成員變量age了。

上面我們也講到了, 被private修飾的成員隻在本類中才能通路。

那麼我們要怎麼去通路呢?這個時候java就給我們提供了一個方法,我們一起來看

public class StudentDemo {
    public static void main(String[] args) {

        Student s = new Student();
//      s.age=5;        //給成員變量指派
        s.setAge();    //給成員變量指派
        s.study();      //調用方法          
    }
}

class Student{

    private String name;//姓名
    private int age;    //年齡

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

    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}
           

七、this

this關鍵字:代表所在類的對象引用。簡單的說,它就代表目前類的一個對象。
  • 注意:
    • 方法被哪個對象調用,在該方法内部的this就代表那個對象
  • 用法:
    • 解決局部變量隐藏成員變量
      如果你們細心點就會發現,在上面我們寫的Demo中set方法中是有this的
public void setAge(int age) {
            this.age = age;
        }
           

八、構造方法

  • 作用概述:
    • 給對象的資料進行初始化
  • 格式:
    • 方法名與類名相同
    • 沒有傳回值類型,連void都沒有
    • 沒有具體的傳回值
我們來寫一個簡單的Demo
class Student {
    private String name; //null
    private int age; //0

    public Student() {
        System.out.println("這是構造方法");
    }
}
class StudentDemo {
    public static void main(String[] args) {
        //建立對象
        Student s = new Student();
    }
}
           
輸出結果:
JAVA基礎再回首(四)——面向對象思想、類與對象、成員/局部變量、匿名對象、封裝、private、this、構造方法JAVA基礎再回首(四)——面向對象思想、類與對象、成員/局部變量、匿名對象、封裝、private、this、構造方法
隻要我們建立了對象就是new了,就執行了構造方法
  • 注意:
    • 如果你不提供構造方法,系統會給出預設構造方法
    • 如果你提供了構造方法,系統将不再提供
    • 構造方法也是可以重載的
我們來完成一個重載的Demo
public class StudentDemo {

    public static void main(String[] args) {

        Student s1 = new Student();
        Student s2 = new Student("阿杜");
        Student s3 = new Student("阿杜",);
    }
}

class Student{
    private int age;    //年齡

    public Student(){
        System.out.println("這是構造");
    }
    public Student(String name){
        System.out.println(name);
    }
    public Student(String name,int age){
        System.out.println("這是構造"+age);
    }   
}
           
輸出結果:
JAVA基礎再回首(四)——面向對象思想、類與對象、成員/局部變量、匿名對象、封裝、private、this、構造方法JAVA基礎再回首(四)——面向對象思想、類與對象、成員/局部變量、匿名對象、封裝、private、this、構造方法
好了,面向對象這一張的内容很多,但是很重要,是以我們一定要學會他,部落格會陸續更新的,謝謝

繼續閱讀