Java 從入門到進階之路(六)
- 2019 年 10 月 3 日
- 筆記
之前的文章我們介紹了 Java 的數組,本章我們來看一下 Java 的對象和類。
Java 是一種面向對象語言,那什麼是對象呢,對象在程式語言中屬於一個很寬泛的概念,我們可以認為萬事萬物都是對象,每個對象都有其狀態和行為,例如一隻狗會有顏色,品種,性別等狀態,也有跑,吃,睡等行為。
在程式語言中,會用一個類來承載這個對象,類是一個模板,它描述一類對象的行為和狀態。
在之前的文章中我們沒有引入對象的概念,如果我們想要列印輸出一個人的基本資訊,如下:
1 public class HelloWorld { 2 public static void main(String[] args) { 3 String name = "zhangsan"; 4 int age = 18; 5 String gender = "男"; 6 print(name,age,gender); // 姓名:zhangsan 年齡:18 性別:男 7 } 8 9 static void print(String name, int age, String gender) { 10 System.out.print("姓名:"+ name); 11 System.out.print("年齡:"+ age); 12 System.out.print("性別:"+ gender); 13 } 14 }
上面其實是一個面向過程的編程,我們先定義一個 print 方法,分別傳入姓名,年齡,性別,然後再分別列印輸出,我們就可以定義變數,年齡,性別,調用該 print 方法來實現我們想要的功能。
其中有一個問題就是當我們需要再次輸出另一個人的資訊時,我們需要再次將 name,age,gender 傳入,其實我們可以將這三個變數定義到一個對象中來使用,如下:
1 public class HelloWorld { 2 public static void main(String[] args) { 3 Emp e = new Emp(); // 創建一個 Emp 對象 4 e.name = "zhangsan"; 5 e.age = 18; 6 e.gender = "男"; 7 print(e); // 姓名:zhangsan 年齡:18 性別:男 8 } 9 10 static void print(Emp e) { 11 System.out.print("姓名:"+ e.name); 12 System.out.print("年齡:"+ e.age); 13 System.out.print("性別:"+ e.gender); 14 } 15 } 16 17 class Emp{ 18 String name; 19 int age; 20 String gender; 21 }
在上面的程式碼中,我們將 print 方法中傳入的變數變成了一個 Emp 對象,Emp 對象是我們自己定義出來的,它和我們之前所講的 Array 其實是一個道理: arr = new int[5]; ,生成一個 5 個長度的數組。
在上面的程式碼中,我們定義的 print 方法其實作用就是用於輸出列印我們需要的資訊,我們同樣也可以將其放到我們定義的 Emp 類中,如下:
1 public class HelloWorld { 2 public static void main(String[] args) { 3 Emp e = new Emp(); // 創建一個 Emp 對象 4 e.name = "zhangsan"; 5 e.age = 18; 6 e.gender = "男"; 7 e.print(); // 姓名:zhangsan 年齡:18 性別:男 8 } 9 } 10 11 class Emp { 12 String name; 13 int age; 14 String gender; 15 16 void print() { 17 System.out.print("姓名:" + name); 18 System.out.print("年齡:" + age); 19 System.out.print("性別:" + gender); 20 } 21 }
至此我們其實就已經果果面向對象的思維定義了一個類,當我們需要再定義另一個人的資訊時,直接調用該對象的屬性和方法就可以了。
在我們初學程式語言的時候,都是由面向過程慢慢開始的深入到面向對象的,但面向過程由很多缺點,如下:
1、缺乏對數據的封裝
2、數據和方法分離了
如上面的例子中最開始我們需要什麼數據都是先自己定義,數據 name age gende 和方法 print 是分開的,後來我們改為統一到一個 Emp 類中,這樣就做到了數據和方法的統一。
我們接下來看下面的程式碼:
1 public class HelloWorld { 2 public static void main(String[] args) { 3 Emp e = new Emp(); // 創建一個 Emp 對象 4 e.print(); // 姓名:null 年齡:0 性別:null 5 } 6 } 7 8 class Emp { 9 String name; 10 int age; 11 String gender; 12 13 void print() { 14 System.out.print("姓名:" + name); 15 System.out.print("年齡:" + age); 16 System.out.print("性別:" + gender); 17 } 18 }
在創建 Emp 對象後,我們並沒有對類的 name age 和 gender 進行賦值,直接調用 print() 方法,結果並沒有出現編譯錯誤,這是由於在我們定義一個變數的時候,java 會為我們提供一個默認的值,字元串為 null,數字為 0。