12

標準的な本のように、コンストラクターはオブジェクトを初期化するために使用される特殊なタイプの関数です。コンストラクターは関数として定義され、クラス内の関数は静的または非静的の2つのタイプしか持つことができません。

1.)As constructor is called without object so it must be static

  Test test =new  Test();//Test() is being called without object
   so must be static

私の疑問は、コンストラクターが静的メソッドである場合、コンストラクター内でこれを頻繁に使用するにはどうすればよいかということです。

Test(){
    System.out.println(this);
}

出力は、Test@12aw212コンストラクターが非静的であることを意味しますか?

4

11 に答える 11

13

2番目の例はその場でヒットします。thisコンストラクターで参照を使用できます。つまり、コンストラクターは、現在作成されているオブジェクトであるオブジェクトに対して実行されます。

原則として、(演算子を使用して)新しいオブジェクトを作成するnewと、JVMはそのオブジェクトにメモリを割り当て、その新しく作成されたオブジェクトに対してコンストラクターを呼び出します。また、JVMは、コンストラクターの前に他のメソッドが呼び出されないようにします(これが特別な理由です)。

実際、マシンレベルでは、コンストラクターは1つの特別な暗黙のthisパラメーターを持つ関数です。この特別なパラメーター(ランタイムによって渡される)は、オブジェクトメソッドと静的メソッドの違いを生みます。言い換えると:

foo.bar(42);

に翻訳されます:

bar(foo, 42);

ここで、最初のパラメーターの名前はthisです。一方、staticメソッドはそのまま呼び出されます。

Foo.bar(42);

次のように変換されます。

bar(42);

Fooこれは、ソースコードにほとんど存在しない名前空間です。

于 2012-10-17T17:59:18.497 に答える
0

コンストラクターは非静的です。すべてのメソッドの最初のパラメーターは暗黙的this(静的を除く)であり、コンストラクターはその1つです。

于 2012-10-17T18:00:03.837 に答える
0

コンストラクターは静的関数ではありません。これを行うとTest test =new Test();、新しいTestオブジェクトが作成され、そのオブジェクトに対してコンストラクターが呼び出されます(つまりthis、新しく作成されたオブジェクトを指します)。

于 2012-10-17T18:00:13.257 に答える
0

ここでのnewキーワードはトリックです。一般的に、オブジェクトなしで呼び出している場合、メソッドは静的であることに注意してください。ただし、この特殊なケース(つまり、newキーワードが前に付く)では、コンパイラーはコンストラクターを呼び出すことを知っています。

于 2012-10-17T18:00:31.740 に答える
0

new演算子は、作成したオブジェクトへの参照を返します。

new Test(); // creates an instance.

は、オペレーターがオブジェクトをインスタンス化したSystem.out.println(this);後に呼び出されますnew

于 2012-10-17T18:03:48.027 に答える
-1

静的ではありません。コンストラクターについて読むhttp://www.javaworld.com/jw-10-2000/jw-1013-constructors.html

于 2012-10-17T18:01:41.603 に答える
-1

ない。

メソッドは、静的/非静的メソッド、別名クラス/インスタンスメソッドの2つのタイプに分けることができます。

しかし、コンストラクターはメソッドではありません。

于 2012-10-17T19:00:56.830 に答える
-1

静的クラスについて話すとき、メソッドはクラス名で呼び出されることが思い浮かびますが、コンストラクターの場合、コンストラクターはオブジェクトの作成時に初期化されるため、これは非静的であることがわかります。

于 2019-09-20T10:35:58.433 に答える
-1

コンストラクターは、静的(クラス名を使用して呼び出される)でも、オブジェクトの作成中に実行される非静的でもありません。

于 2020-01-03T10:48:16.053 に答える
-2

静的:Temp t = new Temp();

new演算子はヒープ領域にメモリを作成し、暗黙的にコンストラクタに渡しますTemp(this)this次に、ローカルパラメータ変数に呼び出されるクラスで定義された非静的インスタンス変数を初期化しますthis

class Temp{
    int a;
    Temp this; //inserted by compiler.
    Temp(Temp this){ //passed by compiler
        this.this=this; // initialise this instance variable here. 
        this.a=10;//when we write only a=10; and all the non-static member access by this implicitly.
        return this; // so that we can't return any value from constructor.
    }
}

コンストラクターは静的です。理由は次のとおりです。

  1. オブジェクトの作成に役立ちます。
  2. オブジェクトなしで呼び出されます。
于 2013-09-17T19:16:26.633 に答える
-3

コンストラクターはオブジェクトを初期化するために使用され、非静的メソッドの動作をします。非静的メソッドはオブジェクトに属し、コンストラクターもオブジェクトに属し、JVMによって呼び出され、オブジェクトの参照を使用してオブジェクトを初期化します。これは、new演算子によって作成されます。

于 2014-06-22T12:37:08.350 に答える