Java 反射
对于普通的变量的操作:创建变量,是在主内存中进行初始化。线程用到的变量,会先从主内存中拷贝 (read)出来,加载(load)到工作内存,然后引用(use)变量并运算赋值(assign)。然后存储(store)到工作内存,然后更新(write)掉原来的变量
普通变量的值在线程之间传递均需要通过主内存来完成。不同线程之间无法直接访问对方工作内存中的变量
lock:作用于主内存的变量,它把一个变量标识为一条线程独占的状态
unlock:作用于主内存的变量,它把一个处于锁定状态的变量释放出来,释放后的变量才可以被其他线程锁定。
反射是框架设计的灵魂
(使用的前提条件:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码)) --------------------- 本文来自 敬业的小码哥 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/sinat_38259539/article/details/71799078?utm_source=copy
对应源代码里面的英文注释
Class 没有公共构造方法。Class 对象是在加载类时由 Java 虚拟机以及通过调用类加载器中的defineClass 方法自动构造的。也就是这不需要我们自己去处理创建,JVM已经帮我们创建好了。
注意:在运行期间,一个类,只有一个Class对象产生。三种方式常用第三种,第一种对象都有了还要反射干什么。第二种需要导入类的包,依赖太强,不导包就抛编译错误。一般都第三种,一个字符串可以传入也可写在配置文件中等多种方法。
下面是通过反射获取构造方法并使用
获取字段并调用
反射Main方法的调用
6:运用反射运行配置文件里面的内容
7:通过反射越过泛型的检测
泛型用在编译期,编译过后泛型擦除(消失掉)。所以是可以通过反射越过泛型检查的 -、
我们再变一下把那个setName1方法变成私有的呢?
这样可以进行权限的设置
8中基本类型+void都是Primitive基本类型
构造函数格式如下
关于反射练习题:a·和b是两个同类的对象 通过反射实现同类对象的复制(不同类的话要进行返回值的判断)
思路:可以通过字段,可以拿到a类里面定义的所有字段,通过反射可以拿到该字段在原对象的值,通过反射来设置到目标对象上的属性上