Java反射说的是在运行状态中,对于任何一个类,我们都能够知道这个类有哪些方法和属性。很多千锋的学员在面试中都会被问到Java反射机制这个问题,为了帮助大家更好的掌握这个知识点,千锋武汉Java培训小编整理了一些资料分享给大家。

一、反射概念

在正式讲解反射之前,为了很好的去理解它我们先从一个案例说起。请看下面的代码:

这是一个最简单不过的类,当我们使用的时候直接new出来一个User对象即可。因为这个类是我们自己定义的,所以在使用的时候我们知道User有两个字段name和age,还有无参和有参构造方法,另外的test方法我们也可以直接调用(因为其是public)。

现在出现一个问题,如果这个user类不是我们自己定义的,我们从外部看不到里面有什么东西,而且我们又想去知道内部长什么样,比如说有几个字段、方法、构造方法、共有还是私有的等等,这时候该怎么办呢?这时候java语言在设计的时候为我们提供了一个机制,就是反射机制,他能够很方便的去解决我们的问题。

二、深入分析java反射机制

1、获取Class类

在java中万事万物皆对象,User user=new User()一行代码我们知道了user是User类的实例对象,通过Student stu=new Student()我们知道了stu是Student的实例对象,但是我们想过没,User和Student又是谁的对象呢?没错就是Class类的实例对象。那这个Class类是什么东西,内部长什么样子呢?这时候我们很自然的联想到使用反射机制。使用反射机制就可以获取到这个class。

这里有三种方式可以获取这个Class,我们来看一下代码:

上面的c1、c2、c3都是Class类的实例,表示的都是User类。

当然,不仅仅是User这些类,对于基本数据类型甚至是包括void我们也可以使用这个方法。

现在就可以直接创建User类的实例了。

User user = (User)c1.getInstance();

现在我们对反射机制中获取Class类的方法进行一个总计

2、获取类的方法

现在通过反射看一下User类内部的样子,打印一下(把这个操作封装在了一个方法中):

下面我们把我们的User类传进去,打印一下。

我们总结一下反射方法。

3、获取类的属性

(1)获取所有属性

上面有两种获取属性的方法。重点是for循环。我们来测试一下

直接就会输出我们的字段类型和名称。

(2)获取指定属性

在这里我们的User类中name、age字段增加getter和setter方法

然后我们测试一下

在这里,我们在printFieldMsgBySelf方法中通过反射重新设置了age年龄的值,输出之后已成功更改。

4、获取类的构造方法

然后我们同样的测试一下

跟我们之前的构造方法一样。

5、获取User类的父类和接口

我们在这里定义一个Human类(里面什么也没有),然后定义一个UserInterface接口,让User继承它就好了。

然后我们在Test中去测试一下就可以了,测试方法很简单,我们只需要调用这个方法就可以。

在上面的案例中,我们使用反射机制能够获取类的方法、字段、构造方法、父类和接口,当然也可以获取一些其他的信息。不知道你是否掌握了Java反射机制这一知识点,想了解更多Java行业动态和学习资料,可以关注“武汉千锋”微信公众号。

