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