public class TestClass{
public static void main(String []args) {
TestClass t1 = new TestClass();
t1.anything();
}
}
これは完全に有効なコードです。 main
メソッドが呼び出されると、TestClass
の以前のインスタンスは存在しません(main
メソッドがstatic
であるため、これは不要です)。
public class Test2{
public Test2 clone(){
return new Test2();
}
}
これも完全に有効です。 Test2の新しいインスタンスを作成すると、clone
メソッドが含まれていますが、メソッドは自動的に実行されません。 clone
メソッドが呼び出された場合にのみ、Test2のインスタンスがもう1つ作成されます。
public class MyLinkedList{
MyLinkedList next;
MyLinkedList(int elems){
if(elems>0){
next = new MyLinkedList(elems-1);
}else{
next = null;
}
}
}
は、作成はとても時々が新たな創造をトリガーするインスタンスを作成し、条件によって守られているため、コンストラクタは、同じコンストラクタを使用して新しいインスタンスを作成した場合でも、同様に完全に有効です。
public class Fail{
public Fail(){
new Fail();
}
}
ここで唯一問題のある例です。コンパイラは文句を言わない。 はをバイトコードに変換し、はを実行することができます。その引数なしのコンストラクタがが
コンストラクタは新しい失敗
新しい失敗を作成しようとすると呼ばれる
割り当てられ
- 新しい失敗:実行時には、しかし、あなたは、スタックオーバーフローを引き起こします...
Cその引数なしのコンストラクタが
と呼ばれる
割り当てられ、一般に、コンパイラはすべての無限再帰を防ぐことができないので、omfilerはこれを許可します。コンパイラは、バイトコードに変換できるものすべてを許可します。それは無条件に自分自身を呼び出す法やチェーンを検出した場合 コンパイラは、しかし、は警告を発行することができます。
は、すべてのメソッドがクラス定義の外にあることを意味しますか?オブジェクトの作成時にクラス変数のみが作成されますか? –
@RaviKumarMistry。私はそれを言わなかった。主な方法は、事実上、外のクラスとみなすことができます。クラスにはmain以外のメソッドもあります。彼らはあなたのクラスだけにあり、あなたのインスタンス状態の一部です。 –
@RaviKumarMistry。 mainをクラスの中に入れなければならない唯一の理由は、Javaのクラスの外にメソッドを持つことができないことです。 –