首页 > 其他分享 >反射机制

反射机制

时间:2023-01-10 22:33:23浏览次数:41  
标签:lang 反射 forName java 机制 Class

反射机制

反射机制概述

  • 反射机制的作用:
    • 通过反射机制可以操作字节码文件(可以读和修改字节码文件。
    • 通过反射机制可以操作代码片段(class文件)
  • 反射机制在哪个包下面:
    • java.lang.reflect.*
  • 反射机制相关的重要的类:
    • java.lang.class : 代表整个字节码文件,一个类
    • java.lang.reflect.Method : 代表字节码中的方法字节码,方法
    • java.lang.reflect.Constructor : 代表构造方法
    • java.lang.reflect.Field:代表属性

获取Class的三种方式

/*
class.forName()
	1 静态方法
	2 方法参数是一个字符串
	3 字符串需要一个完整类名,必须带有包名
*/
Class c1 = Class.forName("java.lang.String");
//java 中任何对象都有一个方法:getClass()
String s = "afds";
Class x = s.getClass();
c1==x
//java 中任何一种类型都有.class属性
Class z = String.class

实例化对象

通过反射机制获取Class,通过Class来实例化对象

Class c = Class.forName("com.winter.user");
Object obj = c.newInstance();
//newInstance() 这个方法会调用user类的无参数构造方法,完成对象的创建

反射机制的灵活性

可以在不改变java代码的基础上,做到不同对象的实例化,非常灵活。

符合OCP开闭原则:对扩展开放,对修改关闭

FileReader reader = new FileReader(fileName:"");
Properties pro = new Properties();
pro.load(reader);
reader.close();
String className = pro.getProperties("className");
Class c = Class.forName(className);
Object obj = c.newInstance();
System.out.println(obj);

Class.forName()

  • Class.forName()发生了什么?

    静态代码块在类加载时执行,并且只执行一次。

    Class.forName()在执行时,会导致类加载,所以会执行一次静态方法。

标签:lang,反射,forName,java,机制,Class
From: https://www.cnblogs.com/winterqq/p/17041562.html

相关文章

  • Go语言核心知识回顾(反射)
    有时要求写一个函数有能力统一处理各种值类型的函数,而这些类型可能无法共享同一个接口,也可能布局未知,也有可能这个类型在设计函数时并不存在,当我们无法透视一个未知类型的......
  • C/C++ 异常处理机制(例:文件拷贝)
    异常是一种程序控制机制,与函数机制互补。函数是一种以栈结构展开的上下函数衔接的程序控制系统,异常是另一种控制结构,它可以在出现“意外”时中断当前函数,并以某种机制......
  • C# 反射机制
    反射?就是创建对象A时,顺便把对象A的字段,函数等信息以对象的形式封装到Bs中,添加一个字符串到对象Bs的映射关系到map中,顺带封装一堆方法到Bs中,可以通过Bs创建A对象,得到A中的......
  • Android中的Binder机制
      一说明Android系统最常见也是初学者最难搞明白的就是Binder了,很多很多的Service就是通过Binder机制来和客户端通讯交互的。所以搞明白Binder的话,在很大程度上就能理解程......
  • java反射field相关知识
    Classc=ArrayList.class;c.isPrimitive();//判断c是否为基本数据类型c.isAssignableFrom(List.class);//判断c是否是List类的子类或父类c.getGenericType();//......
  • ArcObject必须使用反射创建实例对象
    在ArcObject开发时,有时非常让人无语的是使用new创建对象时,报"无法将类型为Systerm._ComObject的对象强制转换为类型******",官方知道这是个坑,早就讲得非常清楚和透彻了。In......
  • 反射
    classTest{privateinti=1;publicintj=0;publicstringstr="123";publicTest(){}......
  • Springboot的启动机制中@SpringBootApplication注解的意思
    @SpringBootApplication是一个组合注解,分别由@SpringBootConfiguration,@EnableAutoConfiguration,@ComponentScan@SpringBootConfiguration:它是对原注解@Configur......
  • 利用反射获取android.os.SystemProperties 属性
    记录一下项目用到的工具类importandroid.content.Context;importjava.lang.reflect.Method;publicclassSystemPropertyUtil{/***根据给定Key获取值.......
  • React面试:谈谈虚拟DOM,Diff算法与Key机制
    1.虚拟dom原生的JSDOM操作非常消耗性能,而React把真实原生JSDOM转换成了JavaScript对象。这就是虚拟Dom(VirtualDom)每次数据更新后,重新计算虚拟Dom,并和上一次生成的虚拟......