文本關鍵字:類、屬性、行爲、實例化、對象java
說到類和對象,這都是兩個比較抽象的詞,若是用在程序中,那就更不知道是什麼意思了。其實你們能夠先不聯繫程序,咱們在對一大堆東西分類的時候天然是有一個標準的,符合某些特徵的分到一類,符合另一些特徵的分到另一類。在每一個類別中,每同樣東西都有相同的特徵,可是又有所差異,每同樣東西就比如一個一個的對象,是一個切切實實的東西,而分類的類別就好似是一個標準或者描述,會更抽象一些。編程
在編程中,咱們一般會藉助程序去實現不少應用系統,來知足平常生活中的須要,如網絡購物、人力資源管理等等。若是使用面向對象來開發,首先須要作的就是明確這個應用系統當中有哪些角色,這些角色都可以使用哪些功能,每種都有哪些本身的特徵。
咱們以一個教學管理系統爲例,主要的功能就是進行排課,記錄學生和教師的基本信息,記錄和統計學生的學習成績等。那這其中主要就涉及學生、教師、管理員三種角色,當有一批學生入學時,咱們要將學生的信息錄入系統,這就好像咱們一直在填的各類表格,每一個學生須要採集的信息都是固定的,不一樣的是信息的內容。
這就比如咱們定義了一個學生類,咱們想要收集的學生信息就是對這個類別的描述,學生有學號、有院系、有其餘的基本信息,這也是學生的固有特徵,因而咱們能夠用以下的代碼描述:網絡
// 用於描述學生的類 public class Student{ String sno;// 學號 String name;// 姓名 String college;// 學院 String major;// 專業 ... }
理解了程序中類的概念和表示方式後,對象就比較好理解了。簡單來講對象就是按照類的標準建立出來的一個具體能夠操做的東西,也就是一個個具體的學生。每一個學生都具有相同的特徵,可是能夠有不一樣的姓名、學院、專業等本身的信息。在程序運行時的體現就是內存中開闢了對應的空間,想要建立一個新的對象使用以下的代碼:ide
public class Test{ public static void main(String[] args){ // 變量類型 變量名稱 = new 類的構造器(); Student student = new Student(); // 大寫的Student就是咱們要使用的學生類型,名稱必須徹底一致 // 小寫的student就是由學生類建立出來的對象的名稱 // 也是咱們操做對象是直接使用的名稱 // new是用來建立對象的關鍵字,須要調用相應的構造器 // 有關於構造器的用法會在後續文章詳細說明,初學能夠記憶爲:類名(); } }
從上面的例子中咱們已經能夠看到,類至關因而一個模板或是像工廠的圖紙,對象則至關於按照這個標準和模具創造出來的個體,每個對象都具有相同的特徵。
在程序中的體現就是,使用class關鍵字定義一個類結構,而後在這個結構中對整個類進行描述,都具有哪些屬性,均可以產生行爲,可是隻有具體的對象能夠具有具體的屬性值和產生具體的行爲(有關於靜態的聲明將在另外的文章中單獨說明)。學習
咱們應該如何描述和定義一個類呢?咱們最開始寫的HelloWorld不也是一個類嘛?爲何沒這麼多亂七八糟的概念?下面咱們就來進一步解析。
從客觀世界的角度出發,好比小明上了大學,這就是一個具體的學生,他有學號、姓名、對應的學院、專業等等,這都是他我的的基本信息,除此以外,他還能夠進行多種活動,好比選課、考試、修改本身的部分信息等等。
那麼咱們從程序的角度出發,應該如何定義一個類呢?這取決於咱們的須要,對於一個教學管理系統來講,咱們關心的只是和學生學習相關的信息,學生可以選課、考試等等。對於一個後勤管理系統來講,咱們關心的則是學生的飯卡消費狀況,出入宿舍的時間,學生可以充值、消費、刷卡等等。因此如何定義和描述一個類,取決於咱們的應用系統須要,或者是題目的要求。測試
屬性指的就是所描述的類當前的狀態,也就是他本身的一些信息,直接在類下進行定義,和正常聲明一個變量的格式相同,能夠不指定初始值。code
行爲指的就是當前這個類所建立出的對象都能進行什麼樣的行爲,在程序上的表現就是方法,能夠被具體的對象來進行調用,在方法體中用代碼實現具體的功能。對象
// 用於描述學生的類 public class Student{ // 學生類的屬性 String sno;// 學號 String name;// 姓名 String college;// 學院 String major;// 專業 ... // 學生類的行爲 public void study(){ // 去學習 System.out.println("去上課"); } public void exam(){ // 去考試 System.out.println("去考試"); } }
在一般狀況下,咱們定義的一個類由四大部分構成:屬性、行爲、構造器以及其餘繼承Object的方法。也就是說都不存在能夠直接執行的main方法,而只是爲了定義一個咱們想要使用的類,那麼怎麼樣才能調用到,把咱們的類用起來呢?就是經過那些具有main方法的類,如最初咱們使用的HelloWorld,這就是一個最簡形式的可執行類。blog
public class HelloWorld{ public static void main(String[] args){ System.out.println("Hello World!"); } }
固然,咱們也能夠直接在類中添加main方法來測試運行,可是通常不會這樣作,由於會有一些權限的問題不可以測試完整,一般的辦法是新建一個單獨的測試類,來進行調用測試。繼承
// 調用時須要將兩個類放在同一目錄下(同一包中) public class Test{ public static void main(String[] args){ // 建立一個學生對象 Student student = new Student(); // 爲對象的屬性賦值 student.sno = "1130050152"; student.name = "小明"; student.college = "數學科學學院"; student.major = "信息與計算科學"; // 顯示對象的屬性值 System.out.println("該學生的名字是:" + student.name); // 經過對象調用方法,發生行爲 student.study(); student.exam(); } }
經過上面咱們已經知道對象的概念,以及如何使用建立和使用一個對象。接下來咱們再來明確一下類和對象,對象和對象之間的關係。
建立對象的過程也能夠被稱之爲實例化,對象也能夠被叫作類的實例。這個概念也很好理解,在類中只是定義了一系列的描述信息,真正去執行須要靠具體的對象,以一個類爲基準,能夠建立出不少對象。
對象與對象之間存在共同點,除了使用靜態聲明的屬性外,是不會互相影響的,這是一個很重要的特色。當咱們使用不一樣的對象去調用方法和輸出屬性信息時,雖然類當中的結構徹底一致,可是因爲對象所處的狀態(屬性值)可能不一樣,那麼方法執行的結果也會不一樣。
// 用於描述學生的類 public class Student{ // 學生類的屬性 String sno;// 學號 String name;// 姓名 double balance;// 餘額 ... // 學生類的行爲 public void recharge(double money){ // 對學生卡充值 balance += money; System.out.println("當前餘額爲" + balance); } public void getBalance(){ // 顯示卡內餘額 System.out.println("當前餘額爲" + balance); } }
// 測試類:將兩個類放在同一目錄下(同一包中) public class Test{ public static void main(String[] args){ // 建立第一個學生對象 Student student1 = new Student(); // 爲對象的屬性賦值 student1.balance = 23.70; // 調用方法 student1.getBalance(); student1.recharge(100.0); // 建立第二個學生對象 Student student2 = new Student(); // 爲對象的屬性賦值 student2.balance = 15.60; // 調用方法 student2.getBalance(); student2.recharge(50.0); } }
程序執行完畢後能夠再次輸出查看兩個對象的屬性值,不會互相影響。