java基础知识复习(反射)

  1. 动态语言:类可以在运行时改变其结构的语言:例如新的函数、对象、甚至代码可以被引进,已有的函数可以被删除或是其他结构上的变化。有:C#,JavaScript,PHP,Python等。
  2. 静态语言:运行时结构不可变的语言。如Java,C++,C。Java不是动态语言,但可以成为“准动态语言”,有一定的动态性:可以利用反射机制、字节码操作获得类似动态语言的特性。
  3. Reflection被视为动态语言的关键,反射机制允许程序在执行期间借助reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法。
  4. Class是Reflection的根源,需先产生一个Class Object,才能使用reflection相关的API
  5. 加载完类之后,在堆内存的方法区中就产生了一个Class类型的对象,这个对象就包含了完整的类的结构信息。我们可以通过这个对象看到类的结构(反射)。
  6. 框架 = 反射+注解+设计模式(待补充
  7. 引入包类名称--通过new实例化--取得实例化对象
    实例化对象--getClass()方法--得到完整的包类名称
  8. 反射提供的功能:
    1)判断任意对象所属的类;构造任意类的对象;判断类所具有的成员变量和方法;处理注解;生成动态代理;
    2)通过反射,可以调用类的私有内部结构,如私有的构造器、私有方法、私有属性。
        public static void main(String[] args) throws Exception {
    
    //      不使用反射创建
            Person person = new Person("Liu",22);
            person.age = 18;
            System.out.println(person.toString());
            person.show();
    //        在Person类的外部,不可以通过Person类的对象调用其内部私有结构
    //        比如name,showNation以及私有的构造器
    
    //      使用反射,创建Person类的对象
    //       通过反射,可以调用Person类的私有内部结构,如私有的构造器、私有方法、私有属性
            Class clazz = Person.class;
            System.out.println(clazz);
            Constructor con = clazz.getConstructor(String.class, int.class);//两个参数的构造器
            Object obj = con.newInstance("Liu",12);
            Person p = (Person)obj;
            System.out.println(p.toString());
            Field age = clazz.getDeclaredField("age");
            age.set(p,18);
            System.out.println(p.toString());
            Method show = clazz.getDeclaredMethod("show");
            show.invoke(p);
    
    //      
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值