4

コンストラクターは同じコードを共有できるように思えます。たとえば、次のようになります。

public class Foo {
 private int foo;
 {foo = 5;}
 public Foo(){}
 public Foo(int v){this.foo = v;}
 public int getFoo(){return foo;}
}   

コード「foo=5;」両方のコンストラクターに対して呼び出されます。

できないようですが、確認したいです。パラメータを使用するような一般的なコードを作成することはできませんか?

たとえば、次のようなものです。

public class Foo {
 private int foo;
 (int m){foo = m*5;}
 public Foo(int m){}
 public Foo(int v,int m){this.foo = v;}
 public int getFoo(){return foo;}
}   

私の理解では、唯一の方法は、すべてのコンストラクターによって呼び出されるプライベート void init(int m) を作成することですか?

ps: {foo = 5;} を「共通コード」と呼んでいますが、この機能には別の正式な名前があるのでしょうか?

編集 (1):

  1. 私が探していた用語は初期化ブロックです

  2. この質問は、コンストラクターが別のコンストラクターも呼び出すことができるかどうかを尋ねることと同じではありません。初期化ブロックを使用する場合、コードは AUTOMATICALLY と呼ばれるためです。コンストラクターを呼び出し、それを呼び出すのを忘れるリスクなし

  3. 「void init」の使用に関する私のコメントは良くありませんでした。実際、この場合、別のコンストラクターを呼び出す方が良いです。

  4. 要するに、私の質問: 初期化ブロックはパラメーターを取ることができますか? これは、すべてのコンストラクターでいくつかのパラメーターを強制的に実装するのと同じようなものです。

編集 (2):

私が求めていることを達成する唯一の方法は、継承を使用して特定のコンストラクターの使用を強制することではないかと思います。

4

2 に答える 2

6

this()を呼び出してパラメーター リストを照合することにより、他のコンストラクターからコンストラクターを呼び出すことができます。

私が持っていると言う:

Foo(int a, int b) {
  // some code..
}

しかし、私も呼び出したい:

Foo(int a, int b, int c) {
  // some other code
}

私はこう言います:

Foo(int a, int b) {
  this(a, b, 0);
  // Whatever other code you want in this constructor.
}
于 2013-11-09T03:17:22.433 に答える
0

Java がオブジェクトを作成する方法を理解する必要があります!

class A{

private String b = "b";
private static String a = "a";

{
   b = "b2";
}

static{
 a = "a2";  
}

public A()
{
 b = "b3";
}


} 

つまり、オブジェクトを作成するときのアイデアは

new A();

最初

private static String a = "a";

static{
 a = "a2";  
}

private String b = "b";

{
   b = "b2";
}

そしてその後のみ

public A()
{
 b = "b3";
}

ただし、静的変数と静的ブロックの優先順位が同じになることに注意してください。また、通常の変数とブロックの優先度は同じです。次のコードを入れると

static{
 a = "a2";  
}

以降

private static String a = "a";

宣言の前に変数を使用するため、ブロック内のコードは無視されます。通常の変数についても同じです。

于 2013-11-09T03:34:47.837 に答える