回忆(一):反射中获得class对象的三种方法
阅读原文时间:2023年07月09日阅读:1
package reflex;

/*
 * 反射:就是通过class文件对象 去使用该文件中的成员
 * 变量,构造方法,成员方法。
 *
 * Person p = new Person(); p.使用
 *
 * 要想这样使用,首先必须得到class文件对象,其实也
 * 就是得到Class类的对象。
 * Class类:
 *         成员变量 Field
 *         构造方法 Construtor
 *         成员方法 Method
 *
 * @author mzy
 *
 * 获取class类的对象的方式:
 *         A:Object类的getClass()方法
 *         B:数据类型的静态class
 *         C:Class类中的静态方法
 *             public static Class<?> forName(String className)
 *
 *
 * 我们写的话:
 *         获得Class对象,三种都可以;第二种最方便
 *
 * 开发:
 *         第三种最好:因为第三种是一个字符串,
 *         而不是一个具体的类名,这样我们就可
 *         以把这样的字符串配置到配置文件中。
 *
 *
 *
 *
 */
public class ReflectDemo01_visit_three_methods {
    public static void main(String[] args) throws ClassNotFoundException {
        // 获得Class的方法(感叹号问题为泛型)
        // 方式1:
        Person p = new Person();
        Class c = p.getClass();

        Person p2 = new Person();
        Class c2 = p2.getClass();

        System.out.println(p == p2); // false
        System.out.println(c == c2); // true

        // 方式2: 通过类名直接获得class对象
        Class c3 = Person.class;
        // 所有的数据类型都有它的class对象
        // int.class;
        // String.class;
        System.out.println(c == c3); // true

        // 方式3:
        /*
         * 抛出ClassNotFoundException

6+     * 找不到
         * 以后涉及到通过类的名称来找的
         * 一定要写全路径(带包名的全路径)
         * Class c4 = Class.forName("Perosn");
         *
         *
         * 打开.java文件上的箭头,右键点 Copy Qualified Name
         */
        Class c4 = Class.forName("reflex.Person");
        System.out.println(c == c4); // true
    }
}

其中的person类:

package reflex;

public class Person {
    // 成员变量
    private String name;
    int age;
    public String address;

    // 构造方法
    public Person() {
    }

    Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    private Person(String name) {
        this.name = name;
    }
    public Person(String name, int age, String address) {
        this.name = name;
        this.age = age;
        this.address = address;
    }

    // 成员方法
    public void show() {
        System.out.println("show");
    }

    public void method(String s) {
        System.out.println("method" + s);
    }

    public String getString(String s, int i) {
        return s + "---" + i;
    }

    @Override
    public String toString() {
        return "Person [name=" + name + ", age=" + age + ", address=" + address + "]";
    }

    private void function() {
        System.out.println("function");
    }

}