2

以下の2つのポイントがjavadocに記載されています。

  1. 「クラスオブジェクトは、クラスがロードされるときにJava仮想マシンによって、およびクラスローダーのdefineClassメソッドの呼び出しによって自動的に構築されます。
  2. クラスのすべてのインスタンスは、メモリ内の1つの固定された場所にあるクラス変数を共有します。どのオブジェクトでもクラス変数の値を変更できますが、クラスのインスタンスを作成せずにクラス変数を操作することもできます。

私の質問は次のとおりです。クラスメソッドとクラス変数はJavaの「java.lang.class」オブジェクトに属しますか?

4

4 に答える 4

1

1. Class methodsClass variableは、クラスに属するクラスの静的メンバーであり、クラスのすべてのオブジェクトによって共有されています。

2. non-static variables and methods in a classオブジェクトに属します。すべてのオブジェクトは、これらの非静的メンバーを独自に持っています。

3. 実行中の Java アプリケーションを表しjava.lang.Class<T>ます。classesinterfaces

4. クラス オブジェクトには、クラスの実行時表現が含まれます。システム内のすべてのオブジェクトは何らかのクラスのインスタンスであり、クラスごとにこれらの記述子オブジェクトの 1 つがあります。クラス記述子は実行時に変更できません。

于 2012-07-26T18:10:59.583 に答える
1

はい。java.lang.Class のすべてのインスタンスは、クラス変数とそのクラスのメソッドの両方へのアクセスを許可します。

http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Class.html

于 2012-07-26T18:10:25.750 に答える
0

はい。

これは役立つかもしれません....Javaのすべてのオブジェクトは特定のクラスに属しています。そのため、他のすべてのクラスに継承されるObjectクラスがgetClass()メソッドを定義します。

getClass()、またはclass-literal-Foo.classクラスに関するメタデータを含むClassオブジェクトを返します。

  • 名前
  • パッケージ
  • メソッド
  • 田畑
  • コンストラクター
  • 注釈
于 2012-07-26T18:22:47.067 に答える
0

すべてのクラスには、Object クラスから継承されたメソッドがあります。

以下のコードは、SomeClass のすべてのパブリック変数とメソッドを繰り返し処理し、それらを出力します。

出力から、someVariable と someMethod() が私たちのクラスに属し、他のすべてが Object クラスに属していることがわかります。

import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class Test
{
    public static void main( String args[] )
    {
        for ( Field field : SomeClass.class.getFields() )
        {
            System.out.println( field );
        }

        for ( Method method : SomeClass.class.getMethods() )
        {
            System.out.println( method );
        }
    }

    class SomeClass
    {
        public String someVariable;

        public void someMethod()
        {

        }
    }
}

出力:

public java.lang.String com.Test$SomeClass.someVariable
public void com.mailings.classes.Test$SomeClass.someMethod()
public final void java.lang.Object.wait() throws java.lang.InterruptedException
public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException
public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException
public native int java.lang.Object.hashCode()
public final native java.lang.Class java.lang.Object.getClass()
public boolean java.lang.Object.equals(java.lang.Object)
public java.lang.String java.lang.Object.toString()
public final native void java.lang.Object.notify()
public final native void java.lang.Object.notifyAll()
于 2012-07-26T18:16:57.337 に答える