1

私は自分自身を Java の初心者と定義し、それを 1 学期だけ使用しました。それまでは、プログラミングの経験はほとんどなく、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」というメソッドが宣言されている部分を除いて、ほとんど見知らぬ人ではなくなりました。メソッドには、値を返すものと返さないものの 2 つのタイプがあると考えられてきましたが、これはそうですが、通常使用される任意のタイプ (int、double、long...) として宣言されていません。の場合、クラス名で宣言されます。この場合は"Polica"になります。これは私がこのようなものに来るのは初めてで、コンパイラで機能するので、私の質問は、これがどのように機能するかをよりよく理解するために、どこでメソッドをより詳細に読むことができるかということです.

4

7 に答える 7

1

わかりました、いくつかのポイントを説明します。そして、そのすべてはOOPについてです

PolicaObjectインスタンスを作成するとすぐに になるクラスです

Polica polica = new Polica();

メソッドは任意の型の変数とオブジェクトを返すことができます

これは、関数でオブジェクトを返すことを期待していることを意味します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

幸運を!

于 2012-12-30T14:35:15.833 に答える
0

公式のJavaチュートリアルは、より多くのことから始めるのに最適な場所です。これまで、Javaの初心者に非常に役立ち、Javaの基礎を理解するのに役立つHeadFirstJavaのような本をお勧めします。

質問に固有であると、Javaメソッドは、int、floatなどのプリミティブ、Integerなどの組み込みClassオブジェクトインスタンス、または上記の「Polica」などのJavaアプリケーションで作成したカスタムクラスのいずれかを返すことができます。

また、インスタンスメソッドまたはコンストラクター内では、これは現在のオブジェクト(メソッドまたはコンストラクターが呼び出されているオブジェクト)への参照であることに注意してください。'this'を使用して、インスタンスメソッドまたはコンストラクター内から現在のオブジェクトの任意のメンバーを参照できます。したがって、メソッドが' this'を返し、メソッドシグネチャが' Polica'を返すと言う場合、これはメソッド"を意味します。 stavi」はクラス「Polica」の一部であり、「Polica」の現在のインスタンスを参照しています。

于 2012-12-30T14:47:51.343 に答える
0

こちらのドキュメントをご覧ください

戻り値の型は int、long、double などである必要はありません。自分で定義したオブジェクトにすることができます。

于 2012-12-30T14:30:20.533 に答える
0

定期的に使用される型 (int、double、long...) として宣言されていない、クラス名で宣言されている

int、double、long など (これらはプリミティブと呼ばれます) とクラスに違いはありません。それらは同じ方法で返され、異なる型が返されます。

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

クラス "Potato" と "Elephant" を定義した場合、これは問題なく機能します。

(編集: Chris McCabe がコメントで明らかにしたように、オブジェクトを返すときは参照渡しなので、変更することができ、返された実際のオブジェクトが変更されます。プリミティブは値渡しなので、取得した場合メソッドのプリミティブを変更して変更しても、オリジナルは影響を受けません。)

この場合、コンストラクターを使用したいようです。http://docs.oracle.com/javase/tutorial/java/javaOO/constructors.html

于 2012-12-30T14:31:26.233 に答える
0

メソッドのJavaチュートリアルから始めます

この例では、メソッドはオブジェクトへの参照を返しています。この場合は、メソッドを呼び出したばかりのオブジェクトです。これは連鎖に使用され、よく使用されるクラスは StringBuilder です。

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

ご覧のとおり、各追加メソッドthisが元の StringBuilder を返すため、これが機能します。

于 2012-12-30T14:31:53.650 に答える
0

Java またはその他の oops 言語では、メソッドの戻り値の型は任意のオブジェクト型にすることができます。つまり、プリミティブ型 (int、double...) に制限されません。

詳細については、こちら(言語仕様) をお読みください。

于 2012-12-30T14:32:28.707 に答える
0

ここで必要なものを見つけることができます。あなたの質問に答えると、このメソッドはタイプ Polica のオブジェクトを返します。

于 2012-12-30T14:33:34.307 に答える