Java反射

最近在研究spring框架,而spring的ioc是基于反射机制来完成的,因此先来学习下反射

  1. 使用场景
    当我们的程序在运行时,需要动态的加载一些类,而这些类可能由于之前用不到所以没有加载到jvm,而是在运行时根据需要才加载,比如,我们之前连接mysql时,都要动态的加载mysql驱动程序,这时就要用到反射。

  2. 原理机制

  • java文件会被被编译成class文件
  • 通过class文件名获取这个文件
  • 调用newInstance动态的创建这个类
  1. 实现
  • 获取class文件(三种方法)
    1. Class.forName
    2. 对象.getClass
    3. 对象.class
  • 创建对象
    调用newInstance()方法
  • 获取对象参数
    1. getFiled: 访问公有的成员变量
    2. getDeclaredField:所有已声明的成员变量。但不能得到其父类的成员变量
  • 调用对象方法
    1. getDeclaredMethods()方法返回类或接口声明的所有方法,包括公共、保护、默认(包)访问和私有方法,但不包括继承的方法。
      2.getMethods()方法返回某个类的所有公用(public)方法,包括其继承类的公用方法。
  1. 实例
public class testReflection {

    public int age=10;
    public int getAge(){
        return age;
    }
    public int getSome(int i){
        return i;
    }

    public static void main(String[] args) throws Exception{
        Class<?> clazz=Class.forName("xy.reflection.testReflection");
        //无参方法
        Method method=clazz.getMethod("getAge");
        int i=(Integer) method.invoke(clazz.newInstance());
        System.out.println(i+"");
        //有参方法
        Method m=clazz.getMethod("getSome", int.class);
        int j=(Integer) m.invoke(clazz.newInstance(),100);
        System.out.println(j+"");
    }

    @Test
    public void testMethod() throws Exception{
        Class<?> clazz=Class.forName("xy.reflection.testReflection");
        System.out.println(clazz.getName());
       //获取对象的属性
        Field field=clazz.getDeclaredField("age");
        field.set(this,2);
        System.out.println(age+"");

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

相关阅读更多精彩内容

  • 一、概述 1、Java反射机制(Java-Reflect): 在运行状态中,对于任意一个类,都能够知道这个类中的所...
    年少懵懂丶流年梦阅读 4,588评论 0 5
  • java通常是先有类再有对象,有对象我就可以调用方法或者属性。反射其实是通过Class对象来调用类里面的方法。通过...
    yzw12138阅读 369评论 0 0
  • 一、概述 Java反射机制定义 Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类中的所有属性和方法...
    CoderZS阅读 1,703评论 0 25
  • 前言 现在在我们构建自己或公司的项目中,或多或少都会依赖几个流行比较屌的第三方库,比如:Butter Knife、...
    戴定康阅读 4,045评论 0 17
  • 昨天是孙子存听写的,今天是我听写的,今天我们学的口算题卡,一课一练,和数学课本,还有语文,我们学了山,石,田,还有...
    付梦缘阅读 153评论 0 0

友情链接更多精彩内容