您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關Java中如何實例化類,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
類的定義
package com.my.pac02; //類名和文件名一致,且包含main方法 public class CatTest{ //程序入口 public static void main(String[] args) { //創(chuàng)建對象 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); //創(chuàng)建一個新的引用變量并指向原先的對象 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進行修飾:
對于頂級類(外部類)來說,只有兩種修飾符:public和默認(default)。因為外部類的上一單元是包,所以外部類只有兩個作用域:同包,任何位置。因此,只需要兩種控制權限:包控制權限和公開訪問權限,也就對應兩種控制修飾符:public和默認(default)。
如果類使用了private修飾符,說明是個內部類。內部類的上一級是外部類,那么對應的有四種訪問控制修飾符:本類(private),同包(default),父子類(protected),任何位置(public)。當一個內部類使用了private修飾后,只能在該類的外部類內部使用。
上面這些都是平時使用司空見慣的,但是為什么是這種情況呢?
可以想一下,一個java項目是不可能在一個class里面完成的。mvc模式中,是把類分為三層,一層層調用類。如果定義為私有的和受保護的就無法調用。換句話說,對于一個java文件,要么就是自己單獨運行,要么就是被其他程序作為庫調用,如果一個java文件的類被private修飾,那么是不是其他的程序或是類是無法使用它的,那么他作為一個單獨的文件就沒啥用了。如果它作為單個文件運行,類加載怎么找到它呢,因為它對外不可見。同時,也失去了類的存在意義。因此,類只有public和默認修飾符。
類名命名規(guī)范:要見名知義,意思是需要多個有意義的英文單詞組成,每個單詞首字母大寫,規(guī)范這種東西,建議遵守!養(yǎng)成好習慣。
上面三種成員(構造器,成員變量,方法)都可以定義零個或多個,但是都是零個就變成了空類,沒啥意義。
定義一個成員變量
[修飾符] 類型 成員變量名 [=默認值]; //例如 boolean isMale; String color = "Blue";
成員變量包括實例變量和類變量,static修飾的成員變量稱作類變量,關于static之后再細講。
定義一個方法
[修飾符] 返回值類型 方法名(形參列表) { 零條到多條可執(zhí)行語句組成的方法體... } //例如 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; }
定義一個構造器
[修飾符] 構造器名 (形參列表) { (零條到多條可執(zhí)行語句組成的構造器執(zhí)行體... } //例如 //構造方法 Cat() { System.out.println("cat is cute."); }
構造器用于構造類的實例,也就是創(chuàng)建某個類的對象時會自動調用構造方法,之后會討論。
構造器名一定要和類名相同!
沒有定義構造器的話,系統(tǒng)會提供默認的構造器。
設計類時的具體細節(jié),接下來將會一一展開,還有未涉及到的內部類和代碼塊部分,之后將會進行學習,暫且從這三個部分展開探究。
類的實例化
通過類構造屬于該類對象的過程就叫做類的實例化。對象是具體存在的事物,也稱作實例,可以調用類中定義的實例變量以及方法。(不考慮static修飾變量的情況下)
創(chuàng)建對象及使用對象:
//使用Cat類創(chuàng)建了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等關鍵字,暫且不談),類中定義的方法和成員變量都可以通過類或實例來調用。
創(chuàng)建對象:類型 實例名 = new 類型(參數列表);例如:Cat cat = new Cat();
調用類成員變量或方法:類.類變量或類.方法或實例.實例變量或實例.方法,類變量涉及static關鍵字,也是暫且放一邊,之后繼續(xù)回顧。
可以這么理解:定義類就是為了創(chuàng)建許許多多該類的實例,這些實例具有相同的特征。
創(chuàng)建對象的過程在內存中的表現(xiàn)
類是一種引用數據類型:也就是說,在棧內存里的引用變量并不是真正存儲對象的成員變量,而是它的引用,實際的成員變量藏在堆內存中,這一點類似于前面提到過的數組類型。而且,可以知道,棧內存中存儲的是實際對象在堆內存中的地址值,可以直接打印引用變量cat的值驗證。
創(chuàng)建對象
//創(chuàng)建對象,并初始化 Cat cat = new Cat();
訪問實例變量
//訪問實例變量 cat.name = "sink"; cat.isMale = true;
Java不允許直接訪問堆內存中的對象,只能通過該對象的引用操作該對象。
另外,堆內存中的同一個對象可以由棧內存中多個引用變量所指向。例如:
//把引用變量cat賦值給另一個引用變量otherCat Cat otherCat = cat;
這時,cat和otherCat都在棧內存中被創(chuàng)建,且他們都指向了原先cat所指向的那塊堆內存,所以他們操作的是同一個實際對象。
堆內存的對象沒有任何變量指向時,就會在一段時間內作為“垃圾”被Java的垃圾回收機制回收,釋放對象所占用的內存區(qū)。
所以想讓他提前釋放,直接給引用變量賦值為null。
關于Java中如何實例化類就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。