定义: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. 利用tensorflow训练简单的生成对抗网络GAN

    对抗网络是14年Goodfellow Ian在论文Generative Adversarial Nets中提出来的. 原理方面,对抗网络可以简单归纳为一个生成器(generator)和一个判断器(di ...

  2. Weblogic有免费的License了

    分类: 系统运维 曾几何时, 为了找一个不限IP, 不限CPU, 不限时间的Weblogic License, 需要翻遍整个互联网, 这种日子一去不复返了~~~~~ 几个月前, 听到Oracle收购B ...

  3. struts2中s:select标签的使用

    1.第一个例子: <s:select list="{'aa','bb','cc'}" theme="simple" headerKey="00& ...

  4. RHCE 学习结构

    本文内容为本站的 blog 链接 第一章   安装初体验 第二章   访问系统 2.1 基于图形化界面访问 2.2 基于文本访问 2.3 用户管理 第三章   文件系统 3.1  Linux 文件系统 ...

  5. 解决ssh/scp报错:Someone could be eavesdropping on you right now (man-in-the-middle attack)!

    主要现象:ssh/scp 失败,host key verification failed. # scp /home/iso/********.iso root@192.168.1.***:/home/ ...

  6. C++的开源跨平台日志库glog学习研究(二)--宏的使用

    上一篇从整个工程上简单分析了glog,请看C++的开源跨平台日志库glog学习研究(一),这一篇对glog的实现代码入手,比如在其源码中以宏的使用最为广泛,接下来就先对各种宏的使用做一简单分析. 1. ...

  7. java内存数据管理

    准确的说应该是java8以前的内存管理方式 区别在永久代(方法区)上 public class RamManager { //1.a存储于永久代 public static int a =1; pri ...

  8. Python -- 网络编程 -- 抓取网页图片 -- 图虫网

    字符串(str)编码成字节码(bytes),字节码解码为字符串 获取当前环境编码:sys.stdin.encoding url编码urllib.parse.quote() url解码urllib.pa ...

  9. 基于flex的不定个数的按钮组

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  10. springcloud-01-介绍

    跟随springcloud的一套视频学习springcloud, 把学到的记录下来, 方便自己, 方便别人 IDE: idea 一个父工程, 其他均为module 父工程的依赖: <parent ...