亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java中類的定義與實例化詳解

 更新時間:2019年11月29日 08:28:57   作者:sumerday  
這篇文章主要給大家介紹了關(guān)于Java中類的定義與實例化的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用Java具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧

類的定義

面向?qū)ο蟮某绦蛟O(shè)計中,類可以看作是我們自定義的數(shù)據(jù)類型,那么,如何能更加優(yōu)美,更加高效地定義它就顯得尤為重要。

類中的成員有很多,每一部分都是十分關(guān)鍵的,畢竟“面向?qū)ο蟆痹贘ava學(xué)習(xí)中真的很重要,許許多多的Java開發(fā)者定義出來的類等待著我們?nèi)ナ褂?,加油!攻克它?/p>

直接上代碼:

package com.my.pac02;
/**
 * @author Summerday
 * @date 2019/11/26 21:40
 */
 //類名和文件名一致,且包含main方法
public class CatTest{
  //程序入口
  public static void main(String[] args) {
    //創(chuàng)建對象
    Cat cat = new Cat();
    //為對象的屬性賦值
    cat.name = "sink";
    cat.isMale = true;
    //通過對象調(diào)用方法
    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{
  //構(gòu)造方法
  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 類名
{
    (零個到多個)構(gòu)造器...
    (零個到多個)成員變量(屬性)...
    (零個到多個)方法...
}

[修飾符]修飾類時可以是上面代碼中的public,或者final,abstract,也可以省略不寫,但不建議使用private和protected。

參考:Java的外部類為什么不能使用private、protected進行修飾:

對于頂級類(外部類)來說,只有兩種修飾符:public和默認(default)。因為外部類的上一單元是包,所以外部類只有兩個作用域:同包,任何位置。因此,只需要兩種控制權(quán)限:包控制權(quán)限和公開訪問權(quán)限,也就對應(yīng)兩種控制修飾符:public和默認(default)。

如果類使用了private修飾符,說明是個內(nèi)部類。內(nèi)部類的上一級是外部類,那么對應(yīng)的有四種訪問控制修飾符:本類(private),同包(default),父子類(protected),任何位置(public)。當(dāng)一個內(nèi)部類使用了private修飾后,只能在該類的外部類內(nèi)部使用。

上面這些都是平時使用司空見慣的,但是為什么是這種情況呢?

可以想一下,一個java項目是不可能在一個class里面完成的。mvc模式中,是把類分為三層,一層層調(diào)用類。如果定義為私有的和受保護的就無法調(diào)用。換句話說,對于一個java文件,要么就是自己單獨運行,要么就是被其他程序作為庫調(diào)用,如果一個java文件的類被private修飾,那么是不是其他的程序或是類是無法使用它的,那么他作為一個單獨的文件就沒啥用了。如果它作為單個文件運行,類加載怎么找到它呢,因為它對外不可見。同時,也失去了類的存在意義。因此,類只有public和默認修飾符。

類名命名規(guī)范:要見名知義,意思是需要多個有意義的英文單詞組成,每個單詞首字母大寫,規(guī)范這種東西,建議遵守!養(yǎng)成好習(xí)慣。

上面三種成員(構(gòu)造器,成員變量,方法)都可以定義零個或多個,但是都是零個就變成了空類,沒啥意義。

定義一個成員變量

[修飾符] 類型 成員變量名 [=默認值];
//例如
boolean isMale;
String color = "Blue";

成員變量包括實例變量和類變量,static修飾的成員變量稱作類變量,關(guān)于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;
}

定義一個構(gòu)造器

[修飾符] 構(gòu)造器名 (形參列表)
{
  (零條到多條可執(zhí)行語句組成的構(gòu)造器執(zhí)行體...
}
//例如
//構(gòu)造方法
Cat() {
  System.out.println("cat is cute.");
}
  • 構(gòu)造器用于構(gòu)造類的實例,也就是創(chuàng)建某個類的對象時會自動調(diào)用構(gòu)造方法,之后會討論。
  • 構(gòu)造器名一定要和類名相同!
  • 沒有定義構(gòu)造器的話,系統(tǒng)會提供默認的構(gòu)造器。

設(shè)計類時的具體細節(jié),接下來將會一一展開,還有未涉及到的內(nèi)部類和代碼塊部分,之后將會進行學(xué)習(xí),暫且從這三個部分展開探究。

類的實例化

通過類構(gòu)造屬于該類對象的過程就叫做類的實例化。對象是具體存在的事物,也稱作實例,可以調(diào)用類中定義的實例變量以及方法。(不考慮static修飾變量的情況下)

創(chuàng)建對象及使用對象:

//使用Cat類創(chuàng)建了Cat類型的對象
//并調(diào)用Cat類的構(gòu)造器,返回Cat的實例,賦值給變量cat
Cat cat = new Cat();
//訪問cat的實例變量name和isMale,并為他們賦值
cat.name = "sink";
cat.isMale = true;
//調(diào)用cat的方法
cat.sleep();
cat.jump();
cat.laughAt("Susan");
//輸出isNotMale()方法的返回值
System.out.println(cat.isNotMale());
  • 如果訪問權(quán)限允許的情況下(訪問權(quán)限涉及到private等關(guān)鍵字,暫且不談),類中定義的方法和成員變量都可以通過類或?qū)嵗齺碚{(diào)用。
  • 創(chuàng)建對象:類型 實例名 = new 類型(參數(shù)列表);例如:Cat cat = new Cat();
  • 調(diào)用類成員變量或方法:類.類變量或類.方法或?qū)嵗?實例變量或?qū)嵗?方法,類變量涉及static關(guān)鍵字,也是暫且放一邊,之后繼續(xù)回顧。
    可以這么理解:定義類就是為了創(chuàng)建許許多多該類的實例,這些實例具有相同的特征。

創(chuàng)建對象的過程在內(nèi)存中的表現(xiàn)

類是一種引用數(shù)據(jù)類型:也就是說,在棧內(nèi)存里的引用變量并不是真正存儲對象的成員變量,而是它的引用,實際的成員變量藏在堆內(nèi)存中,這一點類似于前面提到過的數(shù)組類型。而且,可以知道,棧內(nèi)存中存儲的是實際對象在堆內(nèi)存中的地址值,可以直接打印引用變量cat的值驗證。

創(chuàng)建對象

//創(chuàng)建對象,并初始化
Cat cat = new Cat();


訪問實例變量

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


Java不允許直接訪問堆內(nèi)存中的對象,只能通過該對象的引用操作該對象。

另外,堆內(nèi)存中的同一個對象可以由棧內(nèi)存中多個引用變量所指向。例如:

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

這時,cat和otherCat都在棧內(nèi)存中被創(chuàng)建,且他們都指向了原先cat所指向的那塊堆內(nèi)存,所以他們操作的是同一個實際對象。

堆內(nèi)存的對象沒有任何變量指向時,就會在一段時間內(nèi)作為“垃圾”被Java的垃圾回收機制回收,釋放對象所占用的內(nèi)存區(qū)。
所以想讓他提前釋放,直接給引用變量賦值為null。

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

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。

相關(guān)文章

