-1

私はJavaを初めて使用し、メソッドまたはコンストラクターのパラメーターの参照データ型を渡す方法を理解するための支援が必要です。

OracleのJ2SEチュートリアルによると:

この例では、メソッドは新しいPolygonオブジェクトを作成し、Pointオブジェクトの配列から初期化します(Pointがx、y座標を表すクラスであると想定します)。

public Polygon polygonFrom(Point[] corners) {  
    // method body goes here
}

しかし、それは私がこの概念を理解するのに役立っていません。詳細な説明をいただければ幸いです。

4

2 に答える 2

2

コードでは、Polygon は次のようになります。

Point[] points = new Point[]{new Point(1,1), new Point(2,2)};
Polygon p = polygonFrom(points);

括弧内のコーナーの配列を除いて。

これは基本的にpolygonFrom関数にpoints配列を与え、それで好きなことをします。ただし、polygonFromメソッドが何を行っても元の配列は実際には変更されませんがpoints、操作するために独自の配列が作成されます。

たとえば、次のようなコードがあるとします。

String s = "Cheeseburger";
sayString(s);

そして方法:

public void sayString(String par1)
{
    par1 = par1 + "1";
    System.out.println(par1);
}

この出力は:Cheeseburger1ですが、文字列sはまだ のみCheeseburgerです。

さらに説明が必要な場合は、お尋ねください。

編集: Paul Bellora は、メソッドが配列をpolygonFrom変更できるいくつかの状況があることを指摘しました。ここでそれを説明しようとします。pointsただし、これが意味をなさない場合でも、まだ心配する必要はありません (これらすべてを理解するのは大変なことです)。

polygonFromメソッドは、独自のメソッド内およびクラス全体内の任意の変数を変更できます。したがって、points配列がメソッドの外部 (つまり、メソッドの外部) で初期化されたmain場合、polygonFromメソッドは配列を変更できますpointsが、メソッド内のコードがpolygonFromその変数を直接変更するように指示されている場合に限ります。これが理にかなっていることを願っています。

たとえば、クラスでは次のようになります。

Point[] points;

public MethodAccess()//constructor
{
    points = new Point[]{new Point(1,1), new Point(2,2)};
    Polygon p = polygonFrom(points);
}

public Polygon polygonFrom(Point[] corners){

    //doing stuff with corners variable here

    points = corners; //this will change the points variable that was passed

}

コンストラクターは変数を送信しますpolygonFromが、変数を取得してその新しいインスタンスを作成します。メソッドは、元と同じ値を持つ新しく作成された変数を変更します。ただし、メソッドが変数を変更するように明確に指示している場合、コンストラクターが送信した変数を技術的に変更します。pointspolygonFrompolygonFromcornerspointspolygonFrompoints

于 2013-02-25T05:23:02.517 に答える
0

簡単です。以下のコードを確認してください -

public void a() {
    List<String> list = new ArrayList<String>();
    b(list);
}

public void b(List<String> list) {
    list.add("something");
}

メソッド a() はリストを作成し、その参照をメソッド b() に渡して、b() がリストの内容を変更できるようにします。したがって、この場合、参照が渡されるだけで、リストは同じです。リストのコピーはここでは作成されません。

お役に立てれば。

于 2013-02-25T05:23:52.473 に答える