【封装、构造方法】
1 封裝
1.1 封裝概述
概述
面向?qū)ο缶幊陶Z(yǔ)言是對(duì)客觀世界的模擬,客觀世界里成員變量都是隱藏在對(duì)象內(nèi)部的,外界無(wú)法直接操作和修改。封裝可以被認(rèn)為是一個(gè)保護(hù)屏障,防止該類(lèi)的代碼和數(shù)據(jù)被其他類(lèi)隨意訪問(wèn)。要訪問(wèn)該類(lèi)的數(shù)據(jù),必須通過(guò)指定的方式。適當(dāng)?shù)姆庋b可以讓代碼更容易理解與維護(hù),也加強(qiáng)了代碼的安全性。
原則
將屬性隱藏起來(lái),若需要訪問(wèn)某個(gè)屬性,提供公共方法對(duì)其訪問(wèn)。
1.2 封裝的步驟
1.3 封裝的操作——private關(guān)鍵字
private的含義
private的使用格式
private 數(shù)據(jù)類(lèi)型 變量名 ;1.4 封裝優(yōu)化1——this關(guān)鍵字
我們發(fā)現(xiàn) setXxx 方法中的形參名字并不符合見(jiàn)名知意的規(guī)定,那么如果修改與成員變量名一致,是否就見(jiàn)名知意了呢?代碼如下:
public class Student {private String name;private int age;public void setName(String name) {name = name;}public void setAge(int age) {age = age;} }經(jīng)過(guò)修改和測(cè)試,我們發(fā)現(xiàn)新的問(wèn)題,成員變量賦值失敗了。也就是說(shuō),在修改了setXxx() 的形參變量名后,方法并沒(méi)有給成員變量賦值!這是由于形參變量名與成員變量名重名,導(dǎo)致成員變量名被隱藏,方法中的變量名,無(wú)法訪問(wèn)到成員變量,從而賦值失敗。所以,我們只能使用this關(guān)鍵字,來(lái)解決這個(gè)重名問(wèn)題。
this的含義
this代表所在類(lèi)的當(dāng)前對(duì)象的引用(地址值),即對(duì)象自己的引用。
記住 :方法被哪個(gè)對(duì)象調(diào)用,方法中的this就代表那個(gè)對(duì)象。即誰(shuí)在調(diào)用,this就代表誰(shuí)。
this使用格式
this.成員變量名;使用 this 修飾方法中的變量,解決成員變量被隱藏的問(wèn)題,代碼如下:
public class Student {private String name;private int age;public void setName(String name) {//name = name;this.name = name;}public String getName() {return name;}public void setAge(int age) {//age = age;this.age = age;}public int getAge() {return age;} }小貼士:方法中只有一個(gè)變量名時(shí),默認(rèn)也是使用 this 修飾,可以省略不寫(xiě)。
1.5 封裝優(yōu)化2——構(gòu)造方法
當(dāng)一個(gè)對(duì)象被創(chuàng)建時(shí)候,構(gòu)造方法用來(lái)初始化該對(duì)象,給對(duì)象的成員變量賦初始值。小貼士:無(wú)論你與否自定義構(gòu)造方法,所有的類(lèi)都有構(gòu)造方法,因?yàn)镴ava自動(dòng)提供了一個(gè)無(wú)參數(shù)構(gòu)造方法,一旦自己定義了構(gòu)造方法,Java自動(dòng)提供的默認(rèn)無(wú)參數(shù)構(gòu)造方法就會(huì)失效。
構(gòu)造方法的定義格式
修飾符 構(gòu)造方法名(參數(shù)列表){// 方法體 }構(gòu)造方法的寫(xiě)法上,方法名與它所在的類(lèi)名相同。它沒(méi)有返回值,所以不需要返回值類(lèi)型,甚至不需要void。使用構(gòu)造方法后,代碼如下:
public class Student {private String name;private int age;// 無(wú)參數(shù)構(gòu)造方法public Student() {} // 有參數(shù)構(gòu)造方法public Student(String name,int age) {this.name = name;this.age = age; } }注意事項(xiàng)
1.6 標(biāo)準(zhǔn)代碼——JavaBean
JavaBean 是 Java語(yǔ)言編寫(xiě)類(lèi)的一種標(biāo)準(zhǔn)規(guī)范。符合JavaBean 的類(lèi),要求類(lèi)必須是具體的和公共的,并且具有無(wú)參數(shù)的構(gòu)造方法,提供用來(lái)操作成員變量的set 和get 方法。
public class ClassName{//成員變量//構(gòu)造方法//無(wú)參構(gòu)造方法【必須】//有參構(gòu)造方法【建議】//成員方法 //getXxx()//setXxx() }編寫(xiě)符合JavaBean 規(guī)范的類(lèi),以學(xué)生類(lèi)為例,標(biāo)準(zhǔn)代碼如下:
public class Student {//成員變量private String name;private int age;//構(gòu)造方法public Student() {}public Student(String name,int age) {this.name = name;this.age = age;}//成員方法publicvoid setName(String name) {this.name = name;}public String getName() {return name;}publicvoid setAge(int age) {this.age = age;}publicint getAge() {return age;} }測(cè)試類(lèi),代碼如下:
public class TestStudent {public static void main(String[] args) {//無(wú)參構(gòu)造使用Student s= new Student();s.setName("柳巖");s.setAge(18);System.out.println(s.getName()+"---"+s.getAge());//帶參構(gòu)造使用Student s2= new Student("趙麗穎",18);System.out.println(s2.getName()+"---"+s2.getAge());} }總結(jié)
- 上一篇: 面向对象---类与对象
- 下一篇: 【继承、super、this、抽象类】