今天就跟大家聊聊有關(guān)set/get和toString怎么在Java中使用,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
成都創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供京山網(wǎng)站建設(shè)、京山做網(wǎng)站、京山網(wǎng)站設(shè)計、京山網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、京山企業(yè)網(wǎng)站模板建站服務(wù),10余年京山做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。
一、構(gòu)造函數(shù)
構(gòu)造函數(shù)的最大作用就是創(chuàng)建對象時完成初始化,當(dāng)我們在new一個對象并傳入?yún)?shù)的時候,會自動調(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); } }
運行結(jié)果是“Wade”
插一句,插入構(gòu)造函數(shù)快捷鍵:alt+insert,Constructor(構(gòu)造函數(shù))
這就說明在我們創(chuàng)建Test01對象時,會自動調(diào)用構(gòu)造函數(shù)完成初始化,這時程序中的name屬性就成了Wade。上面說到構(gòu)造函數(shù)是為了在new對象傳入?yún)?shù)后完成屬性的初始化。但是 ,為什么我程序中不寫構(gòu)造函數(shù)依然可以完成初始化。
1.如果不寫構(gòu)造函數(shù),程序會自動生成一個無參數(shù)無操作的構(gòu)造函數(shù)(默認(rèn)的,隱藏)。
2.如果寫了構(gòu)造函數(shù),則自定義構(gòu)造函數(shù)會覆蓋無參數(shù)構(gòu)造函數(shù)。
3.如果只寫了有參數(shù)的構(gòu)造函數(shù),且不存在無參數(shù)的構(gòu)造函數(shù),將不能以 new XXX(); 這樣的方式實例化對象,在實例化對象代碼中,new XXX("***"); 括號中的參數(shù)必須與構(gòu)造函數(shù)的參數(shù)保持一致,否則報錯。(當(dāng)然你也可以生成對象后通過他們的set、get方法進行賦值。)
所以,比較穩(wěn)妥也是較常用的方式是在java類中同時定義無參構(gòu)造函數(shù)和有參構(gòu)造函數(shù),代碼如下:
public class Test01 { private String name; //有參構(gòu)造函數(shù) public Test01(String name) { this.name = name; } //無參構(gòu)造函數(shù) public Test01() { } public static void main(String[] args) { //既可以調(diào)用有參構(gòu)造函數(shù)實例化對象 Test01 t=new Test01("Wade"); //又可以調(diào)用有參構(gòu)造函數(shù)實例化對象 Test01 t1=new Test01(); System.out.println(t.name+","+t1.name); } }
運行結(jié)果是“Wade,null”
這樣在實際使用中會非常方便的。
二、set()/get()方法
我們先來看看set和get這兩個詞的表面意思,set是設(shè)置的意思,而get是獲取的意思,顧名思義,這兩個方法是對數(shù)據(jù)進行設(shè)置和獲取用的。
然后我們來了解一下JAVA面向?qū)ο缶幊讨械姆忾]性和安全性。封閉性即對類中的域變量進行封閉操作,即用private來修飾他們,如此一來其他類則不能對該變量訪問。這樣我們就將這些變量封閉在了類內(nèi)部,這樣就提高了數(shù)據(jù)的安全性,當(dāng)我們想要操作這些域變量怎么辦呢?我們可以通過兩種方法,第一中即通過public方式的構(gòu)造器(或稱構(gòu)造函數(shù)),對象一實例化就對該變量賦值。第二種就是通過上面提到的set和get方法,這里我舉一個特定的例子,我定義一個Person類,該類中有name、age這兩個私有域變量,然后我定義setname()、getname()、setage()、getage()這四個方法,通過這四個方法來實現(xiàn)對name和age的操作。這樣一來,我不用直接對Person類中的域變量操作,而是通過set和get方法間接地操作這些變量,這樣就能提高域變量的安全性,同時又保證了域變量的封裝型。
現(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; } //無參構(gòu)造函數(shù) public Test01() { } public static void main(String[] args) { //既可以調(diào)用有參構(gòu)造函數(shù)實例化對象 Test01 t=new Test01("Wade"); //又可以調(diào)用無參構(gòu)造函數(shù)實例化對象 Test01 t1=new Test01(); //使用set()方法給屬性賦值 t.setName("CP3"); //傳統(tǒng)方式賦值 t1.name="Rose"; //使用get()方法獲取屬性值 System.out.println("t:"+t.getName()+","+"t1:"+t1.name); //在同一個類中,t.getName()和t.name效果是一樣的,但如果不是同一個類,屬性是私有的,就只能使用t.getName(),set()方法也是一樣的。 } }
運行結(jié)果是“t:CP3,t1:Rose”
這就是java編程語言的封裝思想,希望大家好好理解。
三、toString()方法
Object類具有一個toString()方法,你創(chuàng)建的每個類都會繼承該方法。它返回對象的一個String表示,并且對于調(diào)試非常有幫助。然而對于默認(rèn)的toString()方法往往不能滿足需求,需要覆蓋這個方法。toString()方法將對象轉(zhuǎn)換為字符串。
將上述代碼最后加上
System.out.println(t.toString()); System.out.println(t1.toString());
運行結(jié)果是
全限定名@地址首地址 Test01@6d6f6e28 Test01@135fbaa4
這是什么呢?是對象的地址值,但這不是我們需要的信息,我們想要對象的各種屬性值,所以需要重寫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; } //無參構(gòu)造函數(shù) public Test01() { } //重寫toString()方法,可以自定義 @Override public String toString() { return "Test01{" + "name='" + name + '\'' + '}'; } public static void main(String[] args) { //既可以調(diào)用有參構(gòu)造函數(shù)實例化對象 Test01 t=new Test01("Wade"); //又可以調(diào)用無參構(gòu)造函數(shù)實例化對象 Test01 t1=new Test01(); //使用set()方法給屬性賦值 t.setName("CP3"); //傳統(tǒng)方式賦值 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()); } }
運行結(jié)果是
t:CP3,t1:Rose Test01{name='CP3'} Test01{name='Rose'}
看完上述內(nèi)容,你們對set/get和toString怎么在Java中使用有進一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。
網(wǎng)頁標(biāo)題:set/get和toString怎么在Java中使用
文章位置:http://jinyejixie.com/article6/gceoog.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信小程序、網(wǎng)站排名、商城網(wǎng)站、品牌網(wǎng)站建設(shè)、網(wǎng)站營銷、營銷型網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)