.class getClass()forName()詳細

6783 ワード

クラス名.classはClassオブジェクトのハンドルで、ロードされたクラスごとにjvmにClassオブジェクトが対応しています.新しいオブジェクトを作成するには、Classオブジェクトのローカルclass.forNameを直接使用すればいいので、newクラス名は必要ありません.
Javaでは、各classに対応するClassオブジェクトがあり、クラスを作成し、コンパイルが完了すると、生成された.classファイルにclassオブジェクトが生成され、そのクラスのタイプ情報を表すために使用されます.Classインスタンスを取得する3つの方法:1.オブジェクト呼び出しgetClass()メソッドを使用してオブジェクトのClassインスタンスを取得する2.Classの静的メソッドforName()を使用してクラスの名前を使用してClassインスタンスを取得する3.Classメソッドを使用してClassインスタンスを取得し、基本データ型のパッケージクラスに対して.TYPEを使用して対応する基本データ型のClassインスタンスを取得することもできます
calss ClassTest

{

           public static void main(String[] args)

           {

                   /*

                   //      getClass()        Class  

                   Point pt=new Point();                

                   Class c1=pt.getClass();

                   System.out.println(c1.getName());                   //  :Point

                

                   //  Class     forName(),         Class  

                   try

                   {

                           Class c2=Class.forName("Point");

                           System.out.println(c2.getName());           //  :Point

                   }

                   catch(Exception e)

                   {

                           e.printStackTrace();

                   }



                   //  .calss     Class  ( )

                   Class c3=Point.calss;

                   System.out.println(c3.getName());                   //  :Point



                   //  .calss     Class  (    )

                   Class c4=int.calss;

                   System.out.println(c4.getName());                   //  :int



                   //  .calss     Class  (          )

                   Class c5=Integer.TYPE;

                   System.out.println(c5.getName());                   //  :int

                

                   Class c6=Integer.class;

                   System.out.println(c6.getName());                   //  :java.lang.Integer

                   */

                

                   //     :     before new Point()

                                   loading point

                                   after new Point()

                                   loading Line        

                   // new Point()        , forName            。

                   System.out.println("before new Point()");

                   new Point();

                   System.out.println("after new Point()");



                   try

                   {

                           Class.forName("Line");

                   }catch(Exception e)

                   {

                           e.printStackTrace();

                   }

                

           }

}

class Point()

{

           static

           {

                   System.out.println("loading point");

           }

           int x,y;

}

class Line

{

           static

           {

                   System.out.println("loading Line");

           }

}

実行中にクラスのオブジェクトを生成する場合、java仮想機会はクラスのClassオブジェクトがロードされているかどうかを検出します.ロードされていない場合、java仮想機会はクラス名に基づいて.classファイルを見つけてロードします.あるタイプのClassオブジェクトがメモリにロードされると、そのタイプのすべてのオブジェクトを生成するために使用できます.新Instance()呼び出し内のデフォルトの構築方法.
NewInstance()はクラスのデフォルトの構築方法を呼び出します.インスタンスのオブジェクトに独自に定義された構築方法(書き換えられたデフォルトの構築方法と同じ構築方法を除く)がある場合、このClassオブジェクトが表すクラスの新しいインスタンスを作成します.
class ClassTest

{

          public static void main(String[] args)

          {

                  if(args.length!=1)

                  {

                          System.out.println("args.length!=1");

                          return;

                  }

                  try

                  {

                          Class c=Class.forName(args[0]);

                          Point pt=(Point)c.newInstance();

                          pt.output();

                  }catch(Exception e)

                  {

                          e.printStackTrace();

                  }

          }

}

class Point

{

          int x;

          int y;

          static 

          {

                  System.out.println("Loading point");

          }

          void output()

          {

                  System.out.println("x="+x+",y="+y);

          }

}

コマンドプロンプトの下でクラスをコンパイルし、java ClassTest Pointを入力すると、Loading pointとx=0、y=0が出力されます.