1. 程式人生 > >JAVA—構造方法和物件的建立

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);
        
   }
}


 四:物件的引用和實體:

類是體現封裝的一種資料型別,類所宣告的變數被稱作物件,物件(變數)負責存放引用,以確保物件可以操作分配給該物件的變數以及呼叫類中的方法。分配給物件的變數被習慣的稱作為物件的實體