  • Spring超詳細講解注解開發(fā)

    Spring超詳細講解注解開發(fā)

    Spring是輕代碼而重配置的框架,配置比較繁重,影響開發(fā)效率,所以注解開發(fā)是一種趨勢。本文將通過示例為大家詳細講講Spring如何實現(xiàn)注解開發(fā),感興趣的可以學(xué)習(xí)一下
    2022-08-08
  • SpringCloud之熔斷監(jiān)控Hystrix Dashboard的實現(xiàn)

    SpringCloud之熔斷監(jiān)控Hystrix Dashboard的實現(xiàn)

    這篇文章主要介紹了SpringCloud之熔斷監(jiān)控Hystrix Dashboard的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • Java利用廣度優(yōu)先搜索實現(xiàn)抓牛問題

    Java利用廣度優(yōu)先搜索實現(xiàn)抓牛問題

    廣度優(yōu)先搜索是最簡便的圖的搜索算法之一,這一算法也是很多重要的圖的算法的原型。本文將利用廣度優(yōu)先搜索實現(xiàn)抓牛問題,感興趣的可以了解下
    2022-06-06
  • Java的垃圾強制回收實例分析

    Java的垃圾強制回收實例分析

    這篇文章主要介紹了Java的垃圾強制回收,結(jié)合實例形式分析了java垃圾強制回收的相關(guān)原理及實現(xiàn)方法,需要的朋友可以參考下
    2019-08-08
  • java數(shù)據(jù)結(jié)構(gòu)之希爾排序

    java數(shù)據(jù)結(jié)構(gòu)之希爾排序

    這篇文章主要為大家詳細介紹了java數(shù)據(jù)結(jié)構(gòu)之希爾排序的相關(guān)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • JAVA WSIMPORT生成WEBSERVICE客戶端401認證過程圖解

    JAVA WSIMPORT生成WEBSERVICE客戶端401認證過程圖解

    這篇文章主要介紹了JAVA WSIMPORT生成WEBSERVICE客戶端401認證過程圖解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-10-10
  • Java生成二維碼的實例代碼

    Java生成二維碼的實例代碼

    這篇文章主要介紹了Java生成二維碼的實例代碼,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2020-09-09
  • Java使用反射創(chuàng)建對象示例

    Java使用反射創(chuàng)建對象示例

    這篇文章主要介紹了Java使用反射創(chuàng)建對象,結(jié)合實例形式分析了java使用反射創(chuàng)建對象的具體實現(xiàn)方法及相關(guān)操作技巧,需要的朋友可以參考下
    2019-07-07
  • springboot 如何解決cross跨域請求的問題

    springboot 如何解決cross跨域請求的問題

    這篇文章主要介紹了springboot 如何解決cross跨域請求的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • java 題解LeetCode38外觀數(shù)列示例

    java 題解LeetCode38外觀數(shù)列示例

    這篇文章主要為大家介紹了java 題解LeetCode38外觀數(shù)列示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08

最新評論