Java類的定義與類的例項化
阿新 • • 發佈:2019-11-29
目錄
- Java類的定義與類的例項化
- 類的定義
- 定義一個簡單的類
- 定義一個成員變數
- 定義一個方法
- 定義一個構造器
- 類的例項化
- 建立物件及使用物件:
- 建立物件的過程在記憶體中的表現
- 類的定義
Java類的定義與類的例項化
類的定義
面向物件的程式設計中,類可以看作是我們自定義的資料型別,那麼,如何能更加優美,更加高效地定義它就顯得尤為重要。
類中的成員有很多,每一部分都是十分關鍵的,畢竟“面向物件”在Java學習中真的很重要,許許多多的Java開發者定義出來的類等待著我們去使用,加油!攻克它!
直接上程式碼:
package com.my.pac02; /** * @author Summerday * @date 2019/11/26 21:40 */ //類名和檔名一致,且包含main方法 public class CatTest{ //程式入口 public static void main(String[] args) { //建立物件 Cat cat = new Cat(); //為物件的屬性賦值 cat.name = "sink"; cat.isMale = true; //通過物件呼叫方法 cat.sleep(); cat.jump(); cat.laughAt("Susan"); System.out.println(cat.isNotMale()); //列印引用變數的值 System.out.println(cat); //建立一個新的引用變數並指向原先的物件 Cat otherCat = cat; System.out.println(otherCat); System.out.println(otherCat.name);//"sink" //將cat和實際物件之間的引用消除 cat = null; } } //定義一個Cat類 class Cat{ //構造方法 Cat() { System.out.println("cat is cute."); } //成員變數 String name; int age; boolean isMale; String color = "Blue"; //方法 void sleep(){ System.out.println(name+"is sleeping---"); } public void jump() { System.out.println(name+"is jumping---"); } public void laughAt(String otherName) { System.out.println(name+"is laughing at "+otherName); } //返回boolean型別的方法 boolean isNotMale() { return !isMale; } }
定義一個簡單的類
[修飾符] class 類名
{
(零個到多個)構造器...
(零個到多個)成員變數(屬性)...
(零個到多個)方法...
}
- [修飾符]修飾類時可以是上面程式碼中的public,或者final,abstract,也可以省略不寫,但不建議使用private和protected。參考:
Java的外部類為什麼不能使用private、protected進行修飾 - 類名命名規範:要見名知義,意思是需要多個有意義的英文單片語成,每個單詞首字母大寫,規範這種東西,建議遵守!養成好習慣。
- 上面三種成員(構造器,成員變數,方法)都可以定義零個或多個,但是都是零個就變成了空類,沒啥意義。
定義一個成員變數
[修飾符] 型別 成員變數名 [=預設值];
//例如
boolean isMale;
String color = "Blue";
- 成員變數包括例項變數和類變數,static修飾的成員變數稱作類變數,關於static之後再細講。
定義一個方法
[修飾符] 返回值型別 方法名(形參列表)
{
零條到多條可執行語句組成的方法體...
}
//例如
void sleep(){
System.out.println(name+"is sleeping---");
}
public void jump() {
System.out.println(name+"is jumping---");
}
public void laughAt(String otherName)
{
System.out.println(name+"is laughing at "+otherName);
}
//返回boolean型別的方法
boolean isNotMale() {
return !isMale;
}
定義一個構造器
[修飾符] 構造器名 (形參列表)
{
(零條到多條可執行語句組成的構造器執行體...
}
//例如
//構造方法
Cat() {
System.out.println("cat is cute.");
}
- 構造器用於構造類的例項,也就是建立某個類的物件時會自動呼叫構造方法,之後會討論。
- 構造器名一定要和類名相同!
- 沒有定義構造器的話,系統會提供預設的構造器。
設計類時的具體細節,接下來將會一一展開,還有未涉及到的內部類和程式碼塊部分,之後將會進行學習,暫且從這三個部分展開探究。
類的例項化
通過類構造屬於該類物件的過程就叫做類的例項化。物件是具體存在的事物,也稱作例項,可以呼叫類中定義的例項變數以及方法。(不考慮static修飾變數的情況下)
建立物件及使用物件:
//使用Cat類建立了Cat型別的物件
//並呼叫Cat類的構造器,返回Cat的例項,賦值給變數cat
Cat cat = new Cat();
//訪問cat的例項變數name和isMale,併為他們賦值
cat.name = "sink";
cat.isMale = true;
//呼叫cat的方法
cat.sleep();
cat.jump();
cat.laughAt("Susan");
//輸出isNotMale()方法的返回值
System.out.println(cat.isNotMale());
- 如果訪問許可權允許的情況下(訪問許可權涉及到private等關鍵字,暫且不談),類中定義的方法和成員變數都可以通過類或例項來呼叫。
- 建立物件:
型別 例項名 = new 型別(引數列表);
例如:Cat cat = new Cat();
- 呼叫類成員變數或方法:
類.類變數或類.方法
或例項.例項變數或例項.方法
,類變數涉及static關鍵字,也是暫且放一邊,之後繼續回顧。
可以這麼理解:定義類就是為了建立許許多多該類的例項,這些例項具有相同的特徵。
建立物件的過程在記憶體中的表現
類是一種引用資料型別:也就是說,在棧記憶體裡的引用變數並不是真正儲存物件的成員變數,而是它的引用,實際的成員變數藏在堆記憶體中,這一點類似於前面提到過的陣列型別。而且,可以知道,棧記憶體中儲存的是實際物件在堆記憶體中的地址值,可以直接列印引用變數cat的值驗證。
- 建立物件
//建立物件,並初始化
Cat cat = new Cat();
- 訪問例項變數
//訪問例項變數
cat.name = "sink";
cat.isMale = true;
Java不允許直接訪問堆記憶體中的物件,只能通過該物件的引用操作該物件。
另外,堆記憶體中的同一個物件可以由棧記憶體中多個引用變數所指向。例如:
//把引用變數cat賦值給另一個引用變數otherCat
Cat otherCat = cat;
這時,cat和otherCat都在棧記憶體中被建立,且他們都指向了原先cat所指向的那塊堆記憶體,所以他們操作的是同一個實際物件。
堆記憶體的物件沒有任何變數指向時,就會在一段時間內作為“垃圾”被Java的垃圾回收機制回收,釋放物件所佔用的記憶體區。
所以想讓他提前釋放,直接給引用變數賦值為null。
參考書籍:《瘋狂Java講