Java 反射

对于普通的变量的操作:创建变量,是在主内存中进行初始化。线程用到的变量,会先从主内存中拷贝 (read)出来,加载(load)到工作内存,然后引用(use)变量并运算赋值(assign)。然后存储(store)到工作内存,然后更新(write)掉原来的变量

普通变量的值在线程之间传递均需要通过主内存来完成。不同线程之间无法直接访问对方工作内存中的变量

Java 反射

lock:作用于主内存的变量,它把一个变量标识为一条线程独占的状态

unlock:作用于主内存的变量,它把一个处于锁定状态的变量释放出来,释放后的变量才可以被其他线程锁定。

 

Java 反射

Java 反射

反射是框架设计的灵魂

(使用的前提条件:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码)) --------------------- 本文来自 敬业的小码哥 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/sinat_38259539/article/details/71799078?utm_source=copy

 

Java 反射

对应源代码里面的英文注释

Java 反射

Class 没有公共构造方法。Class 对象是在加载类时由 Java 虚拟机以及通过调用类加载器中的defineClass 方法自动构造的。也就是这不需要我们自己去处理创建,JVM已经帮我们创建好了。 

Java 反射

 

Java 反射

注意:在运行期间,一个类,只有一个Class对象产生。三种方式常用第三种,第一种对象都有了还要反射干什么。第二种需要导入类的包,依赖太强,不导包就抛编译错误。一般都第三种,一个字符串可以传入也可写在配置文件中等多种方法。

 

下面是通过反射获取构造方法并使用

Java 反射

Java 反射

Java 反射

 

Java 反射

 

Java 反射

 

获取字段并调用

Java 反射

Java 反射

 

反射Main方法的调用

Java 反射

 

Java 反射

 

6:运用反射运行配置文件里面的内容

Java 反射

 

Java 反射

 

7:通过反射越过泛型的检测

泛型用在编译期,编译过后泛型擦除(消失掉)。所以是可以通过反射越过泛型检查的 -、

 

Java 反射

 

Java 反射

 

Java 反射

 

Java 反射

Java 反射

 

Java 反射

Java 反射

我们再变一下把那个setName1方法变成私有的呢?

 

Java 反射

Java 反射

 

Java 反射

Java 反射

Java 反射

Java 反射

Java 反射

这样可以进行权限的设置

Java 反射

 

Java 反射

Java 反射8中基本类型+void都是Primitive基本类型

 

 

 

 

构造函数格式如下

Java 反射

 

Java 反射

 

 

 

关于反射练习题:a·和b是两个同类的对象 通过反射实现同类对象的复制(不同类的话要进行返回值的判断) 

思路:可以通过字段,可以拿到a类里面定义的所有字段,通过反射可以拿到该字段在原对象的值,通过反射来设置到目标对象上的属性上

 

Java 反射