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講義》


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM