1.什么是"反射"
它是Java中提供的一种“操作对象”的方式。在运行状态下,通过class文件对象,去使用构造方法,成员变量,成员方法。 之前我们创建对象:
class Demo{
Student stu = new Student();
}
会使Demo类“依赖于”Student类--产生耦合
反射使用另一种方式操作对象,就可以解决这种依赖关系;
 方法有三种:
  1.类名.class
  2.对象.getclass()
  3.class.forName("包名.类名")
  好处:
  只要有一个类或者一个类的对象,就可以得到这个类或对象的所有属性和方法,包括私有的
  同步方法
  反射成员方法:
  1.获取字节码文件
  Class c = Class.forName("包名.类名");
  2.反射方法
  Method m = c.getMethod("反射的方法",方法的参数类型.class);
  3.用方法,m.invoke(对象,参数) 对象,c.newInstance ,在A建立对象。
  m.invoke(c.newInstance(),参数);
  类加载器与反射有什么关系
  反射是通过字节码文件对象,将类的字段,方法,构造器等映射成相应的类,并进行各自的操作;
  类加载器是通过某个类的.classLoader()方法,将该类的.class文件从硬盘中加载到java虚拟机中,形成字节码文件;
2.什么是“字节码对象“
每个类被加载之后,系统就会为该类生成一个对应的字节码对象,通过该字节码对象就可以访问到JVM中的对应的类。
获取字节码对象的三种方式
1.使用类的.class属性

Class<类类型> clz1 = 类名.class;
1
2.通过Class类中的静态方法forName(String className),传入类的全限定名(必须添加完整包名)比较常用

Class<?> clz2 = Class.forName("java.util.Date");
1
3.通过对象的getClass方法来实现,其中,getClass()是Object类中的方法,所有的对象都可以调用该方法

Date str = new Date();
Class<?> clz3 = str.getClass();

Class clazz = this.getClass();//获取字节码对象
Method method = clazz.getMthod("方法名",req.class,resp.class);//反射方法的字节码对象
注意:同一个类在JVM中只存在一份字节码对象,也就说上述,claz1 == clz2 == clz3;

转载于:https://blog.51cto.com/13859849/2378319

什么是反射和字节码对象。相关推荐

  1. 引出发射和什么是反射和Class类和Class实例、基本类型的字节码对象

    引出发射和什么是反射 问题1: 1.对象有编译类型和运行类型 Object    obj =  new java.util.Date(); 编译类型:  Object 运行类型: java.util. ...

  2. java 字节码对象_获得类的字节码对象的三种方式

    java源码(xxx.java)通过编译后形成字节码文件,字节码文件通过类加载器获得字节码对象, 通过字节码对象可以操作源码中的属性和方法. 方式一,使用类的class属性: Class clazz1 ...

  3. python源码剖析—— python中的字节码对象初探

    一.代码对象 每个初学python的人都会认为python是一种解释型语言,这个不能说错.但是python并不是真的对执行的python代码的每一行进行解释,虽然我们有一个所谓的"解释器&q ...

  4. 02_3中方式的反射,通过Class.forName获得Class对象,通过类.class获得字节码对象,通过类实例.getClass()的方式获得Class对象

     反射中加载类: Java中有一个Class类用于代表某一个类的字节码 .class文件    对应Class //1 加载类 // java中Class代表一个类,但是到底代表哪个类要明确指出 ...

  5. java 字节码对象_通过java字节码分析学习对象初始化顺序

    mockery.checking(new Expectations() { { one(new Object()).toString(); will(returnValue("") ...

  6. 注解、反射、动态编译、字节码操作

    注解.反射.动态编译.字节码操作 前言:本篇博客将介绍Java中注解的定义.使用以及反射对Java动态性的支持和Java字节码操作,通过本篇内容,读者将对Java知识有更加深刻的理解,同时为后面And ...

  7. java反射之获取class对象,Java之反射机制(获取Class对象的三种方式)

    Java之反射机制(获取Class对象的三种方式) 开发工具与关键技术:MyEclipse 10,java 作者:刘东标 撰写时间:2019-06-14 如何得到各个字节码对应的实例对象? 每个类被加 ...

  8. 菜鸟学习笔记:Java提升篇12(Java动态性2——动态编译、javassist字节码操作)

    菜鸟学习笔记:Java提升篇12(Java动态性2--动态编译.javassist字节码操作) Java的动态编译 通过脚本引擎执行代码 Java字节码操作 JAVAssist的简单使用 常用API ...

  9. Mock服务设计与实现:MySQL驱动字节码修改增强

    摘要:华为导流测试平台通过对线上流量回放到被测环境中,利用线上真实流量进行充分测试,保证业务系统稳定上线.但是业务在导流测试过程中现网数据库往往难以同步到测试环境,导致现网数据无法正常回放,测试价值降 ...

最新文章

  1. LeetCode 1108. Defanging an IP Address--C++,Python解法
  2. Java并发包之闭锁/栅栏/信号量(转)
  3. 数据结构:四种排序的比较
  4. sql alter表字段处理
  5. 1.1 Machine learning: what and why?
  6. 手把手自己造无人驾驶车,是什么样的体验?
  7. 常用 shell sql 命令
  8. 网站源码整站下载 网站模板源代码下载
  9. 空间面板数据模型及Stata实现
  10. PS快捷键总结,(操作、设置)小技巧
  11. centos7 firewalld ip转发设置
  12. Datawhale组队学习NLP之transformer Task03 BERT
  13. 小米扫地机器人 虚拟墙_扫地机器人虚拟墙是什么东西?
  14. vscode一键生成佛祖保佑永无bug
  15. Word2019建立自己的模板
  16. Lect1 图像分类
  17. 目前主流浏览器、浏览器内核和兼容问题的解决方案
  18. 月薪3500的我,是怎样把自己 “逼”成月入十万的?
  19. indexedDB简易封装
  20. 万字干货:教新手从0到1搭建完整的增长数据体系

热门文章

  1. mysql常用命令orderby_MySQL常用命令总结
  2. 停车管理系统汽车到达汽车离去c语言,停车场管理系统 C语言实现
  3. linux安装meb工具,linux-docker下安装禅道全部
  4. 阅读分析下列html,阅读下列说明和HTML文本,分析其中嵌入的JavaScdpt脚本, [说明]..._考试资料网...
  5. git提交时报错:Updates were rejected because the tip of your current branch is behind
  6. 【译】LiveData 在 SnackBar/Navigation 情景下的使用(SingleLiveEvent)
  7. 【android】getCacheDir()、getFilesDir()、getExternalFilesDir()、getExternalCacheDir()的作用
  8. Android 调用系统邮件,发送邮件到指定邮箱
  9. SQL Server CONVERT() 函数,Date 函数
  10. win2008 server_R2 自动关机 解决