说到反射,相信有过编程经验的人都不会陌生。反射机制让Java变得更加的灵活。反射机制在Java的众多特性中是非常重要的一个。下面就让我们一点一点了解它是怎么一回事。

什么是反射

在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

反射有什么用

1,在运行时判断任意一个对象所属的类;

2,在运行时构造任意一个类的对象;

3,在运行时判断任意一个类所具有的成员变量和方法;

4,在运行时调用任意一个对象的方法;

5,生成动态代理。

反射的API

学习一门语言,一种比较好的方式就是看它的API文档,因为它的API是最权威的,最准确的。下面我们一起看看JDK的API对于反射是如何描述的吧!

与反射有关的所有接口以及类都在java.lang.reflect包里。

接口

接口摘要

AnnotatedElement

表示目前正在此 VM 中运行的程序的一个已注释元素。

GenericArrayType

GenericArrayType 表示一种数组类型,其组件类型为参数化类型或类型变量。

GenericDeclaration

声明类型变量的所有实体的公共接口。

InvocationHandler

InvocationHandler 是代理实例的调用处理程序 实现的接口。

Member

成员是一种接口,反映有关单个成员(字段或方法)或构造方法的标识信息。

ParameterizedType

ParameterizedType 表示参数化类型,如 Collection<String>。

Type

Type 是 Java 编程语言中所有类型的公共高级接口。

TypeVariable<D extends GenericDeclaration>

TypeVariable 是各种类型变量的公共高级接口。

WildcardType

WildcardType 表示一个通配符类型表达式,如 ?、? extends Number 或 ? super Integer。

类摘要

AccessibleObject

AccessibleObject 类是 Field、Method 和 Constructor 对象的基类。

Array

Array 类提供了动态创建和访问 Java 数组的方法。

Constructor<T>

Constructor 提供关于类的单个构造方法的信息以及对它的访问权限。

Field

Field 提供有关类或接口的单个字段的信息,以及对它的动态访问权限。

Method

Method 提供关于类或接口上单独某个方法(以及如何访问该方法)的信息。

Modifier

Modifier 类提供了 static 方法和常量,对类和成员访问修饰符进行解码。

Proxy

Proxy 提供用于创建动态代理类和实例的静态方法,它还是由这些方法创建的所有动态代理类的超类。

ReflectPermission

反射操作的 Permission 类。

下面给大家写了一个小实例:

package reflection;

public class UserInfo {

    private Integer id;
private String userName;
private String password;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
} @Override
public String toString(){
return this.getClass().getName();
} }
package reflection;

public class GetClass {

    public boolean ClassCheck(){
try { System.out.println("第一种,通过类本身获得对象");
Class UserClass = this.getClass();
System.out.println("第一种方式成功!类名:"+UserClass.toString()+"\n"); System.out.println("第二种,通过子类实例获取父类");
UserInfo ui = new UserInfo();
UserClass = ui.getClass();
Class SubUserClass = UserClass.getSuperclass();
System.out.println("第二种方式成功!类名:"+SubUserClass.toString()+"\n"); System.out.println("第三种,通过类名加.class获得对象");
Class ForClass = reflection.UserInfo.class;
System.out.println("第三种方式成功!类名:"+ForClass.toString()+"\n"); System.out.println("第四种,通过类名的字符串获得对象");
Class ForName = Class.forName("reflection.UserInfo");
System.out.println("第四种方式成功!类名:"+ForName.toString()+"\n"); } catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
} @Override
public String toString(){
return this.getClass().getName();
} public static void main(String[] args) {
GetClass gc = new GetClass();
gc.ClassCheck();
if (gc.ClassCheck()) {
System.out.println("所有反射全部成功!");
}
else {
System.out.println("反射有问题,请检查!");
}
} }

上面四种方法里面,我用的最多的是第四种,这种一般都是配合配置文件一起用的。反射与配置文件的结合让我们的代码变得非常的灵活,易扩展、以维护。可谓是好处多多呀,所以才有那句”反射反射,程序员的快乐!“一起尽情的快乐吧!

PS:下一篇将结合实例更加详细的讲解!《菜鸟学编程(十)——Java反射机制(二)》

