浅谈Java反射机制 之 获取类的字节码文件 Class.forName(全路径名) 、getClass()、class...
先贴上Java反射机制的概念:
AVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;
对于任意一个对象,都能够调用它的任意一个方法和属性;
这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
这么一讲很强大有没有!
反射的机制的实现还有仰仗Class类,因为想要剖析一个类就必须先要获取到该类的字节码文件对象,而Class类用于表示.class文件(字节码)
而且从获取到剖析使用的都是Class类的方法。
获取类字节码方法有三种:
1、通过实例化对象的 stu.getClass() 获取到字节码文件
getClass()方法其实是Object的一个方法,Class继承了Object,所以我们可以直接使用。
public class Test01 {public static void main(String[] args) {Student stu=new Student();Class c=stu.getClass();System.out.println(c.getName());} }
结果:com.reflection.model.Student
当然这种方法没什么意义,因为我们都 new 实例化对象了,就没有必要反射了。
2、通过类的 .class 属性获取类的字节码文件
import com.reflection.model.Student; public class Test02 {public static void main(String[] args) {Class c= Student.class;System.out.println(c.getName());} }
结果:com.reflection.model.Student
这种方法比第一种方法稍好,当也有不足之处,因为需要导入类的包,这样做依赖性太强,不利于解耦。
3、通过类的全路径名获取Class对象 使用Class.forName("全路径名")来实现
此处可能会报出 ClassNotFoundException 异常因为 你给的全路径名可能不存在,因此给他加一个try{}cath(){}
public class Test03 {public static void main(String[] args) {try {Class c=Class.forName("com.reflection.model.Student");System.out.println(c.getName());} catch (ClassNotFoundException e) {e.printStackTrace();}} }
结果:com.reflection.model.Student
比较前两个方法我们可以看出第三种方法才是我们需要的。
虽然这里用是 全路径名 输出的结果也是 全路径名,但取到的是一个 类的字节码文件,可以用它做很多事。
下一篇将会讲到 使用 Class中的方法获取 类中的 方法和属性(包括构造方法)
转载于:https://www.cnblogs.com/mww-NOTCOPY/p/11218024.html
浅谈Java反射机制 之 获取类的字节码文件 Class.forName(全路径名) 、getClass()、class...相关推荐
- 浅谈Java多线程机制
浅谈Java多线程机制 (-----文中重点信息将用红色字体凸显-----) 一.话题导入 在开始简述Java多线程机制之前,我不得不吐槽一下我国糟糕的IT界技术分享氛围和不给力的互联网技术解答深度. ...
- JAVA反射机制、Class类及动态加载、成员变量构造方法其他方法的反射与调用、代理模式AOP
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法: 对于任意一个对象,都能够调用它的任意一个方法和属性: 这种动态获取的信息以及动态调用对象的方法的功能称为java语言 ...
- 浅谈Java反射的实现原理
从一段示例代码开始 Class clz = Class.forName("ClassA");Object instance = clz.newInstance();Method m ...
- 浅聊Java反射机制(三)
引入 即使没有学过反射,大家也一定会见过invoke方法.因为很多方法调用都是靠invoke方法,所以很多异常的抛出都会定位到invoke方法,比如下面的情形大家会很熟悉: java.lang.Nul ...
- 浅谈Java反射(Reflect)技术--常用方法
Java反射(Reflect)技术 概念:动态获取在当前Java虚拟机中的类.接口或者对象等等信息(运行过程中读取内容) 1.作用(面试问题): 1.1 解除两个类之间的耦合性,即在未得到依赖类的情况 ...
- java反射 用处_浅谈Java反射
一.何为反射 反射就是对于任何一个类都能知道这个类的的所有属性和方法,并且对于任何一个对象都能调用他的属性和方法,而且能修改其属性. 二.反射的作用 就我的理解来看,通常我们在写代码的时会非常强调代码 ...
- Java反射机制涉及的类常见方法使用总结
1 import java.lang.reflect.Constructor; 2 import java.lang.reflect.*; 3 4 /*Class:代表一个字节码文件的对象,每当有类被 ...
- 浅谈Java回调机制
像许多网上介绍回调机制的文章一样,我这里也以一个现实的例子开头:假设你公司的总经理出差前需要你帮他办件事情,这件事情你需要花些时间去做,这时候总经理肯定不能守着你做完再出差吧, 于是就他告诉你他的手机 ...
- java日期用什么属性_java日期以及使用Java反射机制遍历实体类的属性和类型
fmt:formatDate 的输出格式 fmt关于时间格式的输出 2004-5-31 23:59:59 2004-4-1 23:59:59 JSTL标签fmt:formatDate引起的中文乱码问题 ...
最新文章
- swift_035(Swift之第三方库Kingfisher篇)
- uniapp在ios端每个页面都可以上下拉,阻止方法
- 什么是CPython
- [问题处理]redmine的gantt图导出出现‘星星星星星星星星’怎么解决
- 一个C#和C++执行效率对比的简单实例
- Android开发之Android studio代码版本回退教程
- mysql切换到使用openssl,MySQL主从复制+OpenSSL
- P1136 迎接仪式
- 关于ubuntu无法启动nginx的问题
- 盘点618 .NET 程序员必“败”书单
- Netty的ChannelFuture和ChannelPromise
- 佳能MP259打印重影的问题始终无法得到彻底解决,今天终于找到方法了
- 反素数(高合成数?)
- Matlab循环语句
- android 自定义View【2】对话框取色色盘取色的实现
- 脚本重启电信天翼网关
- html5+资源甘特图,VARCHART XGantt VSW资讯:HTML5甘特图中的各个资源工作时间
- 如果通过这次面试我们单位录用了你,但工作一段时间却发现你根本不适合这个职位,你怎么办?
- AWD平台搭建与使用入门
- android 全套安装包,原神1.1直装版下载-原神1.1完整安装包v1.1安卓版下载_飞翔下载...
热门文章
- java进销存一个人要做多久,如何取得当前年的时间! 找java进销存系统
- python项目归纳总结-python总结七
- python基础教程第三版豆瓣-1024,程序媛/猿请查收!
- python画图代码turtle-使用Python的turtle模块画图的方法
- 如何看电脑安装了python-Python教程第1篇:查看电脑是否安装python
- python知乎-知乎看了很多推荐,最终选了这本Python入门
- python修改excel数据-python之实现对excel表格数据的修改
- python基础代码事例-python基础第三章
- python创建csv文件并写入-Python数据写入csv格式文件
- python怎么学最快-怎么样快速高效学习Python