定义: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反射拾遗的更多相关文章

  1. Java基础拾遗(二)

    (尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76358523冷血之心的博客) 马上就要秋招了,新的一轮笔试面试马上 ...

  2. Java基础拾遗(一)

    (尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76358391冷血之心的博客) 马上就要秋招了,新的一轮笔试面试马上 ...

  3. 第28章 java反射机制

    java反射机制 1.类加载机制 1.1.jvm和类 运行Java程序:java 带有main方法的类名 之后java会启动jvm,并加载字节码(字节码就是一个类在内存空间的状态) 当调用java命令 ...

  4. Java反射机制

    Java反射机制 一:什么事反射机制 简单地说,就是程序运行时能够通过反射的到类的所有信息,只需要获得类名,方法名,属性名. 二:为什么要用反射:     静态编译:在编译时确定类型,绑定对象,即通过 ...

  5. java反射(基础了解)

    package cn.itcast_01; /** *Person类 */ public class Person {    /** 姓名 */    private String name;     ...

  6. java基础知识(十一)java反射机制(上)

    java.lang.Class类详解 java Class类详解 一.class类 Class类是java语言定义的特定类的实现,在java中每个类都有一个相应的Class对象,以便java程序运行时 ...

  7. java基础知识(十一)java反射机制(下)

    1.什么是反射机制? java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象都能够调用他的属性和方法,这种动态获取属性和方法的功能称为java的反射机制. ...

  8. java反射学习之二万能EXCEL导出

    一.EXCEL导出的实现过程 假设有一个对象的集合,现在需要将此集合内的所有对象导出到EXCEL中,对象有N个属性:那么我们实现的方式是这样的: 循环这个集合,在循环集合中某个对象的所有属性,将这个对 ...

  9. java反射学习之一反射机制概述

    一.反射机制背景概述 1.反射(reflection)是java被视为动态语言的一个关键性质 2.反射机制指的是程序在运行时能获取任何类的内部所有信息 二.反射机制实现功能概述 1.只要给定类的全名, ...

随机推荐

  1. Python os.path.join() 进行路径拼接

    在python 项目开发过程中,经常需要将获取到的路径进行拼接, # os.path.join(path1,path2) 将两个路径拼接起来 os.path.join("/usr" ...

  2. java的几种定时任务

    本篇博文主要是讲述2.x 版本的quartz下的实现方案,1.x 版本的实现方式大致原理一致,但是具体的实现方式有些不一致,具体体现在获取  scheduler 这个类的方式上有些不同,这里不作过多的 ...

  3. 如何实现keep-alive

    路径: 由上图可知,keep-alive.js导出的对象(如下),作为一个属性将会注入到Vue.options.components中. const patternTypes = [String, R ...

  4. 【bug】安卓浏览器键盘输入改变弹出层的定位

    bug描述 在安卓浏览器中,有一个在页面底部的弹出层表单,样式如下: .popup { position: absolute; bottom: 0; } 当在这个弹出层输入内容,键盘自动弹出,弹出层的 ...

  5. 百度地图笔记_覆盖物(标注marker,折线polyline,多边形polygon)的点击弹窗和右键菜单

    利用绘制工具绘制点线面,并在执行绘制完成回调事件给相应覆盖物添加事件操作,提供标注的点击弹窗和标注.折线.多边形的右键删除 效果图如下: 完整代码如下:html+js <!DOCTYPE htm ...

  6. Anaconda 入门详解

    Anaconda Anaconda简介 Anaconda是一个免费开源的Python和R语言的发行版本,用于计算科学(数据科学.机器学习.大数据处理和预测分析),Anaconda致力于简化包管理和部署 ...

  7. Google Maps-IP地址的可视化查询

    转自:http://www1.huachu.com.cn/read/readbookinfo.asp?sectionid=1000004203 第3章 实战Google Maps API之一——IP地 ...

  8. vue-devtools必备工具

    1.github下载地址:https://github.com/vuejs/vue-devtools 2.下载安成之后打开cmd进入vue-devtools文件夹把依赖装好npm install 之后 ...

  9. Servlet基础知识点

    一.web.xml 的加载顺序是: ServletContext-> context-param ->listener -> filter -> servlet,而同个类型之间 ...

  10. leetcode--539. Minimum Time Difference

    Given a list of -hour clock time points in "Hour:Minutes" format, find the minimum minutes ...