反射 数据类型_这是一份超全面详细的Java反射机制学习指南相关推荐

  1. 反射获取类_新人也能看懂?如何使用 Java 反射?反射的用法及案例

    · 简介 Java Reflection,称为 Java 反射,是Java基础部分的一个比较难的点.Reflection(反射)是被视为动态语言的关键,通过反射机制,我们可以在运行时(runtime) ...

  2. 超详细的java基础知识学习(java SE、javaEE)笔记 核心重点!

    标识符 Java 的标识符是由字母.数字.下划线_.以及美元符$组成,但是首字母不可以是数字.Java 标识符大小写敏感,长度无限制,不能是 Java 中的关键字.命名规则:要见名知意! u  变量要 ...

  3. javabean反射改字段内容_BAT程序员编写:深入理解 Java 反射和动态代理源码分析...

    什么是反射 反射(Reflection)是 Java 程序开发语言的特征之一,它允许运行中的 Java 程序获取自身的信息,并且可以操作类或对象的内部属性. 通过反射机制,可以在运行时访问 Java ...

  4. 超超超级详细的java入门必备基础知识

    一.JAVA运行机制 Java程序的运行必须经过编写.编译.运行三个步骤. 编写是指在Java开发环境中进行程序代码的输入,最终形成后缀名为.java的Java源文件. 编译是指使用Java编译器(J ...

  5. 这是一份全面详细的数据结构、算法学习指南

    前言 背景:算法与数据结构作为技术开发者最基本的技术修养,在日常开发出现的频率非常高 本文目的:花尽可能短的时间,快速学习常见的数据结构知识及算法 适用阅读人群:所有技术开发者 本文主要内容: 常见. ...

  6. git 获取最新代码_程序员必知:这是一份全面 amp; 详细的 Git与Github 介绍指南

    前言 如果你从事 互联网技术研发,那么你一定需要 了解 Git & Github 本文将采用 图 & 表的方式,向你全面介绍 Git 与 Github,包括其功能.应用场景 & ...

  7. shader 反射 水面_【Unity Shader】模拟水面包含折射与反射与波浪动画

    最近研究了一下Unity官方的BoatAttack案例,他们模拟的海浪效果很厉害,用的是Gerstner波来模拟水面起伏和波峰的白浪还有浮力系统,还做加入了焦散效果(Caustics)和平面反射(Pl ...

  8. 【非广告】这是一份专为程序员编写的英语学习指南

    转载于机器之心 选自GitHub 作者:于江水 虽然 PHP 是最好的语言,但所有程序员必须学会的只有英语.面对铺天盖地的英文文档和教程,我们能做到的只有以最快的速度学会这门语言了.近日,一名程序员把 ...

  9. android 等待回调再返回结果_震惊!!只剩你还不懂Java回调机制了!

    点击上方 Java项目学习 ,选择 星标 公众号 重磅资讯.干货,第一时间送达 来源:22j.co/cFPf 调用和回调机制 在一个应用系统中, 无论使用何种语言开发, 必然存在模块之间的调用, 调用 ...

最新文章

  1. 拆解交易系统--服务稳定性
  2. 改变mysql数据库用户的权限
  3. mysql之慢查询详解,mysqldumpslow的使用
  4. BZOJ 3479: [Usaco2014 Mar]Watering the Fields( MST )
  5. c语言怎么写贪吃蛇,刚学C语言,想写一个贪吃蛇的代码
  6. 上传更新的代码到gitlab
  7. python购物信息整合教程_python实现简单购物商城
  8. mysql 双向热备份_MySQL双机热备份
  9. 在linux用sfdisk和parted 来 进行分区
  10. Netscreen ×××配置(一)---基于策略的点到点×××设置
  11. python倒计时弹框提示带注释_注意时间用python制作倒计时提醒工具
  12. 企业外贸出口业务流程图 进出口贸易流程细节
  13. JavaScript基础学习笔记
  14. 计算机打印怎么取消,电脑怎么取消打印任务_打印机取消打印任务的详细步骤...
  15. 微信小程序 iOS tableview
  16. FME 2011预览:新特性 IFMEWorkspaceRunner
  17. 百度Java二面面经
  18. c语言程序设计创新课程,C语言程序设计课程创新和实践.doc
  19. 金蝶EAS客户端配置更换
  20. BG-sentry的安装和配置

热门文章

  1. 多个vue项目之间跳转_Vue六,路由,ElementUI
  2. docker知识点查阅
  3. C++STL笔记(六):list详解
  4. OpenCV4每日一练day3:运行OpenCV示例程序(物体跟踪)
  5. oracle 中WITH AS,oracle的with as用法
  6. mysql update多个字段_常见的MySQL命令大全fourth
  7. python爬虫金融数据_python爬虫项目-爬取雪球网金融数据(关注、持续更新)
  8. android 三星 oom,android - 终结者抛出未捕获的异常:谷歌API错误或三星内核错误? - 堆栈内存溢出...
  9. 解码(五):sws_getContext和sws_scale像素格式和尺寸转换函数详解
  10. C++深拷贝与浅拷贝以及写时复制