欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java中構(gòu)造方法set/get和toString的使用詳解

 更新時(shí)間:2019年07月01日 11:04:22   作者:望穿秋水見(jiàn)伊人  
這篇文章主要介紹了Java中構(gòu)造方法set/get和toString的使用詳解,構(gòu)造函數(shù)的最大作用就是創(chuàng)建對(duì)象時(shí)完成初始化,當(dāng)我們?cè)趎ew一個(gè)對(duì)象并傳入?yún)?shù)的時(shí)候,會(huì)自動(dòng)調(diào)用構(gòu)造函數(shù)并完成參數(shù)的初始化,需要的朋友可以參考下

一、構(gòu)造函數(shù)

構(gòu)造函數(shù)的最大作用就是創(chuàng)建對(duì)象時(shí)完成初始化,當(dāng)我們?cè)趎ew一個(gè)對(duì)象并傳入?yún)?shù)的時(shí)候,會(huì)自動(dòng)調(diào)用構(gòu)造函數(shù)并完成參數(shù)的初始化。如下:

public class Test01 {
  private String name;
  //有參構(gòu)造函數(shù)
  public Test01(String name) {
    this.name = name;
  }
  public static void main(String[] args) {
    Test01 t=new Test01("Wade");
    System.out.println(t.name);
  }
}

運(yùn)行結(jié)果是“Wade”

插一句,插入構(gòu)造函數(shù)快捷鍵:alt+insert,Constructor(構(gòu)造函數(shù))

這就說(shuō)明在我們創(chuàng)建Test01對(duì)象時(shí),會(huì)自動(dòng)調(diào)用構(gòu)造函數(shù)完成初始化,這時(shí)程序中的name屬性就成了Wade。上面說(shuō)到構(gòu)造函數(shù)是為了在new對(duì)象傳入?yún)?shù)后完成屬性的初始化。但是 ,為什么我程序中不寫(xiě)構(gòu)造函數(shù)依然可以完成初始化。

1.如果不寫(xiě)構(gòu)造函數(shù),程序會(huì)自動(dòng)生成一個(gè)無(wú)參數(shù)無(wú)操作的構(gòu)造函數(shù)(默認(rèn)的,隱藏)。

2.如果寫(xiě)了構(gòu)造函數(shù),則自定義構(gòu)造函數(shù)會(huì)覆蓋無(wú)參數(shù)構(gòu)造函數(shù)。

3.如果只寫(xiě)了有參數(shù)的構(gòu)造函數(shù),且不存在無(wú)參數(shù)的構(gòu)造函數(shù),將不能以 new XXX(); 這樣的方式實(shí)例化對(duì)象,在實(shí)例化對(duì)象代碼中,new XXX("***"); 括號(hào)中的參數(shù)必須與構(gòu)造函數(shù)的參數(shù)保持一致,否則報(bào)錯(cuò)。(當(dāng)然你也可以生成對(duì)象后通過(guò)他們的set、get方法進(jìn)行賦值。)

所以,比較穩(wěn)妥也是較常用的方式是在java類(lèi)中同時(shí)定義無(wú)參構(gòu)造函數(shù)和有參構(gòu)造函數(shù),代碼如下:

public class Test01 {
  private String name;
  //有參構(gòu)造函數(shù)
  public Test01(String name) {
    this.name = name;
  }
  //無(wú)參構(gòu)造函數(shù)
  public Test01() {
  }
  public static void main(String[] args) {
    //既可以調(diào)用有參構(gòu)造函數(shù)實(shí)例化對(duì)象
    Test01 t=new Test01("Wade");
    //又可以調(diào)用有參構(gòu)造函數(shù)實(shí)例化對(duì)象
    Test01 t1=new Test01();
    System.out.println(t.name+","+t1.name);
  }
}

運(yùn)行結(jié)果是“Wade,null”

這樣在實(shí)際使用中會(huì)非常方便的。

二、set()/get()方法

我們先來(lái)看看set和get這兩個(gè)詞的表面意思,set是設(shè)置的意思,而get是獲取的意思,顧名思義,這兩個(gè)方法是對(duì)數(shù)據(jù)進(jìn)行設(shè)置和獲取用的。

然后我們來(lái)了解一下JAVA面向?qū)ο缶幊讨械姆忾]性和安全性。封閉性即對(duì)類(lèi)中的域變量進(jìn)行封閉操作,即用private來(lái)修飾他們,如此一來(lái)其他類(lèi)則不能對(duì)該變量訪(fǎng)問(wèn)。這樣我們就將這些變量封閉在了類(lèi)內(nèi)部,這樣就提高了數(shù)據(jù)的安全性,當(dāng)我們想要操作這些域變量怎么辦呢?我們可以通過(guò)兩種方法,第一中即通過(guò)public方式的構(gòu)造器(或稱(chēng)構(gòu)造函數(shù)),對(duì)象一實(shí)例化就對(duì)該變量賦值。第二種就是通過(guò)上面提到的set和get方法,這里我舉一個(gè)特定的例子,我定義一個(gè)Person類(lèi),該類(lèi)中有name、age這兩個(gè)私有域變量,然后我定義setname()、getname()、setage()、getage()這四個(gè)方法,通過(guò)這四個(gè)方法來(lái)實(shí)現(xiàn)對(duì)name和age的操作。這樣一來(lái),我不用直接對(duì)Person類(lèi)中的域變量操作,而是通過(guò)set和get方法間接地操作這些變量,這樣就能提高域變量的安全性,同時(shí)又保證了域變量的封裝型。

現(xiàn)在以上述代碼為例,添加set/get方法

同樣使用快捷鍵:alt+insert,Getter and Setter

public class Test01 {
  private String name;
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  //有參構(gòu)造函數(shù)
  public Test01(String name) {
    this.name = name;
  }
  //無(wú)參構(gòu)造函數(shù)
  public Test01() {
  }
  public static void main(String[] args) {
    //既可以調(diào)用有參構(gòu)造函數(shù)實(shí)例化對(duì)象
    Test01 t=new Test01("Wade");
    //又可以調(diào)用無(wú)參構(gòu)造函數(shù)實(shí)例化對(duì)象
    Test01 t1=new Test01();
	//使用set()方法給屬性賦值
    t.setName("CP3");
	//傳統(tǒng)方式賦值
    t1.name="Rose";
	//使用get()方法獲取屬性值
    System.out.println("t:"+t.getName()+","+"t1:"+t1.name);
	//在同一個(gè)類(lèi)中,t.getName()和t.name效果是一樣的,但如果不是同一個(gè)類(lèi),屬性是私有的,就只能使用t.getName(),set()方法也是一樣的。
  }
}

運(yùn)行結(jié)果是“t:CP3,t1:Rose”

這就是java編程語(yǔ)言的封裝思想,希望大家好好理解。

三、toString()方法

Object類(lèi)具有一個(gè)toString()方法,你創(chuàng)建的每個(gè)類(lèi)都會(huì)繼承該方法。它返回對(duì)象的一個(gè)String表示,并且對(duì)于調(diào)試非常有幫助。然而對(duì)于默認(rèn)的toString()方法往往不能滿(mǎn)足需求,需要覆蓋這個(gè)方法。toString()方法將對(duì)象轉(zhuǎn)換為字符串。

將上述代碼最后加上

System.out.println(t.toString());
System.out.println(t1.toString());

運(yùn)行結(jié)果是

全限定名@地址首地址
Test01@6d6f6e28
Test01@135fbaa4

這是什么呢?是對(duì)象的地址值,但這不是我們需要的信息,我們想要對(duì)象的各種屬性值,所以需要重寫(xiě)toString()方法。

同樣使用快捷鍵:alt+insert,toString()

public class Test01 {
  private String name;
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  //有參構(gòu)造函數(shù)
  public Test01(String name) {
    this.name = name;
  }
  //無(wú)參構(gòu)造函數(shù)
  public Test01() {
  }
    //重寫(xiě)toString()方法,可以自定義
  @Override
  public String toString() {
    return "Test01{" +
        "name='" + name + '\'' +
        '}';
  }
  public static void main(String[] args) {
    //既可以調(diào)用有參構(gòu)造函數(shù)實(shí)例化對(duì)象
    Test01 t=new Test01("Wade");
    //又可以調(diào)用無(wú)參構(gòu)造函數(shù)實(shí)例化對(duì)象
    Test01 t1=new Test01();
    //使用set()方法給屬性賦值
    t.setName("CP3");
    //傳統(tǒng)方式賦值
    t1.name="Rose";
    //使用get()方法獲取屬性值
    System.out.println("t:"+t.getName()+","+"t1:"+t1.name);
    //在同一個(gè)類(lèi)中,t.getName()和t.name效果是一樣的,但如果不是同一個(gè)類(lèi),屬性是私有的,就只能使用t.getName(),set()方法也是一樣的。
    System.out.println(t.toString());
    System.out.println(t1.toString());
  }
}

運(yùn)行結(jié)果是

t:CP3,t1:Rose
Test01{name='CP3'}
Test01{name='Rose'}

這樣就得到我們想要的信息了,這就是重寫(xiě)toString()在java類(lèi)中的基本用法了。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java面向?qū)ο笾^承的概念詳解

    Java面向?qū)ο笾^承的概念詳解

    這篇文章主要介紹了Java面向?qū)ο笾^承的概念詳解,Java是一種面向?qū)ο蟮木幊陶Z(yǔ)言,繼承是實(shí)現(xiàn)面向?qū)ο缶幊痰幕A(chǔ)之一。通過(guò)繼承,我們可以使代碼更具可讀性、可重用性和可維護(hù)性,從而提高程序的效率和可靠性,需要的朋友可以參考下
    2023-04-04
  • 完美解決idea無(wú)法搜索下載插件的問(wèn)題

    完美解決idea無(wú)法搜索下載插件的問(wèn)題

    這篇文章主要介紹了完美解決idea無(wú)法搜索下載插件的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09
  • Tornadofx學(xué)習(xí)筆記之IconTextFx開(kāi)源庫(kù)整合5000+個(gè)字體圖標(biāo)

    Tornadofx學(xué)習(xí)筆記之IconTextFx開(kāi)源庫(kù)整合5000+個(gè)字體圖標(biāo)

    這篇文章主要介紹了Tornadofx學(xué)習(xí)筆記之IconTextFx開(kāi)源庫(kù)整合5000+個(gè)字體圖標(biāo)的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-12-12
  • Spring AOP之@Around,@AfterReturning使用、切不進(jìn)去的解決方案

    Spring AOP之@Around,@AfterReturning使用、切不進(jìn)去的解決方案

    這篇文章主要介紹了Spring AOP之@Around,@AfterReturning使用、切不進(jìn)去的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • VScode 打造完美java開(kāi)發(fā)環(huán)境最新教程

    VScode 打造完美java開(kāi)發(fā)環(huán)境最新教程

    這篇文章主要介紹了VScode 打造完美java開(kāi)發(fā)環(huán)境最新教程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • Java?guava框架LoadingCache及CacheBuilder本地小容量緩存框架總結(jié)

    Java?guava框架LoadingCache及CacheBuilder本地小容量緩存框架總結(jié)

    Guava?Cache本地緩存框架主要是一種將本地?cái)?shù)據(jù)緩存到內(nèi)存中,但數(shù)據(jù)量并不能太大,否則將會(huì)占用過(guò)多的內(nèi)存,本文給大家介紹Java?guava框架?LoadingCache及CacheBuilder?本地小容量緩存框架總結(jié),感興趣的朋友一起看看吧
    2023-12-12
  • 使用Java實(shí)現(xiàn)5種負(fù)載均衡算法實(shí)例

    使用Java實(shí)現(xiàn)5種負(fù)載均衡算法實(shí)例

    負(fù)載均衡指由多臺(tái)服務(wù)器以對(duì)稱(chēng)的方式組成一個(gè)服務(wù)器集合,每臺(tái)服務(wù)器都具有等價(jià)的地位,都可以單獨(dú)對(duì)外提供服務(wù)而無(wú)須其他服務(wù)器的輔助,這篇文章主要給大家介紹了關(guān)于使用Java實(shí)現(xiàn)5種負(fù)載均衡算法的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • 淺談Storm在zookeeper上的目錄結(jié)構(gòu)

    淺談Storm在zookeeper上的目錄結(jié)構(gòu)

    這篇文章主要介紹了淺談Storm在zookeeper上的目錄結(jié)構(gòu)的相關(guān)內(nèi)容,涉及storm使用zookeeper的操作以及詳細(xì)結(jié)構(gòu)圖,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-10-10
  • Java使用DFA算法實(shí)現(xiàn)敏感詞過(guò)濾的示例代碼

    Java使用DFA算法實(shí)現(xiàn)敏感詞過(guò)濾的示例代碼

    很多項(xiàng)目中都會(huì)有一個(gè)敏感詞管理模塊,本文主要介紹了Java使用DFA算法實(shí)現(xiàn)敏感詞過(guò)濾的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • java使用lambda表達(dá)式多條件排序方式

    java使用lambda表達(dá)式多條件排序方式

    這篇文章主要介紹了java使用lambda表達(dá)式多條件排序方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09

最新評(píng)論