Java類的定義與類的實例化

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的值驗證。code

  • 建立對象
//建立對象,並初始化
Cat cat = new Cat();

  • 訪問實例變量
//訪問實例變量
cat.name = "sink";
cat.isMale = true;

Java不容許直接訪問堆內存中的對象,只能經過該對象的引用操做該對象。htm

另外,堆內存中的同一個對象能夠由棧內存中多個引用變量所指向。例如:對象

//把引用變量cat賦值給另外一個引用變量otherCat
Cat otherCat = cat;

這時,cat和otherCat都在棧內存中被建立,且他們都指向了原先cat所指向的那塊堆內存,因此他們操做的是同一個實際對象。blog

堆內存的對象沒有任何變量指向時,就會在一段時間內做爲「垃圾」被Java的垃圾回收機制回收,釋放對象所佔用的內存區。
因此想讓他提早釋放,直接給引用變量賦值爲null。內存

參考書籍:《瘋狂Java講義》

相關文章
相關標籤/搜索