天天看點

java set 結構_Java中構造方法set/get和toString的使用詳解

一、構造函數

構造函數的最大作用就是建立對象時完成初始化,當我們在new一個對象并傳入參數的時候,會自動調用構造函數并完成參數的初始化。如下:

public class Test01 {

private String name;

//有參構造函數

public Test01(String name) {

this.name = name;

}

public static void main(String[] args) {

Test01 t=new Test01("Wade");

System.out.println(t.name);

}

}

運作結果是“Wade”

插一句,插入構造函數快捷鍵:alt+insert,Constructor(構造函數)

java set 結構_Java中構造方法set/get和toString的使用詳解

這就說明在我們建立Test01對象時,會自動調用構造函數完成初始化,這時程式中的name屬性就成了Wade。上面說到構造函數是為了在new對象傳入參數後完成屬性的初始化。但是 ,為什麼我程式中不寫構造函數依然可以完成初始化。

1.如果不寫構造函數,程式會自動生成一個無參數無操作的構造函數(預設的,隐藏)。

2.如果寫了構造函數,則自定義構造函數會覆寫無參數構造函數。

3.如果隻寫了有參數的構造函數,且不存在無參數的構造函數,将不能以 new XXX(); 這樣的方式執行個體化對象,在執行個體化對象代碼中,new XXX("***"); 括号中的參數必須與構造函數的參數保持一緻,否則報錯。(當然你也可以生成對象後通過他們的set、get方法進行指派。)

是以,比較穩妥也是較常用的方式是在java類中同時定義無參構造函數和有參構造函數,代碼如下:

public class Test01 {

private String name;

//有參構造函數

public Test01(String name) {

this.name = name;

}

//無參構造函數

public Test01() {

}

public static void main(String[] args) {

//既可以調用有參構造函數執行個體化對象

Test01 t=new Test01("Wade");

//又可以調用有參構造函數執行個體化對象

Test01 t1=new Test01();

System.out.println(t.name+","+t1.name);

}

}

運作結果是“Wade,null”

這樣在實際使用中會非常友善的。

二、set()/get()方法

我們先來看看set和get這兩個詞的表面意思,set是設定的意思,而get是擷取的意思,顧名思義,這兩個方法是對資料進行設定和擷取用的。

然後我們來了解一下JAVA面向對象程式設計中的封閉性和安全性。封閉性即對類中的域變量進行封閉操作,即用private來修飾他們,如此一來其他類則不能對該變量通路。這樣我們就将這些變量封閉在了類内部,這樣就提高了資料的安全性,當我們想要操作這些域變量怎麼辦呢?我們可以通過兩種方法,第一中即通過public方式的構造器(或稱構造函數),對象一執行個體化就對該變量指派。第二種就是通過上面提到的set和get方法,這裡我舉一個特定的例子,我定義一個Person類,該類中有name、age這兩個私有域變量,然後我定義setname()、getname()、setage()、getage()這四個方法,通過這四個方法來實作對name和age的操作。這樣一來,我不用直接對Person類中的域變量操作,而是通過set和get方法間接地操作這些變量,這樣就能提高域變量的安全性,同時又保證了域變量的封裝型。

現在以上述代碼為例,添加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;

}

//有參構造函數

public Test01(String name) {

this.name = name;

}

//無參構造函數

public Test01() {

}

public static void main(String[] args) {

//既可以調用有參構造函數執行個體化對象

Test01 t=new Test01("Wade");

//又可以調用無參構造函數執行個體化對象

Test01 t1=new Test01();

//使用set()方法給屬性指派

t.setName("CP3");

//傳統方式指派

t1.name="Rose";

//使用get()方法擷取屬性值

System.out.println("t:"+t.getName()+","+"t1:"+t1.name);

//在同一個類中,t.getName()和t.name效果是一樣的,但如果不是同一個類,屬性是私有的,就隻能使用t.getName(),set()方法也是一樣的。

}

}

運作結果是“t:CP3,t1:Rose”

這就是java程式設計語言的封裝思想,希望大家好好了解。

三、toString()方法

Object類具有一個toString()方法,你建立的每個類都會繼承該方法。它傳回對象的一個String表示,并且對于調試非常有幫助。然而對于預設的toString()方法往往不能滿足需求,需要覆寫這個方法。toString()方法将對象轉換為字元串。

将上述代碼最後加上

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

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

運作結果是

全限定名@位址首位址

[email protected]

[email protected]

這是什麼呢?是對象的位址值,但這不是我們需要的資訊,我們想要對象的各種屬性值,是以需要重寫toString()方法。

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

public class Test01 {

private String name;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

//有參構造函數

public Test01(String name) {

this.name = name;

}

//無參構造函數

public Test01() {

}

//重寫toString()方法,可以自定義

@Override

public String toString() {

return "Test01{" +

"name='" + name + '\'' +

'}';

}

public static void main(String[] args) {

//既可以調用有參構造函數執行個體化對象

Test01 t=new Test01("Wade");

//又可以調用無參構造函數執行個體化對象

Test01 t1=new Test01();

//使用set()方法給屬性指派

t.setName("CP3");

//傳統方式指派

t1.name="Rose";

//使用get()方法擷取屬性值

System.out.println("t:"+t.getName()+","+"t1:"+t1.name);

//在同一個類中,t.getName()和t.name效果是一樣的,但如果不是同一個類,屬性是私有的,就隻能使用t.getName(),set()方法也是一樣的。

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

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

}

}

運作結果是

t:CP3,t1:Rose

Test01{name='CP3'}

Test01{name='Rose'}

這樣就得到我們想要的資訊了,這就是重寫toString()在java類中的基本用法了。

以上就是本文的全部内容,希望對大家的學習有所幫助,也希望大家多多支援谷谷點程式。