クラス#クラス#


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パッケージのクラス

  • 通常、データ型を知っている場合は使用しません.
  • StringTest.java
    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.java
    public 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.java
    public 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);
    	}
    }