1成員變量: 也稱爲全局變量(屬性)。java
a變量根據定義的位置不一樣,分爲全局變量(成員)和局部變量。安全
b做用的範圍不同jvm
c初始值得不一樣this
d在內存中的位置不一樣spa
e 生命週期的不一樣對象
區分變量的做用域:能夠根據,離它最近的大括號以及匹配的結束大括號,其實就是這個變 生命週期
量的活動區域。內存
封裝:能夠認爲是一個保護屏障,防止該類的代碼和數據被其餘的類隨意訪問。要訪問該類的數據,必須經過指定的方式,適當的封裝可讓代碼等容易理解和維護,也增強的代碼的安全性。ci
封裝:就是對抽取出來的數據進行包裝。他的目的:就是提升數據的安全性。作用域
封裝包括兩個方面的封裝: a、(特徵)屬性的封裝 b、(行爲)方法的封裝。
可是封裝起來的數據並非絕對的封裝,若是有其餘的程序須要訪問,能夠經過指定的入口來訪問。屬性的封裝和方法的封裝是相輔相成的二者密不可分。
原則:將成員屬性隱藏起來,若須要訪問某個屬性,能夠提供公共的方法對其訪問。
1.2 類之間方法和屬性的相互調用
public class TestA { String name; int age; String address; public void displayA(){ System.out.println("這個TestA中的display方法"); } public static void main(String[] args) { //建立TestB的對象 TestB testB=new TestB(); testB.stuName="王智雅"; testB.stuAge="22"; testB.stuXueli="大學"; testB.display(); System.out.println(testB.stuName); System.out.println(testB.stuAge); System.out.println(testB.stuXueli); } } public class TestB { String stuName; String stuAge; String stuXueli; public void display(){ System.out.println("這是TestB中的display方法"); }
public static void main(String[] args) { //建立TestA中的對象 TestA testA=new TestA(); testA.name="楊路華"; testA.age=23; testA.address="河南"; testA.displayA(); System.out.println(testA.name); System.out.println(testA.age); System.out.println(testA.address); } }
|
1.3封裝的操做步驟:
1.3.1使用private關鍵字來修飾成員變量
Private 的使用格式:
一、示例,Private 修飾的成員的變量:
Private String name; Private int age; |
2、示例,Private 修飾的成員方法:
Private String Message(){} Private void display(int a,int b){} |
三、代碼示例:
//設置private 來修飾成員變量 public class TestC { private String name; private int age; private String address; //提供公共的set==get方法來設置,獲得屬性的值 public void setName(String n){//設置屬性值 name=n; } public String getName(){//獲得屬性值 return name; } public void setAge(int a){ age=a; } public int getAge(){ return age; } public void setAddress(String ss){ address=ss; } public String getAddress(){ return address; } public void displayA(){ System.out.println("這個TestA中的display方法"); } public static void main(String[] args) { //建立TestB的對象 TestD testD=new TestD(); //經過set方法來設置屬性的值 testD.setStuName("王智雅"); testD.setStuAge("23"); testD.setStuXueli("大專"); testD.display(); //經過get方法來獲得屬性的值 System.out.println(testD.getStuName()); System.out.println(testD.getStuAge()); System.out.println(testD.getStuXueli()); } }
public class TestD { private String stuName; private String stuAge; private String stuXueli; //提供公共的set方法,get方法來獲得屬性的值 public void setStuName(String Name){ stuName=Name; } public String getStuName(){ return stuName; } public void setStuAge(String age){ stuAge=age; } public String getStuAge(){ return stuAge; } public void setStuXueli(String xueli){ stuXueli=xueli; } public String getStuXueli(){ return stuXueli; }
public void display(){ System.out.println("這是TestB中的display方法"); }
public static void main(String[] args) { //建立TestA中的對象 TestC testC=new TestC(); //經過setName來設置屬性的值 testC.setName("李文傑"); testC.setAge(23); testC.setAddress("蘭州"); testC.displayA(); //經過getName來獲得屬性的值 System.out.println(testC.getName()); System.out.println(testC.getAge()); System.out.println(testC.getAddress()); } } |
4.總結:
若是給成員變量設置了私有的Private 屬性以後,若是咱們還想繼續訪問該私有的屬性,則能夠經過公共的方法來
訪問該屬性的值,則能夠經過公共的set方法來給屬性設置值,經過get 方法獲得屬性的值。
1.3.2 構造方法
建立對象的語法:類名 對象名=new 類名();
當建立一個類的對象時,其實就是經過構造方法來建立的。New後面的就是構造方法。
那麼構造方法的定義語法:
[訪問修飾符] 類名(參數表列){
} |
//構造方法 public class Test3 { public Test3(){ System.out.println("這是Test3中的無參數構造方法"); } public static void main(String[] args) { //建立當前類對象 Test3 t=new Test3(); } }
解析:也就是說在建立對象的時候,new 後面的就是構造方法。若是有構造方法,則他會執行構造方法中的代碼。 |
//構造方法 public class Test3 { String name; String xueli; public Test3(){ name="張三"; xueli="本科"; System.out.println("這是Test3中的無參數構造方法"); } public static void main(String[] args) { //建立當前類對象 Test3 t=new Test3(); System.out.println(t.name); System.out.println(t.xueli); } } 解析:也就是說構造方法也能夠對成員變量進行初始化。 |
1構造方法的分類:
//構造方法 public class Test3 { String name; String xueli; //構造方法 public Test3(){ //對成員屬性進行初始化 name="張三"; xueli="本科"; System.out.println("這是Test3中的無參數構造方法"); } //有參數的構造方法 public Test3(String stuname,String score){ name=stuname; xueli=score; System.out.println("======有參數的構造方法======="); } public static void main(String[] args) { //建立當前類對象 Test3 t=new Test3(); System.out.println(t.name); System.out.println(t.xueli);
//建立對象 Test3 ss=new Test3("liwenjie","232"); System.out.println(ss.name); System.out.println(ss.xueli); } } |
【總結】也就是說在一個類中,經過構造方法來建立對象,經過建立對象來調用構造方法,一個類中能夠有多個構造方法,方法名相同,參數列表不一樣,能夠經過不一樣的參數列表調用不一樣的構造方法。
2若是一個類中只有一個有參的構造的方法,那麼咱們還想經過無參的構造方法來建立對象,那麼jvm也就不提供了。若是咱們必定要用無參的構造方法來建立對象,那麼就須要咱們手動提供一個無參數的構造方法。
This關鍵字的第一種用法示例: public class Test4 { String name="張三";
public void display(){ String name="李四"; System.out.println(name);//李四,程序默認採用就近原則輸出李四, System.out.println(this.name);// 張三 } public static void main(String[] args) { Test4 t=new Test4(); t.name="liwenjie"; t.display(); } } public class Test4 { String name="張三";
public void display(){ String name="李四"; System.out.println(this.name); } public Test4(String name){ //若是這樣寫jvm分不清楚到底那個是成員屬性,那個是局部屬性, //若是加上this.屬性名的方式,它就表明了調用的必定是當前類成員屬性的值。 //name=name; this.name=name; } public static void main(String[] args) { Test4 t=new Test4("天水市"); t.display(); } }
【總結】當成員變量名和方法中的局部變量徹底一致時,程序默認採用就近原則,若是想要輸出成員變量的值,那麼就使用this.屬性名的方式就能夠輸出成員變量的值。This關鍵字就表明當前類的那個對象,輸出的值必定是成員屬性的值。
|
This關鍵字第二種用法的示例: public class Test5 { String name; int age;
public Test5(){ this("zhangsan",23); System.out.println("無參數的構造方法"); } public Test5(String name,int age){ this.name=name; this.age=age; System.out.println("有參數的構造方法"); }
public static void main(String[] args) { //建立當前類的對象 Test5 t=new Test5(); System.out.println(t.name); System.out.println(t.age);
} } 【總結】當this關鍵字以this(參數列表)的形式出如今構造方法的第一句代碼時,就表示了當前的構造方法調用了該類中其餘的構造方法。根據參數列表匹配。 |
JavaBean是java語言編寫類的一種標準規範,javaBean也是一個類,只不過符合javaBean定義規範的類稱爲javaBean。
定義javaBean的規範
//定義JavaBean規範 public class Test6{ //成員變量必須是Private修飾 private String stuname; private String stuaddre; private String stuXueli; private Integer stuAge; //提供一個公共無參的構造方法 public Test6(){
} //獲得屬性的值 public String getStuname() { return stuname; } //設置屬性的值 public void setStuname(String stuname) { this.stuname=stuname; }
public String getStuaddre() { return stuaddre; }
public void setStuaddre(String stuaddre) { this.stuaddre = stuaddre; }
public String getStuXueli() { return stuXueli; }
public void setStuXueli(String stuXueli) { this.stuXueli = stuXueli; }
public Integer getStuAge() { return stuAge; }
public void setStuAge(Integer stuAge) { this.stuAge = stuAge; } } public class Test7 { public static void main(String[] args) { //建立對象 Test6 t=new Test6(); t.setStuname("wangzhiya"); t.setStuaddre("山西省"); t.setStuXueli("本科"); t.setStuAge(20); System.out.println(t.getStuname()); System.out.println(t.getStuaddre()); System.out.println(t.getStuXueli()); System.out.println(t.getStuAge()); } } |