Java反射拾遗
定义:Java反射机制可以让我们在编译期(Compile Time)之外的运行期(Runtime)检查类,接口,变量以及方法的信息。
反射还可以让我们在运行期实例化对象,调用方法,通过调用get/set方法获取变量的值。
反射作用:使用Java反射机制可以在运行时期检查Java类的信息,检查Java类的信息往往是你在使用Java反射机制的时候所做的第一件事情,
通过获取类的信息你可以获取以下相关的内容
Class对象
类名
修饰符
包信息
父类
实现的接口
构造器
方法
变量
注解
Class对象:
反射获取class对象两种方式
Class.forName("类名全称");
forName是Class对象的静态方法,会装入类,并做类的静态初始化,返回Class的对象。
类名.class;
JVM将使用类装载器, 将类装入内存(前提是:类还没有装入内存),不做类的初始化工作.返回Class的对象。
具体的参考如下代码:
Class<?> bean = Class.forName("com.*.common.ReflectBean");
ReflectBean reflectBean = (ReflectBean) bean.newInstance();
System.out.println("实例1" + reflectBean);
Class<?> bean1 = ReflectBean.class;
ReflectBean reflectBean1 = (ReflectBean) bean1.newInstance();
System.out.println("实例2" + reflectBean1);
int modifiers = bean.getModifiers();
System.out.println("类的修饰符" + modifiers);
System.out.println("类的修饰符是否为public" + Modifier.isPublic(modifiers));
System.out.println("类的全名" + bean.getName());
System.out.println("类的简名" + bean.getSimpleName());
Package packageInfo = bean.getPackage();
System.out.println("类的包信息" + packageInfo);
Class superClass = bean.getSuperclass();
System.out.println("类的父类" + superClass.getName());
for (Class interFace : bean.getInterfaces()) {
System.out.println("类的接口" + interFace.getName());
}
for (Constructor interFace : bean.getConstructors()) {
System.out.println("类的构造方法" + interFace.getName());
}
for (Method interFace : bean.getMethods()) {
System.out.println("类的方法" + interFace.getName());
}
for (Field interFace : bean.getFields()) {
System.out.println("类的公共变量" + interFace.getName());
}
for (Annotation annotation : bean.getAnnotations()) {
// 此处没注解是因为 setter getter 等都是编译时期的 这拿到的是运行期的
System.out.println("类的注解" + annotation.toString());
}
@Getter
@Setter
@ToString(callSuper = true)
@Lazy
public class ReflectBean extends ReflectBeanSuper implements ReflectInterface {
public String name; public ReflectBean () { } public ReflectBean (String name) {
this.name = name;
}
@Override
public String getReflectName() {
return name;
}
}
@Getter
@Setter
@ToString
public class ReflectBeanSuper {
private String sex;
}
public interface ReflectInterface {
String getReflectName();
}
运行结果如图:

这里写的比较简单,都在代码里体现了,如果需要具体的操作可以在参考相关API
Java反射拾遗的更多相关文章
- Java基础拾遗(二)
(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76358523冷血之心的博客) 马上就要秋招了,新的一轮笔试面试马上 ...
- Java基础拾遗(一)
(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76358391冷血之心的博客) 马上就要秋招了,新的一轮笔试面试马上 ...
- 第28章 java反射机制
java反射机制 1.类加载机制 1.1.jvm和类 运行Java程序:java 带有main方法的类名 之后java会启动jvm,并加载字节码(字节码就是一个类在内存空间的状态) 当调用java命令 ...
- Java反射机制
Java反射机制 一:什么事反射机制 简单地说,就是程序运行时能够通过反射的到类的所有信息,只需要获得类名,方法名,属性名. 二:为什么要用反射: 静态编译:在编译时确定类型,绑定对象,即通过 ...
- java反射(基础了解)
package cn.itcast_01; /** *Person类 */ public class Person { /** 姓名 */ private String name; ...
- java基础知识(十一)java反射机制(上)
java.lang.Class类详解 java Class类详解 一.class类 Class类是java语言定义的特定类的实现,在java中每个类都有一个相应的Class对象,以便java程序运行时 ...
- java基础知识(十一)java反射机制(下)
1.什么是反射机制? java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象都能够调用他的属性和方法,这种动态获取属性和方法的功能称为java的反射机制. ...
- java反射学习之二万能EXCEL导出
一.EXCEL导出的实现过程 假设有一个对象的集合,现在需要将此集合内的所有对象导出到EXCEL中,对象有N个属性:那么我们实现的方式是这样的: 循环这个集合,在循环集合中某个对象的所有属性,将这个对 ...
- java反射学习之一反射机制概述
一.反射机制背景概述 1.反射(reflection)是java被视为动态语言的一个关键性质 2.反射机制指的是程序在运行时能获取任何类的内部所有信息 二.反射机制实现功能概述 1.只要给定类的全名, ...
随机推荐
- 基于unoconv的在线office预览
这几天在搞在线文档预览,网上查了几种方案, 第一种:使用google的在线预览 -> 国内被Q,pass 第二种:使用第三方的,比如:永中dcs -> 要钱,pass 第三种:先转换为pd ...
- MySQL(慢日志记录)
day63 参考:https://www.cnblogs.com/wupeiqi/articles/5716963.html
- redis升级注意事项
新版本redis读取 旧版本redis的rdb , aof 使用新版本redis备份rdb , aof操作系统级别备份 rdb , aof重启redis测试 新版本redisrdb , aof 能否读 ...
- 【xsy1097】 拼图 构造题
题目大意:请你使用n个图形拼成一个矩形.要求:①这每个图形都由1×1的小正方形组成,而且第i个图形由i个小正方形组成.②除了第1个和第2个图形以外,任意一个图形的所有小正方形,不都在一条直线上. 数据 ...
- Hadoop集群维护
HDFS小文件问题及解决方案:http://dongxicheng.org/mapreduce/hdfs-small-files-solution/ Hadoop升级方案(一):Hadoop 1.0内 ...
- (转)Linux Shell系列教程之(十四) Shell Select教程
本文属于<Linux Shell 系列教程>文章系列,该系列共包括以下 18 部分: Linux Shell系列教程之(一)Shell简介 Linux Shell系列教程之(二)第一个Sh ...
- 前端必备:FastStoneCapture 和 Licecap &&& mingw c++ 编译执行
端必备:FastStoneCapture 和 Licecap FastStoneCapture这个软件非常小,只有2M多,并且其功能很强大,包括截图,录制视频,量尺,取色等等,对于前端工程师绝对是必备 ...
- 再学Java 之 foreach循环
从Java 5 之后,Java提供了一种新的循环:foreach循环,这种循环遍历数组和集合更加简洁. foreach循环语法格式如下: for ( type variableName : array ...
- 使用fiddler抓手机包遇到问题
1,http://blog.csdn.net/roland_sun/article/details/30078353 2,参照上面不周,不能实现用自己ip:8888端口下载出证书 解决办法,先从fid ...
- APP 渠道推广【摘自网络】
渠道的合作方式无非三种,一种是付费合作,那很简单,谈好价格付钱.第二种是免费,主要是就是首发,还有就是跟渠道的运营小伙伴搞好关系让帮忙给个免费的位置等,第三种是活动奖品合作,简而言之,就是渠道商会逢年 ...