JAVA—構造方法和物件的建立
一:構造方法和物件的建立
package chapter4.constructor; public class TestConstructor { public static void main(String[] args) { // TODO Auto-generated method stub //1:建立Student類的一個例項(物件) Student stu1 = new Student(); //2:stu1這個物件去呼叫test1和test2這兩個方法 stu1.test1(); int sum = stu1.test2(6, 8);//在方法呼叫中,傳入的引數6和8叫做實參 System.out.println(sum); //------------------------ //構造方法:用來建立物件並進行初始化 //構造方法:1:要求和類同名;2:不能有返回值,也不能使用void關鍵字 //3:對於一個類,系統提供預設的、不帶引數的構造方法 //4:可以自定義一個或者多個構造方法,但是當自定義構造方法時,系統就不再提供預設的不帶引數的構造方法 //5:構造方法要麼不定義,如果定義,最好把不帶引數的那個構造方法重新定義一次 //示例 int a;//聲明瞭一個int型別的變數 Student stu2;//聲明瞭一個引用型別的變數 a=5; //給這個變數進行初始化 stu2 = new Student(); //宣告和初始化同時進行 int b=10; Student stu3 = new Student(); System.out.println("新建立的沒有經過初始化的stu3="+stu3); System.out.println("stu2="+stu2); System.out.println("stu3="+stu3); //建立物件後,就可以訪問物件的屬性,也可以呼叫物件的方法 int age = stu3.age;//建立物件後,這些物件的屬性有個初始值:int 0,double 0.0 引用型別的為null System.out.println(stu3.stuName); System.out.println(stu3.stuId); System.out.println(stu3.age); System.out.println(stu3.clazz); stu3.test1();//利用物件呼叫方法 stu3.stuName="han"; stu3.stuId="001"; stu3.age=17; stu3.clazz="soft181"; System.out.println("經過初始化後的stu3="+stu3); System.out.println(stu3.stuName); System.out.println(stu3.stuId); System.out.println(stu3.age); System.out.println(stu3.clazz); //下面演示帶4個引數的構造方法 Student stu4 = new Student("002","zhang",18,"soft181"); System.out.println(stu4.age); stu4.test1(); System.out.println(stu4); } }
和基本資料型別不同,在用類宣告物件後,還必須建立物件。即為宣告的物件分配所擁有的變數(確定物件所具有的屬性),類是建立物件的模板,沒有類就沒有物件。
一:構造方法:
構造方法是類中的一種特殊方法,當程式用類建立物件時需要使用它的構造方法。 如果類中沒有編寫構造方法,系統會預設該類只有一個構造方法,該預設的構造方法是無引數的,且方法體中沒有語句。例如:Lader例中就有一個預設的構造方法。
Lader(){
}
例如Point中有兩個構造方法:
class point{
int x,y;
point(){
x=1;
y=1
}
point(int a,int b){
x=a;
y=b;
}
}
例如:構造方法沒有型別,有型別的不是構造方法:
class point{ int x,y; void point(){ //不是構造方法(該方法的型別是void) x=1; y=1 } point(int a,int b){ //是構造方法 x=a; y=b; } int point(){ //不是構造方法(該方法的型別是int) return 1; } }
構造方法的規定:
①類中的構造方法的名字必須與它所在的類的名字完全相同,而且沒有資料型別。
②允許在一個類中編寫若干個構造方法,但必須保證它們的引數不同(引數不同是指:引數的個數不同,或者引數個數相同,但引數型別不同)
二:建立物件:
建立一個物件包括物件的宣告和為物件分配變數兩個步驟:
①物件的宣告:
一般格式為:
類的名字 物件名字;
例如:
XiyoujiRenwu zhubajie;
宣告物件zhubajie時,zhubajiie的記憶體中沒有任何資料,稱這時的zhubajie是一個空物件,沒有任何“實體”,不能使用;為物件分配變數才可以使用(即為物件分配實體)
②為宣告的物件分配變數:
使用new運算子和類的構造方法為宣告的物件分配變數,即建立物件。如果類中沒有構造方法,系統會呼叫預設的構造方法,該預設的構造方法是無引數的,且方法體中沒有語句。例如:
class XiyoujiRenwu{
float height,weight;
String head,ear;
void speak(String s){
System.out.println(s);
}
}
public class aa1
publiic static void main(String args[]){
XiyoujiRenwu zhubajie; //宣告物件
zhubajie=new XiyoujiRenwu(); //為物件分配變數(使用new和預設的構造方法)
}
new運算子和構造方法進行運算時要做兩件事情,例如:系統見到
new XiyoujiRenwu();
時,就會做下列兩件事:
❶:為height、weight、head、ear各個變數分配記憶體,然後執行構造方法語句。如果成員變數在宣告時沒有指定初值,所使用的構造方法也沒有對成員變數進行初始化操作,那麼,對於整型的成員變數 ,預設初值為0;浮點型,預設初值為0.0;布林型,預設初值為false;引用型,預設初值為null。
❷:new運算子在為變數height、weight、head、ear分配記憶體後,將計算出一個稱作引用的值(該值包含著代表這些成員變數記憶體位置及相關重要資訊)
所謂建立物件,就是指為物件分配變數,並獲得一個引用,以確保這些變數由該物件來操作管理
三:使用物件:
抽象的目的是產生類,而類的目的是建立具有屬性和行為的物件.物件不僅可以操作自己的變數改變狀態,而且能呼叫類中的方法產生一定的行為.通過使用運算子".",物件可以實現對自己變數的訪問和方法的呼叫.
①物件操作自己的變數(體現物件的屬性):物件建立後就有了自己的變數,即物件的實體.物件通過使用點運算子"."來訪問自己的變數,格式為:
物件.變數;
②物件呼叫類中的方法(體現物件的行為):物件建立後,可以用點運算子"."呼叫建立它的類中的方法,從而產生一定的行為(功能),呼叫格式為:
物件.方法;
③體現封裝:當物件呼叫方法時,方法中出現的成員變數就是指分配給該物件的變數.類中的方法可以操作成員變數.當物件呼叫該方法時,方法中出現的成員變數就是指分配給該物件的變數.
class XiyoujiRenwu {
float height,weight;
String head, ear;
void speak(String s) {
head="歪著頭";
System.out.println(s);
}
}
public class Example4_3 {
public static void main(String args[]) {
XiyoujiRenwu zhubajie,sunwukong; //宣告物件
zhubajie = new XiyoujiRenwu(); //為物件分配變數
sunwukong = new XiyoujiRenwu();
zhubajie.height=1.80f; //物件給自己的變數賦值
zhubajie.head="大頭";
zhubajie.ear="一雙大耳朵";
sunwukong.height=1.62f; //物件給自己的變數賦值
sunwukong.weight=1000f;
sunwukong.head="繡發飄飄";
System.out.println("zhubajie的身高:"+zhubajie.height);
System.out.println("zhubajie的頭:"+zhubajie.head);
System.out.println("sunwukong的重量:"+sunwukong.weight);
System.out.println("sunwukong的頭:"+sunwukong.head);
zhubajie.speak("俺老豬我想娶媳婦"); //物件呼叫方法
System.out.println("zhubajie現在的頭:"+zhubajie.head);
sunwukong.speak("老孫我重1000斤,我想騙八戒揹我"); //物件呼叫方法
System.out.println("sunwukong現在的頭:"+sunwukong.head);
}
}
四:物件的引用和實體:
類是體現封裝的一種資料型別,類所宣告的變數被稱作物件,物件(變數)負責存放引用,以確保物件可以操作分配給該物件的變數以及呼叫類中的方法。分配給物件的變數被習慣的稱作為物件的實體。