菜鸟学Java(十四)——Java反射机制(一)的更多相关文章

  1. JAVA学习第六十四课 — 反射机制

       Java反射机制是在执行状态中,对于随意一个类,都可以知道这个类的全部属性和方法,对于随意一个对象,都可以调用它的随意一个方法和属性,这样的动态获取的信息以及动态调用对象的方法的功能称为java ...

  2. Java 核心类库之反射机制

    1:什么是反射机制? 2:反射机制它可以做什么呢? 3:反射机制对应的API又是什么? 1):通过反射机制来获取一个对象的全限定名称(完整包名),和类名: 2):实例化Class对象 3):获取对象的 ...

  3. HDU 6467 简单数学题 【递推公式 && O(1)优化乘法】(广东工业大学第十四届程序设计竞赛)

    传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6467 简单数学题 Time Limit: 4000/2000 MS (Java/Others)    M ...

  4. HDU 6464 免费送气球 【权值线段树】(广东工业大学第十四届程序设计竞赛)

    传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6464 免费送气球 Time Limit: 2000/1000 MS (Java/Others)    M ...

  5. HDU 6470 Count 【矩阵快速幂】(广东工业大学第十四届程序设计竞赛 )

    题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6470 Count Time Limit: 6000/3000 MS (Java/Others)    ...

  6. HDU 6467.简单数学题-数学题 (“字节跳动-文远知行杯”广东工业大学第十四届程序设计竞赛)

    简单数学题 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submi ...

  7. HDU 6464.免费送气球-动态开点-权值线段树(序列中第first小至第second小的数值之和)(感觉就是只有一个状态的主席树) (“字节跳动-文远知行杯”广东工业大学第十四届程序设计竞赛)

    免费送气球 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submi ...

  8. HDU 6463.超级无敌简单题-卡边界的暴力 (“字节跳动-文远知行杯”广东工业大学第十四届程序设计竞赛)

    超级无敌简单题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Sub ...

  9. 从零开始学java (四)反射

    反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制. ...

  10. 在JAVA中,关于反射机制的讨论

    一.什么是反射机制         简单的来说,反射机制指的是程序在运行时能够获取自身的信息.在java中,只要给定类的名字,     那么就可以通过反射机制来获得类的所有信息. 二.哪里用到反射机制 ...

随机推荐

  1. 远程过程调用协议(RPC)

      RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议.RPC协议假定某些传输协议的 ...

  2. 了解 node.js

    原文为: 我们为什么要使用NodeJS 写的好,就收藏于此,供学习之用. 科普文一则,说说我对NodeJS(一种服务端JavaScript实现)的一些认识,以及我为什么会向后端工程师推荐NodeJS. ...

  3. Mac Mini 2011 mid 安装Ubuntu18.06.1 Server

    在Mac mini上原来是安装的ESXi5.5, 时间比较久了, 因为内存只有8g, 跑不了几个vm, 逐渐闲置. 现在打算重新装一个Ubuntu Sever用来跑docker. 制作启动U盘 参考  ...

  4. Ubuntu18.04中配置wxWidget3.0.4开发环境

    准备工作 在 https://www.wxwidgets.org/downloads/ 下载最新的稳定版 wxWidgets-3.0.4.tar.bz2 安装依赖 -dev build-essenti ...

  5. VS2010 lib和dll导出路径设置

    创建库文件工程时往往需要设置.lib文件和.dll文件的路径. 假设一个solution对应了多个工程,然而他们共用一些库,就可以在solution文件夹下分别添加两个文件夹lib和bin(其实放在一 ...

  6. ArcGIS 概述

    ArcGIS产品线为用户提供一个可伸缩的,全面的GIS平台.ArcObjects包含了大量的可编程组件,从细粒度的对象(例如,单个的几何对象)到粗粒度的对象(例如与现有ArcMap文档交互的地图对象) ...

  7. 基于springboot跟poi封装的最便捷的excel导出

    发布时间:2018-11-15   技术:springboot1.5.6 + maven3.0.5 + jdk1.8   概述 Springboot最便捷的Excel导出,只需要一个配置文件即可搞定 ...

  8. Linux下使用rsyslog部署日志服务器 && 记录history并发送到rsyslog服务器

    一.syslog服务简介 rsyslog 是一个 syslogd 的多线程增强版.rsyslog负责写入日志, logrotate负责备份和删除旧日志, 以及更新日志文件 logger命令 将自定义的 ...

  9. java2小结(草稿)

    Struts2 Servlet 小的Java程序,运行在服务器端,接收和响应从客户端发送过来的请求 流程分析: Servlet生命周期? Servlet配置自动加载?(理解) 1.服务器在启动的时候, ...

  10. 【RS】BPR:Bayesian Personalized Ranking from Implicit Feedback - BPR:利用隐反馈的贝叶斯个性化排序

    [论文标题]BPR:Bayesian Personalized Ranking from Implicit Feedback (2012,Published by ACM Press) [论文作者]S ...