天天看點

Java入門(一)---面向對象

Java入門(一)---面向對象

二狗子.jpeg

面向對象:

關注現實存在的事物的各個方面的資訊,從對象的角度出發,根據事物的特征進行程式設計。

類,是抽象的概念,可以了解為一個模型,用來确定對象将會擁有的特征(屬性)和行為(方法)

對象,是類的執行個體表現形式,一個實體。

  • 類的屬性:對象具有的各種靜态特征 (對象有什麼)
  • 類的方法:對象具有的各種動态行為 (對象能做什麼)

執行個體化

定義一個

Dog

類,有兩個屬性

name

age

,還有兩個方法,

run()

eat()

建立檔案

Dog.java

public class Dog {
    //成員屬性:name age
    String name;
    int age;
    //成員方法: run  eat
    public void run(){
        System.out.println("跑");
    }
    public void eat(){
        System.out.println("吃");
    }
}
           

接着,再定義一個用來測試的類,

TestDog.java

1 public class TestDog {
2    public static void main(String[] args){
3        Dog dog = new Dog();
4        dog.name = "灰灰";
5        dog.age = 2;
6        System.out.println(dog.name);
7        System.out.println(dog.age);
8        dog.eat();
9        dog.run();
    }
}
           

下邊來看下

TestDog.java

做了些什麼:

第一行第二行的基礎部分這裡不再贅述,直接看第三行,執行個體化對象

Dog dog = new Dog();

執行個體化對象的過程可以分為兩部分:

  • 聲明對象 Dog dog :在記憶體的

    棧空間

    開辟一塊空間, 此時對象是空的, 無法使用
  • 執行個體化對象 new Dog() : 在記憶體的

    堆空間

    開辟一塊空間,完成具體對象初始化操作
Java入門(一)---面向對象

image.png

通過指派操作,把堆空間的記憶體位址存放到了

dog

中:

Dog dog = new Dog();

關于對象的執行個體化操作,是通過new + 構造方法的形式來完成的。

構造方法

構造方法也稱為構造函數、構造器:

1.構造方法與類同名且沒有傳回值

2.隻能在對象執行個體化的時候調用(配合 new調用)

3.當沒有指定構造方法時,系統會自動添加無參的構造方法

4.當指定了構造方法,無論有參數還是無參數的構造方法,都不會自動添加無參數的構造方法

5.一個類中可以有多個構造方法,---構造方法重載,java會根據參數去自動選擇。

上邊的

Dog.java

沒有定義構造方法,在調用時系統自動幫我們添加無參數的構造方法,下邊我們添加上有參數的構造方法:

public class Dog {
    String name;
    int age;
    
    //帶參數的構造方法
    public Dog(String name, int age){

    }

    public void run(){
        System.out.println("跑");
    }
    public void eat(){
        System.out.println("吃");
    }
}
           

當我們使用帶參數的構造函數來進行初始化的時候,為了避免産生指派錯誤的情況,可以使用

this

關鍵字

this關鍵字

this代表目前對象的預設引用,上述代碼,

dog

就是目前對象

更改

Dog.java

public class Dog {
    String name;
    int age;

    //帶參數的構造方法
    public Dog(String name, int age){
        //把傳入的 name 指派給局部變量 name
        this.name = name;
        //把傳入的 age 指派給局部變量 age
        this.age = age;
    }

    public void run(){
        //調用成員方法eat,(這裡隻是示範this的使用 不關心邏輯)
        this.eat();
        System.out.println("跑");
    }
    public void eat(){
        //也可以不用this 直接調用成員方法run
        run();
        System.out.println("吃");
    }
}
           

補充知識

我們在類中定義變量後,其實變量是有初始值的,代碼說明:

建立

Demo.java

TestDemo.java

public class Demo {
    String name;
    int age;
    double d;
    boolean n;
}
           
public class TestDemo {
    public static void main(String[] args){
        Demo de = new Demo();
        System.out.println(de.name);
        System.out.println(de.age);
        System.out.println(de.d);
        System.out.println(de.n);
    }
}
運作結果:
null
0
0.0
false
           

上邊Demo.java中定義了四個不同類型的變量,直接在TestDemo.java中調用并列印,可看到變量的預設值。

下圖展示了變量定以後的初始值:

Java入門(一)---面向對象