[Java]Classクラス
クラス#クラス#
コンパイルされたクラスファイルをロードしてオブジェクトを動的にロードし、情報を取得する方法を提供するクラス.
Class.クラスはforName(クラス名)メソッドで動的にロードできます.
Class c = Class.forName("java.lang.String");
// java.lang.String에 대한 클래스를 동적 로딩으로 가져오는 코드
ダイナミックロードコンパイル時にデータ型をバインドするのではなく、実行時にデータ型をバインドする方法です.動的ロード方法の利点は、プログラミング時に文字列変数として処理でき、実行時に必要なクラスをロードしてバインドできることですが、コンパイル時にタイプを特定できず、エラーが発生するとプログラムに障害が発生します.
package ch04;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
public class StringTest {
public static void main(String[] args) throws ClassNotFoundException {
Class c = Class.forName("java.lang.String");
Constructor[] cons = c.getConstructors();
for (Constructor co: cons) {
System.out.println(co);
}
Method[] m = c.getMethods();
for (Method method: m) {
System.out.println(method);
}
}
}
Reflection Programming
クラスを使用して、クラスの情報(ジェネレータ、変数、メソッド)、インスタンスの作成、メソッドの呼び出しのプログラミングを理解します.
通常、ローカルメモリで使用しないオブジェクトがない場合は、リモートプログラミングでオブジェクトのタイプが不明な場合に使用します.
(一般的には、データ型を知っている場合は使用しません)
java.lang.reflectは、パッケージ内のクラスを使用してプログラミングされます.
👨🏻💻 Example Code
Person.java
package ch04;
public class Person {
private String name;
private int age;
public Person() {}
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.javapackage ch04;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
public class ClassTest {
public static void main(String[] args) throws ClassNotFoundException, InstantiationException,
IllegalAccessException, NoSuchMethodException, SecurityException, IllegalArgumentException, InvocationTargetException {
// TODO Auto-generated method stub
Class c1 = Class.forName("ch04.Person");
Person person = (Person)c1.newInstance();
// 11~13번째 줄 코드는 Person person = new Person(); 와 같은 코드이다.
person.setName("Lee");
System.out.println(person);
// 이미 인스턴스가 있는 상태면 getClass를 통해 class를 불러올 수 있다.
Class c2 = person.getClass();
Person p = (Person)c2.newInstance();
// newInstance를 통해 인스턴스를 생성하면 default constructor로 생성하게 된다.
System.out.println(p);
Class[] parameterTypes = {String.class};
Constructor cons = c2.getConstructor(parameterTypes);
// 위의 코드를 통해 parameterType에 있는 constructor를 찾게된다.
Object[] initargs = {"Kim"};
Person kimPerson = (Person)cons.newInstance(initargs);
System.out.println(kimPerson);
// 21, 27~33번째 줄 코드는 Person person = new Person("Kim"); 와 같은 코드이다.
// 위의 코드들은 일반적으로 사용하지 않고 local에 Person이라는 class가 없어서
// constructor정보를 가져와 그 정보를 이용해 생성할 때 사용한다.
}
}
Reference
Reference
この問題について([Java]Classクラス), 我々は、より多くの情報をここで見つけました https://velog.io/@seongwon97/Java-Class-클래스テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol