クラス#クラス#
04.Classクラスの使用
クラス#クラス#
Javaのすべてのクラスとインタフェースはコンパイル後に生成されたクラスファイルです
Classクラスは、コンパイルされたクラスファイルをロードしてオブジェクトを動的にロードし、情報を取得する方法を提供します.
Class.forName(「クラス名」)メソッドを使用してクラスを動的にロードする
Class c = Class.forName("java.lang.String");
Class c = String.class;
String s = new String();
Class c = s.getClass(); //Object 메서드
ダイナミックロード
コンパイル時にデータ型をバインドするのではなく、実行時にデータ型をバインドします.
プログラミング時に文字列変数として処理し、実行時に必要なクラスをロードしてバインドできます.
ダイナミックロードエラーは、コンパイル時にタイプが不確定であるため、プログラムに重大な障害をもたらす可能性があります.
クラスのnewInstance()メソッドを使用してインスタンスを作成する
クラス情報の理解
反射プログラミング:クラスを使用してクラスの情報(ジェネレータ、変数、メソッド)を理解し、インスタンスを作成します.
呼び出しメソッドのプログラミング
ローカルメモリにオブジェクトがない場合は、リモートプログラミングを使用します.オブジェクトのタイプが不明な場合は、
java.lang.reflectパッケージのクラス
通常、データ型を知っている場合は使用しません.
public class StringTest {
public static void main(String[] args) throws ClassNotFoundException {
Class c3 = Class.forName("java.lang.String");
Constructor<String>[] cons = c3.getConstructors();
for(Constructor con: cons) {
System.out.println(con);
}
System.out.println();
Method[] methods = c3.getMethods();
for(Method method : methods) {
System.out.println(method);
}
}
}
Person.javapublic class Person {
private String name;
private int age;
public Person() {};
public Person(String name) {
this.name = name;
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String toString() {
return name;
}
}
ClassTest.javapublic class ClassTest {
public static void main(String[] args) throws InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException,
ClassNotFoundException, NoSuchMethodException, SecurityException {
Person person = new Person("James");
System.out.println(person);
Class c1 = Class.forName("ch04.Person");
Person person1 = (Person)c1.newInstance();
System.out.println(person1);
Class[] parameterTypes = {String.class};
Constructor cons = c1.getConstructor(parameterTypes);
Object[] initargs = {"김유신"};
Person personLee = (Person)cons.newInstance(initargs);
System.out.println(personLee);
}
}
Reference
この問題について(クラス#クラス#), 我々は、より多くの情報をここで見つけました https://velog.io/@ysb05222/Class-클래스テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol