簡體   English   中英

如何在Java和Android中使用構造函數?

[英]How to use constructors in java, android?

我對以下代碼有一個簡短的問題

http://www.androidhive.info/2013/09/android-sqlite-database-with-multiple-tables/

這里使用了兩個構造函數,一個帶有id,另一個沒有-我不明白為什么。 有什么好處?

我已經讀過這個線程:

為什么此類有兩個構造函數?

我能理解的答案是,我可以創建一個不帶id的Tag,但我試圖理解,如何知道它將使用哪個構造函數? 僅僅是根據參數的數量?

    public class Tag {

    int id;
    String tag_name;

    // constructors
    public Tag() {

    }

    public Tag(String tag_name) {
        this.tag_name = tag_name;
    }

    public Tag(int id, String tag_name) {
        this.id = id;
        this.tag_name = tag_name;
    }

    // ...     
}

是的,僅通過其參數數量即可。

這稱為功能的“重載”。 您可以通過為相同的簽名提供不同的參數(根據其類型和順序)來使函數過載。

然后,JVM將決定在特定情況下使用哪種方法。

請注意:如果提供構造函數,JVM將不再提供默認構造函數。

class Foo{

private int x;
private String name;

    Foo(int x){      //constructor 1
        this(x, "Default Name");
    }
    Foo(String name){  //constructor 2
        this(0, name);
    }
    Foo(int x, String name){  //constructor 3
        this.x = x;
        this.name = name;
    }
}

Foo f1 = new Foo(9); //calls constructor 1, who will call constructor 3
                     //f1.x = 9, f1.name = "Default Name"
Foo f2 = new Foo("Test"); // calls constructor 2, who will call constructor 3
                          // f2.x = 0; f2.name = "Test"
Foo f3 = new Foo(3, "John"); //calls constructor 3
                             // f3.x = 3; f3.name = "John"

Foo f4 = new Foo()  // This won't work! No default Constructor provided!

**應使用哪個構造函數? 僅其參數的數量? **是,例如,如果您致電

Tag newTag = new Tag();

它會打電話

 public Tag() {

}

但是如果你打電話

 Tag newTag = new Tag("Name");

它會打電話

 public Tag(String tag_name) {

}

等等

通過向構造函數傳遞多少個參數,它將知道要調用哪個參數

Java語言規范中 ,編譯器通過規則知道“它將使用哪個構造函數”。

簡歷:通過方法的簽名(參數的類型和順序---異常不會影響簽名,返回類型也是如此)。 這不僅受到構造函數的限制,而且還受到適當重載的任何方法的限制; 您可以按“重載”主題研究這些內容。 重載方法或構造函數的原因是為了提供更大的靈活性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM