十六、反射

public class ReflectDemo {

    /**
     * @param args
     * @author MYZ
     * 在面向对象的世界里,万事万物皆对象,类是java.lang.Class类的实例对象
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Cat c1=new Cat();//c1是Cat类的一个实例对象
        
        //Cat这个类,也是一个实例对象,是java.lang.Class类的实例对象,我们称为该类的类类型
        
        //1.第一种表示方式
        Class clazz1=Cat.class;
        
        //2.第二种表示方式
        Class clazz2=c1.getClass();
        
        System.out.println(clazz1==clazz2);//true
        /**
         * ,一个类只可能是Class类的一个实例对象,所有表示方法表示的都是同一个,而且都表示Cat类的类类型
         */
        
        //3.第三种表示方式
        try {
            Class clazz3=Class.forName("com.myz.demo.Cat");
            
            System.out.println(clazz2==clazz3);//true
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        //4.通过类类型创建对象实例
        try {
            Cat cat2=(Cat) clazz1.newInstance();//调用无参构造方法
        } catch (InstantiationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    
}
class Cat{}

其实通过反射,我们能知道一个类有哪些方法,哪些字段

原文地址:https://www.cnblogs.com/myz666/p/8446691.html