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.只要给定类的全名, ...
随机推荐
- Code Chef DARTSEGM(计算几何+凸包)
题面 传送门 题解 好眼熟丫-- 一月月赛最后一题--,代码都不用改-- //minamoto #include<bits/stdc++.h> #define R register #de ...
- python 带参与不带参装饰器的使用与流程分析/什么是装饰器/装饰器使用注意事项
一.什么是装饰器 装饰器是用来给函数动态的添加功能的一种技术,属于一种语法糖.通俗一点讲就是:在不会影响原有函数的功能基础上,在原有函数的执行过程中额外的添加上另外一段处理逻辑 二.装饰器功能实现的技 ...
- 标准的sql执行顺序
正常情况下是先join再进行where过滤
- redis内存监控与回收
Redis有自己的内存分配器,当key-value对象被移除时,Redis不会马上向操作系统释放其占用内存.redis之所以这样的设计有两个原因. OS可能会将释放内存交换到虚拟内存,但OS的虚拟内存 ...
- paddlepaddle使用(一)
paddlepaddle是百度提出来的深度学习的框架,个人感觉其实和tensorflow差不多(语法上面),因为本人也是初学者,也不是很懂tensorflow,所以,这些都是个人观点. 百度的padd ...
- Springboot+ajax传输json数组以及单条数据的方法
Springboot+ajax传输json数组以及单条数据的方法 下面是用ajax传输到后台单条以及多条数据的解析的Demo: 结构图如下: 下面是相关的代码: pom.xml: <?xml v ...
- Jmeter参数化与检查点
一.Jmeter参数话有3种方法: 1. add->pre processors->user parameter(用户参数) 2.add->config Element->CS ...
- Android 开发工具类 01_AppUtils
1.获取应用程序名称: 2.获取应用程序版本信息. import android.content.Context; import android.content.pm.PackageInfo; imp ...
- win10上走网络打印机(不需找驱动包,会自动)
不多说,直接上干货! 之前是 现在是 结束 欢迎大家,加入我的微信公众号:大数据躺过的坑 人工智能躺过的坑 同时,大家可以关注我的个人博客: http://www.cn ...
- Architecture of a Java Compiler
Architectural Overview A modern optimizing compiler can be logically divided into four parts: Th ...