- 什麼是類? 什麼是對象?
類就是一個模板,對象就是這個模板產生出的實例。比如說類是一張圖紙,根據這個圖紙可以造出不同的房子(對象)
Java是面向對象的語言
- oop(面向對象)語言的三大特徵:
1.封裝性:用private修飾成員屬性,可以使該成員屬性僅在此類中有權訪問;
2.繼承性:java中可以使用繼承(extends)這種操作,來提高代碼重用性;
3.多態性:基類引用派生類對象,並且基類和派生類有同名的覆蓋 - 面向過程和麪向對象的比較
面向過程 (C):
程注重的是過程,在整個過程中所涉及的行爲,就是功能。
面向對象(java,c++):
注重的是對象,也就是參與過程所涉及到的主體。是通過邏輯將一個個功能實現連接起來。
舉例:
面向過程: 1.把冰箱打開 2. 把大象放入 3. 冰箱關起來
面向對象: 打開冰箱,儲存,關閉都是對冰箱的操作,是冰箱的行爲。冰箱就是一個對象,所以只要操作冰箱所具備的功能,都要定義在冰箱中。
-
java(面向對象)編程開發思路
1.找對象,
2.創建對象
3.使用以及擴展對象 -
成員方法的調用要通過實例化對象的引用來調用。
一個類可以實例化多個對象
當屬性值未初始化時,值爲對應類型的0值(如布爾爲flase)
class Person {
//屬性
public String name; 實例變量
public int age;
boolean flg;
public static int count;
public final int SIZE = 666;//實例變量
public static final int SIZE2 = 666;
//功能
public void fun() {
count++;
}
public static void fun2() {
System.out.println("count:"+count);
//System.out.println("name:"+name);
//eat();
}
public void eat() {
System.out.println(name+" "+age+"吃飯!");
}
public void sleep() {
System.out.println("睡覺!");
}
}
然後在主函數中實例化對象並進行相應操作
public class Main{
public static void main(String[] args) {
Person person = new Person();//通過new實例化對象
person.eat();//成員方法調用需要通過對象的引用調用
person.sleep();
//產生對象
實例化對象
Person person2 = new Person();
Person person3 = new Person();
}
}
- 靜態成員(static修飾)不屬於對象,不依賴與對象,無法通過對象的引用來調用,但可以通過類名來調用,類中static修飾的函數(靜態成員方法)無法訪問成員實例變量,因爲它不屬於對象。
class TestDemo{
public int a;
public static int count;
public static void change() {
count = 100;
//a = 10; error 不可以訪問非靜態數據成員
}
}
public class Main{
public static void main(String[] args) {
TestDemo.change();//無需創建實例對象 就可以調用
System.out.println(TestDemo.count);
}
}
-
爲什麼main函數是(static)靜態的?
如果沒有static,main函數就是一個普通的成員方法,想要運行就必須new一個對象對main函數進行引用,這樣主函數就沒有入口無法運行。 -
封裝 將成員屬性定義爲私有(private),只能通過類內部進行直接訪問
class Person {
private String name = "張三";
private int age = 18;
public void show() {
System.out.println("我叫" + name + ", 今年" + age + "歲");
}
}
class Test {
public static void main(String[] args) {
Person person = new Person();
person.show();
}
}
// 執行結果 我叫張三, 今年18歲
除此之外,還可以在類內通過getter和setter函數間接訪問和初始化屬性值
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
- 實例化一個對象步驟:
1.爲對象分配內存(new)
2.調用合適的構造函數(如果沒寫,會自己生成不帶參數的一個構造函數)
構造方法:是一種特殊方法, 使用關鍵字new實例化新對象時會被自動調用, 用於完成初始化操作.
1.方法名稱必須與類名稱相同
2.構造方法沒有返回值類型聲明
3.每一個類中一定至少存在一個構造方法(沒有明確定義,則系統自動生成一個無參構造)
構造函數可以重載(改變函數參數的個數及其類型)
-
this 代表當前對象的引用(並不是指當前對象)(地址)因爲
實例化一個對象分爲兩步:
1.爲對象分配內存(new)
2.調用合適的構造函數(如果沒寫,會自己生成不帶參數的一個構造函數)
編程中要習慣使用this
(當一個構造函數內用this調用另一個構造函數時,那一句只能放在第一句) -
實例代碼塊一般用於初始化實例成員變量。
靜態代碼塊一般用於初始化靜態成員屬性
實例代碼塊先於構造函數執行,靜態代碼塊(只會執行一次)優先於實例代碼塊執行
靜態>–實例>–構造函數 -
匿名對象
匿名只是表示沒有名字的對象. 沒有引用的對象稱爲匿名對象. 匿名對象只能在創建對象時使用. 如果一個對象只是用一次, 後面不需要用了, 可以考慮使用匿名對象.
class Person {
private String name;
private int age;
public Person(String name,int age) {
this.age = age;
this.name = name;
}
public void show() {
System.out.println("name:"+name+" " + "age:"+age);
}
}
public class Main {
public static void main(String[] args) {
new Person("張三",18).show();//通過匿名對象調用方法
}
}
// 執行結果 name:張三:18