java——反射


    /*
     * 获取字节码对象的方式:
     * 1,Object类中的getClass()方法的。
     * 想要用这种方式,必须要明确具体的类,并创建对象。
     * 麻烦 .
     * 
     */

        Person p = new Person();
        Class clazz = p.getClass();
        
        Person p1 = new Person();
        Class clazz1 = p1.getClass();
        
        System.out.println(clazz==clazz1);

    /*
     * 方式二:
     * 2,任何数据类型都具备一个静态的属性.class来获取其对应的Class对象。
     * 相对简单,但是还是要明确用到类中的静态成员。
     * 还是不够扩展。 
     * 
     */

        Class clazz = Person.class;
        Class clazz1 = Person.class;
        System.out.println(clazz==clazz1);
    }
    
    /*
     * 方式三:
     * 只要通过给定的类的 字符串名称就可以获取该类,更为扩展。
     * 可是用Class类中的方法完成。
     * 该方法就是forName.
     * 这种方式只要有名称即可,更为方便,扩展性更强。 
     */
    

        String className = "cn.itcast.bean.Person";
        
        Class clazz = Class.forName(className);
        
        System.out.println(clazz);
    
            String name = "dd.Person";
    
            Class clazz = Class.forName(name);
            
            Person p = (Person) clazz.newInstance();
            p.setAge(20);
            p.setName("花花");
            
            Constructor constructor = clazz.getConstructor(int.class,String.class);
        
            Object obj = constructor.newInstance(20,"花花");
            
    
            
            
            /*
             * 获取字节码文件中的字段。
             */
    public static void getFieldDemo() throws Exception {
                
                Class clazz = Class.forName("cn.itcast.bean.Person");
                
                Field field = null;//clazz.getField("age");//只能获取公有的,
                
                field = clazz.getDeclaredField("age");//只获取本类,但包含私有。 
                
                //对私有字段的访问取消权限检查。
                field.setAccessible(true);
                
                Object obj = clazz.newInstance();
                
                field.set(obj, 89);
                
                
                Object o = field.get(obj);
                
                System.out.println(o);

    public static void getMethod() throws Exception {
                    
                    Class clazz = Class.forName("cn.itcast.bean.Person");
                    
                    Method[] methods  = clazz.getMethods();//获取的都是公有的方法。 
                    methods = clazz.getDeclaredMethods();//只获取本类中所有方法,包含私有。 
                    for(Method method : methods){
                        System.out.println(method);

    public static void getMetho2() throws Exception {

        Class clazz = Class.forName("cn.itcast.bean.Person");

        Method method = clazz.getMethod("paramMethod", String.class, int.class);

        Object obj = clazz.newInstance();

        method.invoke(obj, "小强", 89);

    }

    public static void getMethod1() throws Exception {

        Class clazz = Class.forName("cn.itcast.bean.Person");

        Method method = clazz.getMethod("show", null);// 获取空参数一般方法。

        // Object obj = clazz.newInstance();
        Constructor constructor = clazz.getConstructor(String.class, int.class);
        Object obj = constructor.newInstance("小明", 37);

        method.invoke(obj, null);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容