2012-12-30 97 views
1

我將自己定義爲Java的初學者,只需要一個學期,而在此之前,我幾乎沒有編程經驗,甚至沒有OOP。聲明類類型的方法?

無論如何,我要通過代碼,我發現聲明爲類類型的方法

public Polica stavi (Predmet p, int i) 
     throws GPolIndeks, GPolZauzeto, GPolTezina{ 
     if(i<0 || i>=niz.length) throw new GPolIndeks (i); 
     if(niz[i] != null) throw new GPolZauzeto (i); 
     if(q + p.Q() > maxQ) throw new GPolTezina (p); 
     niz[i] = p; 
     q += p.Q(); 
     return this; 
    } 

現在的代碼是相當簡單的,幾乎我不陌生吧,除了部分其中聲明瞭名爲「stavi」的方法。我一直認爲有兩種類型的方法,那些返回值和不返回值的方法,這是一種方法,但它沒有被聲明爲經常使用的任何類型(int,double,long ...) ,它是用類名聲明的,在這種情況下,它將是「Polica」。這是我第一次來到這樣的東西,它在編譯器中工作,所以我的問題是,我可以在哪裏更詳細地閱讀方法,以更好地瞭解它是如何工作的。

+0

在這種情況下,該方法返回一個值,該值只不過是「Polica」類的一個對象。 –

+0

你一定看過並且使用過那樣的其他方法。例如'String.substring()'。或'Integer.toString()'。這些方法返回一個聲明類型的對象(在這些情況下爲String)。你的方法沒有什麼不同。它返回一個Polica類型的對象。 –

+0

以及你想了解的東西是關於面向對象的,'Polica'是類和一個類是用來創建一個對象和對象是OOP的概念的一部分,你必須瞭解 –

回答

0

看看文檔here

返回類型並不一定是一個的int,long或double等,它可以是你自己定義的一個對象。

0

它不聲明爲經常使用任何類型(INT,雙,長......),它宣佈與類名

有INT,雙,長之間沒有區別等等(這些稱爲基元)和類,當你返回它們。它們以相同的方式返回,並返回不同的類型。

public Potato weirdMethod(Elephant e) { 
    System.out.println(e); 
    return new Potato(); 
} 

如果你定義了「土豆」和「大象」這些類,那麼這樣做會很好。 (編輯:正如Chris McCabe在評論中澄清的那樣,當你返回一個對象時,它是通過引用傳遞的,所以你可以改變它,它會改變你返回的實際對象。原始數據是按值傳遞的所以如果你從方法中得到一個原語並改變它,原來的東西不會受到影響。)

在這種情況下,看起來像你想使用一個構造函數。 http://docs.oracle.com/javase/tutorial/java/javaOO/constructors.html

+0

這個答案是錯誤的和誤導性的,有返回一個內置類型和返回一個對象引用之間的顯着區別。返回它們的機制是相同的,但影響是非常不同的。 –

+0

@ChrisMcCabe他們以相同的方式工作,但只返回不同的類型。我澄清說。 – Doorknob

+0

這是不正確的,它們都作爲一個值返回,這意味着當你返回一個對象時,你返回對該對象的引用,這意味着你可以編輯該特定對象的狀態。當返回一個基元時,你仍然會收到返回的值,這意味着你基本上得到了一個基元的副本,而不是相同的實際基元。相同的機制,非常不同的結果! –

0

我將開始與Java Tutorials for Methods

在這個例子中,該方法返回一個參考到對象,在這種情況下是你只是上調用的方法的對象。這用於鏈接和一個經常使用的類是StringBuilder例如。

String text = new StringBuilder().append("Hello, the time is ") 
           .append(new Date()).append("\n).toString(); 

正如你所看到的,這個工程因爲每個追加原來的StringBuilder方法的返回this

0

在Java或任何其他語言哎呀方法的返回類型可以是任何對象類型即不限制爲基本類型(INT,雙...)

你應該閱讀this(語言規格)瞭解更多詳情。

0

here你可以找到你需要的東西。並回答你的問題這個方法返回一個Polica類型的對象。

1

好的,我會爲你解釋一些觀點。而其所有關於OOP

Polica是將只要你創建它的一個實例

Polica polica = new Polica(); 

方法可以返回任何類型的變量和也反對

成爲一個 Object

這意味着在您的功能,你期望返回一個對象Polica

public Polica stavi(){ 
    Polica polica = new Polica(); 
    return polica; 
} 

this代表它自己的自身情況所以這將是非常相同與此

public Polica stavi(){ 
     Polica polica = new Polica(); 
     return this; 
} 

那麼其漂亮的,你有一個極大的好奇心!這裏有一個很好的教程。

http://docs.oracle.com/javase/tutorial/java/concepts/index.html

http://docs.oracle.com/javase/tutorial/java/javaOO/objects.html

古德勒克!

0

官方的java tutorials是一個很好的開始,我會推薦像Head First Java這些對java初學者非常好的書籍,並且會幫助你掌握java基礎知識。

具體到你的問題java方法可以返回像int,float等基本類型,內置類對象實例,如Integer,或者你在java應用程序中創建的自定義類,如上面提到的「Polica」。

另請注意,在實例方法或構造函數中,這是對當前對象的引用 - 其方法或構造函數被調用的對象。你可以在實例方法或構造函數中使用'this'來引用當前對象的任何成員。因此,當你的方法返回'this'並且方法簽名表明它返回'Polica'時,這意味着方法「 stavi「是」Polica「類的一部分,指的是」Polica「的當前實例。