Java classオブジェクトの説明、Java静的変数宣言と割当値に基づいて説明する(詳細は不明)


まずJDKの説明を見てください。

java.lang.Object
  java.lang.Class<T>
  
Instances of the class Class represent classes and interfaces in a running Java application. An enum is a kind of class and an annotation is a kind of interface. Every array also belongs to a class that is reflected as a Class object that is shared by all arrays with the same element type and number of dimensions. The primitive Java types (boolean, byte, char, short, int, long, float, and double), and the keyword void are also represented as Class objects.

Class has no public constructor. Instead Class objects are constructed automatically by the Java Virtual Machine as classes are loaded and by calls to the defineClass method in the class loader.

The following example uses a Class object to print the class name of an object:

   void printClassName(Object obj) {
     System.out.println("The class of " + obj +
              " is " + obj.getClass().getName());
   }
 
It is also possible to get the Class object for a named type (or for void) using a class literal.

  System.out.println("The name of class Foo is: "+Foo.class.getName());

       JAVA   ,          Class     ,Class           。     ,      ,    Class  。          Class  ,                Class  。Java    (boolean, byte, char, short, int, long, float, and double)     void     Class  。

Class        ,         JVM          defineClass      。

             Class       。
   void printClassName(Object obj) {
     System.out.println("The class of " + obj +
              " is " + obj.getClass().getName());
   }
  class             Class   
  System.out.println("The name of class Foo is: "+Foo.class.getName());
上の内容をまとめてみますと、Javaのすべてのオブジェクトと基本タイプはクラスで指してもいいです。次はデモを見ます。

/**
 * 
 *     Class   Instance     ;
 *                 ;
 * @author zzy
 *
 */
public class ObjClass {
  private enum tmpEnum {A, B, C};
  public static void main(String[] args){
    int[] tmpArray = {1,2,3};
    Class classType;
    
    try {
      //         Class  ,JVM     。
      classType = InClass.class;
      System.out.println(".class: " + classType);
      System.out.println(".class finish.");
      
      // Java   
      classType = Class.forName("InClass");
      System.out.println("Class.forName: " + classType);
      System.out.println("Class.forName: finish.");

      
      //     
      InClass newClassType = new InClass();
      classType = newClassType.getClass();
      System.out.println("new Object.getClass: " + classType);
      System.out.println("new Object.getClass: finish.");

      //     
      classType = tmpArray.getClass();
      System.out.println("Array.getClass:" + classType.getSimpleName());
      System.out.println("Array.getClass: finish.");
      
      //     
      classType = tmpEnum.class;
      System.out.println("enum.class:" + classType);
      System.out.println("enum.class: finish.");

    } catch (ClassNotFoundException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }      
  }  
}
class InClass{
  //             
  {
    staticPara = 10;
  }
  public static int staticPara;
  
  //     
  public InClass(){
    System.out.println("construction...");
  }
  
  //      
  static {
    System.out.println("static function...");
  }
  
  //       
  {  
    staticPara = 20;
  }
  
  {
    System.out.println("normal function, staticPara:" + staticPara);
  }
  
  //       
  {
    staticPara = 30;
  }  
}
出力結果:

.class: class InClass
.class finish.
static function...
Class.forName: class InClass
Class.forName: finish.
normal function, staticPara:20
construction...
new Object.getClass: class InClass
new Object.getClass: finish.
Array.getClass:int[]
Array.getClass: finish.
enum.class:class ObjClass$tmpEnum
enum.class: finish.
説明:
1.  .クラス方式でクラスファイルのクラスオブジェクトを取得するには、JVMにロードする必要はありません。
2.  Class.forNameの方式JVMはクラスをロードします。同時にコンパイルします。このように、クラス内の静的コードブロックが実行される。
3.  作成例のプロセス(JVMにロードされました。つまりコンパイルされました。)は、コンストラクターを呼び出し、非静的コードブロックを実行します。
4.  静的コードは変数の宣言および割当順序に影響を及ぼさない(コンパイルプロセス処理)ので、結果は20である。
5.データオブジェクトと列挙オブジェクトもクラスのオブジェクトに指定されます。
以上の本はJava classの対象説明、Java静的変数声明と賦価値説明(詳しくは分かりません)に基づいて、小編集が皆さんに共有した内容の全部です。