
二狗子.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() : 在記憶體的
開辟一塊空間,完成具體對象初始化操作堆空間
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中調用并列印,可看到變量的預設值。
下圖展示了變量定以後的初始值: