物件導向(二)__構造方法

來源:互聯網
上載者:User

構造方法總結:

構造方法: 特殊方法,它的作用是在對象建立的時候自動執行一些初始化工作。
特徵: a.方法名與類名一致
b.沒有傳回值類型,甚至連void也沒有
c.不能被final static synchronized abstract等修飾
d.不可以像普通方法一樣隨意調用,只能在對象建立時調用一次
e.所有的類都必須有構造器(若類中沒有構造器,編譯器會自動添加一個無參構造器,若類中有構造器,編譯器不會自動添加無參構造器)

構造器的使用:構造器可以重載
構造器間可以利用this()調用,實現連鎖調用,但至少應該有一個沒有使用this()(不能無限遞迴)
this()調用必須在第一行(有效行),保證對其他構造器的調用必須先執行。

包含構造器,對象在建立時,記憶體中的執行過程分析:
來源程式:

記憶體執行過程分析:

匿名對象:建立一個對象,直接調用對象的方法,不將對象的記憶體位址儲存在參考型別變數
匿名對象可以作為實參給方法傳值。
若在方法中以對象為參數時,在方法中可以利用引用修改對象的資訊。

物件導向中的兩個關鍵字:package,import
package:告訴編譯器當前源檔案中的所有類最終產生class檔案後,class檔案儲存的包目錄結構。
package必須寫在程式的第一行。
命名:字母全部小寫
四部分:機構類型名稱.機構名稱.項目名稱.模組名稱
註:類中一旦使用了package語句,這個類的編譯不一樣,
javac -d . 源檔案.java (在目前的目錄中產生package語句中指示的包目錄結構)
類名不一樣,在調用這個類的時候一定要寫類的全限定名稱(全稱包名+類名)

import: 導類,建議一個一個類的匯入,這樣更清晰。
import作用告訴編譯器,當前的源檔案中要使用的其他包的類在什麼包目錄下面。
java.lang包中所有類都已經自動匯入。

對於構造器,對象作為參數傳遞,package,import關鍵字有如下小例子供參考。

package com.atguigu.javase.javabean;/**    Student類,包含id,name,gender,major屬性封裝,    並提供兩個構造器,一個是無參的另一個是4個參數的    並添加say方法    再添加一個參數的構造器,參數是id,    在構造器中使用this(...)實現構造器的連鎖調用*/public class Student {    //對屬性進行封裝    private int id;    private String name;    private String gender;    private String major;    //無參構造器,若是自己沒有定義構造器,系統會自動添加一個預設的無參構造器    public Student() {        this(1);    //利用this()實現構造器的連鎖調用(調用,棧結構)                    //this()必須在有效行的第一行,保證對其他構造器的調用必須先執行                    //this()不能無限遞迴        System.out.println("Student()....");    }    //參數為id的有參構造器    public Student(int id) {        this(id,"未知","未知","未知");        System.out.println("Student(int)....");    }    //參數為int id, String name, String gender, String major的有參構造器    public Student(int id, String name, String gender, String major) {        this.id = id;        this.name = name;        this.gender = gender;        this.major = major;        System.out.println("Student(int,String,String,String)");    }    //為外界提供一個公用調用屬性的方法    //id的set/get方法    public void setId(int id) {        this.id = id;    }    public int getId() {        return id;    }    //neme的set/get方法    public void setName(String name) {        this.name = name;    }    public String getName() {        return name;    }    //gender的set/get方法    public void setGender(String gender) {        this.gender = gender;    }    public String getGender() {        return gender;    }    //major的set/get方法    public void setMajor(String major) {        this.major = major;    }    public String getMajor() {        return major;    }    //將形參設定為參考型別的,如Phone ph    //在該類中使用其他類的對象    public void call(Phone ph) {        System.out.println(this.say() + ",在使用手機" + ph.say() + "打電話");    }    //say方法    public String say() {        return "學號:" + id + ",名字:" + name + ",性別:" + gender + ",專業:" + major;    }}
package com.atguigu.javase.javabean;/*    寫一個phone類,屬性os,screen    在Student類中添加一個方法,call(Phone phone)    在測試類別中調用call方法*/public class Phone {    private String os;    private double screen;    public Phone() {    }    public Phone(String os, double screen) {        this.os = os;        this.screen = screen;    }    public void setOs(String os) {        this.os = os;    }    public String getOs() {        return os;    }    public void setScreen(double screen) {        this.screen = screen;    }    public double getScreen() {        return screen;    }    public String say() {        return "[作業系統:" + os + ",螢幕大小:" + screen + "]";    }}
package com.atguigu.javase.test;    //機構類型名.機構名稱.項目名稱.模組名稱import com.atguigu.javase.javabean.Student; //匯入Student類import com.atguigu.javase.javabean.Phone;       //匯入Phone類/**    在測試類別中分別使用兩個構造器建立兩個對象,    列印輸出對象的詳細資料    註:1.類中一旦使用了package語句,這個類的編譯不一樣。        javac -d . 源檔案.java 在目前的目錄中產生package語句中        指示的包目錄結構        2.類中一旦使用了package語句這個類的類名也會不一樣。        在其他類中使用該類,必須使用該類的全限定名稱(全稱包名+類名)*/public class StudentTest {    public static void main(String[] args) {        //使用無參構造器建立對象        //com.atguigu.javase.javabean.Student s1 = new com.atguigu.javase.javabean.Student();        Student s1 = new Student();        System.out.println(s1.say());        //使用4參構造器建立對象        //com.atguigu.javase.javabean.Student s2 = new com.atguigu.javase.javabean.Student(2,"沈yl","男","電腦");        Student s2 = new Student(2,"沈yl","男","電腦");        System.out.println(s2.say());        //s2.call(new com.atguigu.javase.javabean.Phone("andriod",5.0));        s2.call(new Phone("andriod",5.0));    }}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.