什么是反射和字节码对象。
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
什么是反射和字节码对象。相关推荐
- 引出发射和什么是反射和Class类和Class实例、基本类型的字节码对象
引出发射和什么是反射 问题1: 1.对象有编译类型和运行类型 Object obj = new java.util.Date(); 编译类型: Object 运行类型: java.util. ...
- java 字节码对象_获得类的字节码对象的三种方式
java源码(xxx.java)通过编译后形成字节码文件,字节码文件通过类加载器获得字节码对象, 通过字节码对象可以操作源码中的属性和方法. 方式一,使用类的class属性: Class clazz1 ...
- python源码剖析—— python中的字节码对象初探
一.代码对象 每个初学python的人都会认为python是一种解释型语言,这个不能说错.但是python并不是真的对执行的python代码的每一行进行解释,虽然我们有一个所谓的"解释器&q ...
- 02_3中方式的反射,通过Class.forName获得Class对象,通过类.class获得字节码对象,通过类实例.getClass()的方式获得Class对象
反射中加载类: Java中有一个Class类用于代表某一个类的字节码 .class文件 对应Class //1 加载类 // java中Class代表一个类,但是到底代表哪个类要明确指出 ...
- java 字节码对象_通过java字节码分析学习对象初始化顺序
mockery.checking(new Expectations() { { one(new Object()).toString(); will(returnValue("") ...
- 注解、反射、动态编译、字节码操作
注解.反射.动态编译.字节码操作 前言:本篇博客将介绍Java中注解的定义.使用以及反射对Java动态性的支持和Java字节码操作,通过本篇内容,读者将对Java知识有更加深刻的理解,同时为后面And ...
- java反射之获取class对象,Java之反射机制(获取Class对象的三种方式)
Java之反射机制(获取Class对象的三种方式) 开发工具与关键技术:MyEclipse 10,java 作者:刘东标 撰写时间:2019-06-14 如何得到各个字节码对应的实例对象? 每个类被加 ...
- 菜鸟学习笔记:Java提升篇12(Java动态性2——动态编译、javassist字节码操作)
菜鸟学习笔记:Java提升篇12(Java动态性2--动态编译.javassist字节码操作) Java的动态编译 通过脚本引擎执行代码 Java字节码操作 JAVAssist的简单使用 常用API ...
- Mock服务设计与实现:MySQL驱动字节码修改增强
摘要:华为导流测试平台通过对线上流量回放到被测环境中,利用线上真实流量进行充分测试,保证业务系统稳定上线.但是业务在导流测试过程中现网数据库往往难以同步到测试环境,导致现网数据无法正常回放,测试价值降 ...
最新文章
- LeetCode 1108. Defanging an IP Address--C++,Python解法
- Java并发包之闭锁/栅栏/信号量(转)
- 数据结构:四种排序的比较
- sql alter表字段处理
- 1.1 Machine learning: what and why?
- 手把手自己造无人驾驶车,是什么样的体验?
- 常用 shell sql 命令
- 网站源码整站下载 网站模板源代码下载
- 空间面板数据模型及Stata实现
- PS快捷键总结,(操作、设置)小技巧
- centos7 firewalld ip转发设置
- Datawhale组队学习NLP之transformer Task03 BERT
- 小米扫地机器人 虚拟墙_扫地机器人虚拟墙是什么东西?
- vscode一键生成佛祖保佑永无bug
- Word2019建立自己的模板
- Lect1 图像分类
- 目前主流浏览器、浏览器内核和兼容问题的解决方案
- 月薪3500的我,是怎样把自己 “逼”成月入十万的?
- indexedDB简易封装
- 万字干货:教新手从0到1搭建完整的增长数据体系
热门文章
- mysql常用命令orderby_MySQL常用命令总结
- 停车管理系统汽车到达汽车离去c语言,停车场管理系统 C语言实现
- linux安装meb工具,linux-docker下安装禅道全部
- 阅读分析下列html,阅读下列说明和HTML文本,分析其中嵌入的JavaScdpt脚本, [说明]..._考试资料网...
- git提交时报错:Updates were rejected because the tip of your current branch is behind
- 【译】LiveData 在 SnackBar/Navigation 情景下的使用(SingleLiveEvent)
- 【android】getCacheDir()、getFilesDir()、getExternalFilesDir()、getExternalCacheDir()的作用
- Android 调用系统邮件,发送邮件到指定邮箱
- SQL Server CONVERT() 函数,Date 函数
- win2008 server_R2 自动关机 解决