反射

1.动态语言:程序运行时可以改变程序结构
Java不是,但是Java有动态性
反射:就是代码在运行的时候,还可以加载,探知,使用编译期间完全未知的类
一个类只有一个Class类
2.ctrl + T得到运行结构
3.
反射:透视一个类,一个对象,在反射面前,所有封装都毫无意义
应用:如我们的IDE工具,例如当我们使用String类的对象,IDE工具会自动弹出他所有的方法
这个,他就用到了反射机制
可以根据类的完整名称创建对象
反射可以根据一个字符串(类的路径)创建一个类的对象
此时相当于new了一个字符串
正常·对象后边都是new的构造器
4。官方定义:
在程序运行过程中,可以动态的创建对象-----》
以前写的程序是死的,每次运行都只是创建普通代码所要的对象
反射+字符串=动态创建对象
字符串可以从配置文件读取,如我们第一次用代码创建了一个a类的对象
第二次呢,我们突然想创建b类的对象,但是呢使用方法a类和b类大同小异
所以我们就只需修改字符串就可以了,此时源代码就没有改变,哈哈哈哈
5.字节码文件:Java源文件进行编译(Javac)之后的.class
JVM虚拟机执行代码过程:xx.java----->(编译)javac xx.java--->xx.class
一旦我们使用了Java命令执行这个文件,虚拟机就会把字节码文件加载到内存
此时jvm认为他就是字节码文件对象
xx.class就是字节码文件,对应我们所建立的类
面向对象:类-------对象
图纸--------汽车
对于JVM来说,什么东西都是对象,就是我们所认为是类的图纸,他也是对象
所以才会有Class对象,上文的图纸对象就是字节码对象
字节码文件对象
JVM把字节码文件加载到jvm内存中去后,jvm就认为字节码文件也是一个对象

类加载的时候JVM会弄出一个模子,这个模子就是Class对象,然后给我们new属于我们的对象
反射是由使用者来准备这个模子,此时我们可以将类中的各种结构(属性方法)映射成一个个java对象
反射使我们对new的使用变少,模块之间的独立性变强
++++++
反射先new出对象,然后通过getclass得到类的完整包名
加载后生成Class ,见图
6.字节码操作
优势:比反射开销小,性能高
用到的javaassist,api详解看https://www.bilibili.com/video/av59814573?p=280
以后用到再看,现在看也是浪费时间

 

posted @ 2020-03-09 22:15  why666  阅读(148)  评论(0)    收藏  举报