クラスレベルでメソッドを呼び出す方法を教えてください。
以下のようなクラスがあるとします。クラス レベルで test1Method を呼び出すことはできますか? 正しくない場合は理由を教えてください..
class Test2 {
Test1 t1=new Test1();
t1.test1Method();
public void test2Method() { }
}
クラスレベルでメソッドを呼び出す方法を教えてください。
以下のようなクラスがあるとします。クラス レベルで test1Method を呼び出すことはできますか? 正しくない場合は理由を教えてください..
class Test2 {
Test1 t1=new Test1();
t1.test1Method();
public void test2Method() { }
}
いいえ、クラスの直下にメソッド呼び出しステートメントまたはその他のステートメントを含めることはできません。JLS セクション 8 - クラスで指定されているとおり:
クラスの本体は、メンバー (フィールドとメソッド、およびネストされたクラスとインターフェイス)、インスタンスと静的初期化子、およびコンストラクターを宣言します (§8.1.6)。
これらのメンバー(何らかのメソッド)、初期化子、またはコンストラクターのいずれかでメソッド呼び出しを移動する必要があります。
インスタンスブロック内で呼び出すことができます
class Test2 {
{
Test1 t1=new Test1();
t1.test1Method();
}
}
型のオブジェクトが構築されるたびに、インスタンスまたは初期化ブロックが呼び出されます。Test2
JVM は、以下のように、インスタンス ブロックの内容がコンストラクター内にコピーされることを確認します。
class Test2 {
public Test2() {
{
Test1 t1=new Test1();
t1.test1Method();
}
}
}
class Test2 {
static {
Test1 t1=new Test1();
t1.test1Method();
}
}
静的ブロックは、クラスが初めてTest2
ロードされるときに実行されます。
test1Method メソッドの戻り値の型を制御できる場合は、メソッドで Test1 オブジェクトを返し、以下のようにコードを記述できます。
class Test2 {
Test1 t1=new Test1().test1Method();
public void test2Method() { }
}