1. 程式人生 > 其它 >Java入門姿勢【面向物件3】構造方法及其過載_方法的呼叫

Java入門姿勢【面向物件3】構造方法及其過載_方法的呼叫

上次我為大家寫出啦“定義類與建立物件_瞭解區域性變數”,上篇文章程式碼可能較多,如沒有了解透徹的話請開啟下方文章在進行觀看一下哦!!

Java入門姿勢【面向物件2】定義類與建立物件_瞭解區域性變數

這次我們來說一下:構造方法以及過載的使用

學習教程推薦:

構造方法及其過載

一、構造方法

對於一個類來說,一般有三種常見的成員:屬性field、方法method、構造器constructor。這三種成員都可以定義零個或多個。

構造方法(constructor)也叫構造器,用於物件的初始化。構造器是一個建立物件時被自動呼叫的特殊方法,目的是物件的初始化。構造器的名稱應與類的名稱一致。Java通過new關鍵字來呼叫構造器,從而返回該類的例項,是一種特殊的方法。

宣告格式:

[修飾符] 類名(形參列表){
 //n條語句
}

構造器4個要點:

  • 構造器的方法名必須和類名一致!
  • 構造器通過new關鍵字呼叫!!
  • 構造器雖然有返回值,但是不能定義返回值型別(返回值的型別肯定是本類),不能在構造器裡使用return返回某個值。
  • 如果我們沒有定義構造器,則編譯器會自動定義一個無參的構造方法。如果已定義則編譯器不會自動新增!
  • 構造方法也是方法,只不過有特殊的作用而已。與普通方法一樣,構造方法也可以過載。

示例一:定義計算機類並模擬其操作

示例程式碼:

public class Computer {
    //成員變數
    private String cpu="Intel";//cpu
    private String memory;//記憶體
    private String mainBoard;//主機板
    private String keyBoard;//鍵盤
    //構造方法
    public Computer(){
        System.out.println("--------Computer()--------");
        cpu = "AMD";
    }
    public Computer(String cpu,String memory,            
String mainBoard,String keyBoard){
        this.cpu = cpu;
        this.memory = memory;
        this.mainBoard = mainBoard;
        this.keyBoard = keyBoard;
    }
//    public Computer(String cpu1,String memory1,String mainBoard1,String keyBoard1){
//        cpu = cpu1;
//        memory = memory1;
//        mainBoard = mainBoard1;
//        keyBoard = keyBoard1;
//    }
    //成員方法
    public void start(){
        System.out.println("-------starting------");
    }
    public void close(){
        System.out.println("------- closing----------");
    }
    public void show(){
        System.out.println("cpu="+cpu+",memory="+memory+
",mainBoard="+mainBoard+",keyBoard"+keyBoard);
    }
    public static void main(String[] args) {
        //購買一臺電腦
        Computer computer2 = new Computer();
//        computer.cpu="酷睿"; omputer.memory="三星";
//        computer.mainBoard="華碩"; computer.keyBoard="羅技";
        Computer computer = new Computer("酷睿","三星","華碩","羅技");
       //讓電腦執行
        computer.start();
        computer.show();
        computer.close();
    }
}

需要注意的地方:

1)物件的建立完全是由構造方法實現的嗎?

不完全是。構造方法是建立Java物件重要途徑,通過new關鍵字呼叫構造器時,構造器也確實返回了該類物件,但這個物件並不是完全由構造器負責建立的。建立一個物件分為如下四步:

1. 分配物件空間,並將物件成員變數初始化為0或空

2. 執行屬性值的顯示初始化

3. 執行構造方法

4. 返回物件的地址給相關的變數

2)如果方法構造中形參名與屬性名相同時,需要使用this關鍵字區分屬性與形參。

this.id 表示屬性 id; id 表示形參 id

二、物件陣列

學習到這裡在前面我們已經學過陣列了,但是陣列元素都是基本資料型別或者String型別。學習了類和物件之後,可以定義陣列的元素型別是更加複雜的引用引用資料型別,每個元素可以是一個具體的物件,稱為:物件陣列

沒有過的解釋,大傢伙直接上手敲一下程式碼嘗試一下:

程式碼示例:使用物件陣列儲存多臺計算機資訊

public class TestArray {
    public static void main(String[] args) {
        //定義一個數組,儲存4個分數,並遍歷
        int [] arr;
        arr = new int[4];
        arr[0] = 90;
        arr[1] = 80;
        arr[2] = 100;
        arr[3] = 54;
        for(int score : arr){    System.out.println(score);      }
        System.out.println("======================");
        //定義一個數組,儲存4臺計算機,並遍歷
        //Computer [] arr2;
        //arr2 = new Computer[4];
        Computer [] arr2 = new Computer[4];
        arr2[0] = new Computer("酷睿","三星","華碩","羅技");
        arr2[1] = new Computer("Intel","金士頓","技嘉","雙飛燕");
        arr2[2] = new Computer("AMD","三星","華碩","雙飛燕");
        arr2[3] = new Computer("酷睿","金士頓","技嘉","羅技");
        for (Computer computer:arr2){
           // System.out.println(computer.toString());
            computer.show();
        }
    }
}

