2010-11-22 22 views
2

有人能告訴我什麼是申報這樣一類的需要:參數傳遞

public class Test { 

String k; 
public Test(String a, String b, String c){ 
    k = a + " " + b + " " + c; //do something 

} 

public void run(){ 
    System.out.println(k); 
} 

public static void main(String[] args) { 
    String l = args[0]; 
    String m = args[1]; 
    String n = args[2]; 
    Test obj = new Test(l,m,n); 
    obj.run(); 
} 

} 

當然它的工作原理,但我不明白的地步,爲什麼會一個使用這種實現某種方式的方式。是否因爲我們需要將參數直接傳遞給類主方法,這就是我們爲什麼使用這種方式或者存在其他原因?

public Test(...)使用相同類名的目的是什麼。這是爲什麼?

+2

這根本不會編譯`Test obj = new file(l,m,n);` – 2010-11-22 15:49:53

+1

沒有意義。 `測試obj =新文件(l,m,n);` - 甚至不編譯。 – dacwe 2010-11-22 15:50:27

+0

正確的縮進? ; p`Test obj = new file(l,m,n);`應該是`Test obj = new Test(l,m,n);` – 2010-11-22 15:50:41

回答

5

public Test(...)constructor並且其目的是爲對象創建。這顯然是從樣本代碼看出...

Test obj = new Test(l,m,n); 

可變obj通過被分配給該Test的構造實例化對象Test。在java中,每個構造函數必須具有確切它寫入的Java文件(在您的情況構造函數Test在Test.java中找到)相同的名稱(和大小寫)。

...爲什麼會這樣呢?

這一切都取決於你想用你的對象做什麼。你可以有一個零參數的構造函數(即不需要參數),並有方法來設置你的lmn,就像這樣:

package net; 


public class Test { 

    private String k; 

    /** 
    * 
    */ 
    public Test() { 
     super(); 
     // TODO Auto-generated constructor stub 
    } 

    public void set(String a, String b, String c) { 
     k = a + " " + b + " " + c; //do something 
    } 

    public void run() { 
     System.out.println(k); 
    } 

    public static void main(String[] args) { 
     String l = args[0]; 
     String m = args[1]; 
     String n = args[2]; 
     Test obj = new Test(); 
     obj.set(l, m, n); 
     obj.run(); 
    } 
} 

正如你所看到的,這是完全一樣的功能,爲您的例子,但使用零參數構造函數。

如果你的類根本沒有構造函數,java會自動爲你添加一個公共的零參數構造函數。

希望這會有所幫助。

3

稱爲Test的方法是Test類的所謂的constructor。構造函數是當您編寫類似new Test(...)時被調用的方法。

請記住main方法是一個static方法,這意味着它不需要調用類Test的一個實例。 run方法不是這種情況。 run是一個實例方法,爲了調用它,你需要一個Test類的實例(在你的情況下爲obj)。

0

main方法是程序的入口點,當您從命令行運行java Test時會調用該方法。

public Test(String a, String b, String c)對於Testpublic constructor,當你調用new Test(l,m,n);注意,在構造函數中a和主要方法l指同一String ...這也適用於bm被調用; cn

作爲一個側面說明,該類希望通過命令行傳遞三個值,然後將它們存儲在lm,並n

最後一點:如果你有一個簽名public void run()的方法,您的班級應該可能會使用implementRunnable,以便它可以在Thread中使用。

1

公共Test(...)位是該類的構造函數。它始終與班級名稱相同。類和主要方法是編程的兩個完全不同的方面。類定義具有狀態和方法的可重用組件。主要方法是從命令行調用的特殊方法。

你的例子太微不足道了,它並沒有真正顯示面向對象編程的好處。如果你考慮一個例子,你有不同的類的intetracting你可能會有更多的感覺。

0

學習Java。

構造函數是一個被調用來創建一個對象的函數,它由與該類名稱相同的函數表示,但沒有返回類型。多個構造函數可以用不同的參數聲明。

在這種情況下,參數從參數數組中取出並作爲參數傳遞給構造函數Test

這些是Java編程語言的基本概念。你應該閱讀Java。試試Thinking in Java,這是一本很棒的書。