栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java之反射思想

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java之反射思想

反射

反射是在运行状态中,动态获取的信息以及动态调用对象的方法的功能。

优缺点

优点:可以动态执行,在运行期间根据业务功能动态执行方法、访问属性,最大限度发挥了java的灵活性。
缺点:对性能有影响,这类操作总是慢于直接执行java代码。

反射步骤 1).通过一个全限类名创建一个对象 方法一:类名.class属性
Class c1 = Student.class;
方法二:对象名.getClass()方法
        Student s = new Student();
        Class c3 = s.getClass();
方法三:Class.forName(全类名)方法
 Class c4 = Class.forName("com.itheima_02.Student");
2).获取构造器对象,通过构造器new出一个对象
方法名说明
Constructor[] getConstructors()返回所有公共构造方法对象的数组
Constructor[] getDeclaredConstructors()返回所有构造方法对象的数组
Constructor getConstructor(Class... parameterTypes)返回单个公共构造方法对象
Constructor getDeclaredConstructor(Class... parameterTypes)返回单个构造方法对象
Class c = Class.forName("com.itheima_02.Student");
//Constructor[] cons = c.getConstructors();
Constructor[] cons = c.getDeclaredConstructors();
        for(Constructor con : cons) {
            System.out.println(con);
        }
Constructor con = c.getConstructor();
//Constructor con = c.getDeclaredConstructor();
Object obj = con.newInstance();//T newInstance(Object...initargs)根据指定的构造方法创建对象
        System.out.println(obj);
3).通过class对象获得一个属性对象
方法名说明
Field[] getFields()返回所有公共成员变量对象的数组
Field[] getDeclaredFields()返回所有成员变量对象的数组
Field getField(String name)返回单个公共成员变量对象
Field getDeclaredField(String name)返回单个成员变量对象
Class c = Class.forName("com.itheima_02.Student");
//        Field[] fields = c.getFields();
Field[] fields = c.getDeclaredFields();
        for(Field field : fields) {
            System.out.println(field);
        }
Field addressField = c.getField("address");
//Field addressField = c.getDeclaredField(String name);
Constructor con = c.getConstructor();
        Object obj = con.newInstance();
addressField.set(obj,"西安");//void set(Object obj, Object value) 将指定的对象参数中由此 Field对象表示的字段设置为指定的新值
4).通过class对象获得一个方法对象
方法名说明
Method[] getMethods()返回所有公共成员方法对象的数组,包括继承的
Method[] getDeclaredMethods()返回所有成员方法对象的数组,不包括继承的
Method getMethod(String name, Class... parameterTypes)返回单个公共成员方法对象
Method getDeclaredMethod(String name, Class... parameterTypes)返回单个成员方法对象

//获取Class对象 
Class c = Class.forName("com.itheima_02.Student");
//Student s = new Student();
        Constructor con = c.getConstructor();
        Object obj = con.newInstance();

        //s.method1();
        Method m1 = c.getMethod("method1");
        m1.invoke(obj);

        //s.method2("张三");
        Method m2 = c.getMethod("method2", String.class);
        m2.invoke(obj,"张三");

//        String ss = s.method3("张三",30);
//        System.out.println(ss);
        Method m3 = c.getMethod("method3", String.class, int.class);
        Object o = m3.invoke(obj, "张三", 30);
        System.out.println(o);

        //s.function();
//        Method m4 = c.getMethod("function"); //NoSuchMethodException: com.itheima_02.Student.function()
        Method m4 = c.getDeclaredMethod("function");
        m4.setAccessible(true);
        m4.invoke(obj);//Object  invoke(Object obj,Object... args)调用obj对象的成员方法,参数是args,返回值是Object类型

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/333221.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号