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

Java反射机制

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

Java反射机制

1、反射机制(java特性之一,是构建框架技术的基础所在)
    Java 反射机制是在运行状态中,动态获取信息以及动态调动对象方法的功能。对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为 Java 语言的反射机制。简单来说,反射机制指的是程序在运行时能够获取自身的信息。在 Java 中,只要给定类的名字,就可以通过反射机制来获得类的所有信息。Java反射的3个动态性质:

    运行时生成对象实例运行期间调用方法运行时更改属性 优点:

    能够运行时动态获取类的实例,大大提高系统的灵活性和扩展性。与 Java 动态编译相结合,可以实现无比强大的功能。对于 Java 这种先编译再运行的语言,能够让我们很方便的创建灵活的代码,这些代码可以在运行时装配,无需在组件之间进行源代码的链接,更加容易实现面向对象.

2、反射的应用

    获取类的信息

      )获取class对象
        调用对象的getClass()方法: Student stu=new Student(); Class cla=stu.getClass();调用类的class属性: Class cla=Student.class;使用Class类的forName()静态方法:Class cla=Class.forName(“com.zb.student”)(类名前添加完整包名)
      )从Class对象获取信息
        访问Class对应的类所包含的构造方法 (Constructor)访问Class对应的类所包含的方法 (Menthod)访问Class对应的类所包含的属性 (Filed)访问Class对应的类所包含的注解 (Annotation)访问Clas对应的类的其他信息

    创建对象:

      使用class对象的newInstance()方法创建对象使用Constructor对象创建对象

    访问类的属性

    访问类的方法

    使用Array类动态创建和访问数组

    public class Student {
        private String name;
        private int age;
        //省略构造方法 gettet/setter方法
        //展示信息
        public void show(){
            System.out.println("姓名:"+name+"t年龄:"+age);
        }
    }
    
    //测试
    public class Test {
        public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
            //获取class对象
            Class stu=Class.forName("demo1.Student");
            //获取Student属性
            Field[] fields=stu.getFields(); //获取公有属性
            Field[] all=stu.getDeclaredFields(); //获取所有属性
            //遍历共有属性
            System.out.println("公有属性------");
            for (Field field : fields) {
                System.out.println(field.getName());
            }
            //遍历所有属性
            System.out.println("全部属性-----");
            for (Field field : all) {
                System.out.println(field.getName());
            }
    
            //公有方法,包含继承方法
            Method[] method=stu.getMethods();
            System.out.println("公有方法-------");
            for (Method method1 : method) {
                System.out.println(method1.getName());
            }
            //所有方法 不包含继承方法
            Method[] declaredMethods = stu.getDeclaredMethods();
            System.out.println("全部方法-----");
            for (Method declaredMethod : declaredMethods) {
                System.out.println(declaredMethod.getName());
            }
            System.out.println("构造方法-------------");
            //构造方法 无参
            Constructor constructor1=stu.getConstructor();
            //构造方法 有参
            Constructor constructor2=stu.getConstructor(new Class[]{String.class
            ,int.class});
            //创建对象
            Object obj1=constructor1.newInstance();
            Object obj2=constructor2.newInstance("张三",18);
            //获取一个方法
            Method showMethod=stu.getMethod("show", null);
            //调用方法
            System.out.println("无参构造----");
            showMethod.invoke(obj1,null);
            System.out.println("有参构造----");
            showMethod.invoke(obj2,null);
        }
    }
    
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/764001.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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