大家也可以自己使用物件陣列儲存多個物件並輸出內容!!


方法的呼叫

方法調是Java開發中的基本操作。理解方法呼叫的記憶體分配過程,實參形參的傳遞過程非常必要。方法引數分為基本資料型別和引用資料型別兩種,傳遞引數有著實質的區別。

一、基本資料型別的方法呼叫

程式碼示例參考:

public class Point {
    int x;
    int y;
}
public class TestRefArgs {
    public static void main(String[] args) {
        //定義兩個變數
        Point p = new Point();
        p.x = 10;
        p.y = 20;
        //輸出交換前兩個變數的值
        System.out.println("交換前:p.x="+p.x+",p.y="+p.y);
        //交換兩個變數的值
        swap(p);
        //輸出交換後兩個變數的值
        System.out.println("交換後:p.x="+p.x+",p.y="+p.y);
    }
    public static void swap(Point p){
        p = new Point();
        int temp;
        temp = p.x;
        p.x = p.y;
        p.y = temp;
    }
}

二、引用資料型別的方法呼叫

程式碼示例參考:

public class Point {
    int x;
    int y;
}
public class TestRefArgs {
    public static void main(String[] args) {
        //定義兩個變數
        Point p = new Point();
        p.x = 10;
        p.y = 20;
        //輸出交換前兩個變數的值
        System.out.println("交換前:p.x="+p.x+",p.y="+p.y);
        //交換兩個變數的值
        swap(p);
        //輸出交換後兩個變數的值
        System.out.println("交換後:p.x="+p.x+",p.y="+p.y);
    }
    public static void swap(Point p){
        p = new Point();
        int temp;
        temp = p.x;
        p.x = p.y;
        p.y = temp;
    }
}

注意事項:基本資料型別的引數是值傳遞,引用資料型別的引數傳遞是引用(地址),本質上也是值傳遞。

三、this的使用

物件建立的過程和this的本質

構造方法是建立Java物件的重要途徑,通過new關鍵字呼叫構造器時,構造器也確實返回該類的物件,但這個物件並不是完全由構造器負責建立。建立一個物件分為如下四步:

1. 分配物件空間,並將物件成員變數初始化為0或空

2. 執行屬性值的顯示初始化

3. 執行構造方法

4. 返回物件的地址給相關的變數

this的本質就是“建立好的物件的地址”! 由於在構造方法呼叫前,物件已經建立。因此,在構造方法中也可以使用this代表“當前物件” 。

this最常的用法:

  • 呼叫成員變數:如果成員變數和區域性變數同名,this必須書寫,用來區分兩者;如果沒有同名的區域性變數,this可以不寫
  • 呼叫成員方法:這種情況下,this可以省略
  • 呼叫構造方法:使用this關鍵字呼叫過載的構造方法,避免相同的初始化程式碼。但只能在構造方法中用,並且必須位於構造方法的第一句。
  • this不能用於static方法中。

程式碼示例參考:this關鍵字的使用

public class Student {
    //成員變數
    private int sno;//學號
    private String name;//姓名
    private String sex;//性別
    private double score;//分數
    //構造方法
    public Student(){
    }
    public Student(int sno,String name,String sex ){
        this.sno = sno;
        this.name = name;
        this.sex = sex;
    }
    public Student(int sno,String name,String sex ,double score){
        this(sno,name,sex);
        //new Student(sno,name,sex);
//        this.sno = sno;
//        this.name = name;
//        this.sex = sex;
        this.score = score;
    }
    //成員方法
    public void study(){
        this.shout();
        shout();
        //System.out.println("好好學習,天天向上。add oil!!!");
        System.out.println("在教室努力的學習中,程式碼量一行行提升了.....");
    }
    public void shout(){
        System.out.println("好好學習,天天向上。add oil!!!");
    }
    public void show(){
        System.out.println(sno +"   "+this.name+"  "+sex+"  "+this.score);
    }
    public static void main(String[] args) {
        Student stu = new Student(7,"田七","男",77);
        stu.study();
        stu.shout();
        stu.show();
        //study();
        Student stu2 = new Student();
    }
}


以上就是本章節所講述的全部內容啦,稍後我在更新後續哦,喜歡的夥伴支援一下哦~

感謝觀看~