一個類就是一種數(shù)據(jù)類型
引用數(shù)據(jù)類型:類渊抄,數(shù)組,接口,定義一個類是一種數(shù)據(jù)類型
例子:自定義一個類
class Person{
String name;
int age;
}
上面這個類就是一種數(shù)據(jù)類型需五,那么就是叫做 :Person數(shù)據(jù)類型
一、封裝的概念
封裝:封裝就是保護(hù)程序內(nèi)部結(jié)構(gòu)的安全轧坎。
例子:
class Person{
String name;
int age;
double height;//身高
public void getInfo(){
System.out.println("名字是:"+name+", 年齡是:"+age+", 身高是:"+height);
}
}
public class Demo{
public static void main(String[] args){
Person per=new Person();
per.name="SMITH";//直接訪問類的屬性
per.age=-12;//直接訪問類的屬性
per.height=178.0;
per.getInfo();
}
}
結(jié)果:
名字是:SMITH, 年齡是:-12, 身高是:178.0
上面的代碼在語法上沒任何錯誤警儒,但是在邏輯業(yè)務(wù)上存在問題,因?yàn)橐粋€年齡不可能是負(fù)數(shù)眶根,之所以出現(xiàn)負(fù)數(shù)蜀铲,根本的原因是:
可以在類的外部直接訪問類的屬性, 那么如果需要將類的屬性設(shè)置為外部不可見属百,就要將這些屬性使用關(guān)鍵字private封裝记劝,封裝后的屬性只能在類的內(nèi)部直接訪問。
例子:使用關(guān)鍵字private 封裝屬性
class Person{
private String name;//將屬性封裝
private int age; //封裝屬性
private double height;//身高
public void getInfo(){
System.out.println("名字是:"+name+", 年齡是:"+age+", 身高是:"+height);
}
}
public class Demo{
public static void main(String[] args){
Person per=new Person();
per.name="SMITH";
per.age=-12;
per.height=178.0;
per.getInfo();
}
}
上面代碼確實(shí)被封裝了族扰,不能在類的外部直接訪問厌丑,但是一個屬性如果不能訪問操作,那么就失去了原有的意義渔呵,
所以我們要在類的內(nèi)部提供一個訪問這些屬性的接口(方法)怒竿,每個屬性都要對應(yīng)提供兩個方法:
·setter方法:負(fù)責(zé)設(shè)置屬性 (set+第一個單詞大寫的屬性名稱)
·gtter方法: 負(fù)責(zé)取得屬性 (get+第一個單詞大寫的屬性名稱)
方法的命名規(guī)則遵循駝峰原則:除了第一個單詞之外,后面的每個單詞的單詞的第一個字母必須大寫扩氢。
例子:在setter方法中編寫邏輯判斷代碼
class Person{
private String name;//將屬性封裝
private int age; //封裝屬性
private double height;//身高
public void setName(String name){ //name屬性的setter方法
this.name=name;
}
public String getName(){ //name屬性的getter方法
return this.name;
}
public void setAge(int age){
if(age<0){
this.age=10;
} else{
this.age=age;
}
}
public int getAge(){
return this.age;
}
public void setHeight(double height){
this.height=height;
}
public double getHeight(){
return this.height;
}
public void getInfo(){
System.out.println("名字是:"+name+", 年齡是:"+age+", 身高是:"+height);
}
}
public class Demo{
public static void main(String[] args){
Person per=new Person();
per.setName("張三");
per.setAge(-14);
per.setHeight(178);
per.getInfo();
}
}
上面的代碼我們在setter方法中做了邏輯判斷(用來做數(shù)據(jù)驗(yàn)證)耕驰,但是在開發(fā)中數(shù)據(jù)的驗(yàn)證有專門的第三方輔助類來完成,不會在setter方法中去書寫录豺,那么為什么要寫上setter和gtter方法呢朦肘?這需要在后面很久以后的學(xué)習(xí)中才解釋饭弓。
總結(jié):
·封裝的概念:封裝就是為了保護(hù)程序內(nèi)部的安全性
·類中的屬性一旦使用private關(guān)鍵字封裝之后,就要提供setter和gtter方法
·setter和getter方法的命名規(guī)則:
|—set+首寫字母大寫的屬性名
|-get+首寫字母大寫的屬性名
·我們在命名方法名稱的的時候遵循駝峰原則媒抠,同時要見其名知其意