请说明一下JAVA中反射的实现过程和作用分别是什么?

Java语言编译后形成.class文件,反射就是通过字节码文件找到一个类,类中的方法及属性等。反射的实现主要通过四个类

Class 类的对象

Constructor 类的构造方法

Field 类的成员函数

Method 类的成员方法

反射机制能够在运行时获取类对类的一些信息进行修改从而使Java拥有了动态特性。

由于反射的特性从而导致了其实private修饰的成员函数并非不可访问。可以通过反射机制获取到并且跳过安全检测并访问

样例代码:

/*** @author Satsuki* @time 2019/9/12 15:18* @description:*/
public class RUser {private int id;private int age;private String uname;public RUser() {}public RUser(int id, int age, String uname) {this.id = id;this.age = age;this.uname = uname;}public int getId() {return id;}public void setId(int id) {this.id = id;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getUname() {return uname;}public void setUname(String uname) {this.uname = uname;}@Overridepublic String toString() {return "RUser{" +"id=" + id +", age=" + age +", uname='" + uname + '\'' +'}';}
}/*** @author Satsuki* @time 2019/9/12 15:37* @description:* 应用反射API动态的操作* 类名,属性,方法,构造器等*/
public class Demo02 {public static void main(String[] args) {String path = "priv.wzb.javabase.reflection.RUser";try {Class<RUser> clazz = (Class<RUser>) Class.forName(path);//通过反射API调用构造方法,构造对象RUser u =  clazz.newInstance();//其实是调用了user的无参构造方法//记得重写类的无参构造器因为反射的应用会调用类的无参构造器生成对象Constructor<RUser> declaredConstructor = clazz.getDeclaredConstructor(int.class, int.class, String.class);RUser u2 = declaredConstructor.newInstance(1001, 17, "satsuki");System.out.println(u2.toString());//通过反射API调用普通方法RUser u3 = clazz.newInstance();System.out.println(u.hashCode()==u3.hashCode());Method setUname = clazz.getDeclaredMethod("setUname", String.class);setUname.invoke(u3,"stk3");System.out.println(u3.getUname());//通过反射API操作属性RUser u4 = clazz.newInstance();Field f = clazz.getDeclaredField("uname");f.setAccessible(true);//这个属性不用做安全检查直接访问f.set(u4,"stk4");System.out.println(u4.getUname());} catch (Exception e) {e.printStackTrace();}}
}

运行结果:


可以看到通过调用setAccessible(true)使得可以直接访问设定private成员函数

请说明一下JAVA中反射的实现过程和作用分别是什么?相关推荐

  1. JAVA中反射的实现过程和作用分别是什么?

    JAVA语言编译之后会生成一个.class文件,反射就是通过字节码文件找到某一个类.类中的方法以及属性等.反射的实现主要借助以下四个类:Class:类的对象,Constructor:类的构造方法,Fi ...

  2. Java中反射的三种常用方式

    Java中反射的三种常用方式 package com.xiaohao.test; public class Test{ public static void main(String[] args) t ...

  3. Java中反射的实现方式

    Java中的发射机制 所谓反射,是指在运行时状态中,获取类中的属性和方法,以及调用其中的方法的一种机制.这种机制的作用在于获取运行时才知道的类(Class)及其中的属性(Field).方法(Metho ...

  4. java socket分包粘包 代码_分享java中处理socket通信过程中粘包情况的实例代码

    本篇文章主要介绍了java中处理socket通信过程中粘包的情况,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 这两天学习了java中处理socket通信过程中粘包的情况,而且很重要,所以,今天添 ...

  5. Java main方法_解释Java中的main方法,及其作用_一个java文件中可包含多个main方法

    public static void main(String[] args) {} 或者 public static void main(String args[]) {} main方法是我们学习Ja ...

  6. 请说明一下MyBatis中命名空间(namespace)的作用是什么?

    请说明一下MyBatis中命名空间(namespace)的作用是什么? 在大型项目中,可能存在大量的sql语句,这时候为每一个sql语句起一个唯一的标识ID就变得并不容易了,为了解决这个问题,在myb ...

  7. java中反射机制的含义_java的反射是什么意思?

    反射是Java的特征之一,是一种间接操作目标对象的机制. Java反射机制指的是在Java程序运行状态中,对于任何一个类,都可以获得这个类的所有属性和方法:对于给定的一个对象,都能够调用它的任意一个属 ...

  8. Java中反射相关的类

    目录 反射 反射相关的类 1. Class类--反射核心类 2. Constructor类--通过反射调用构造方法 破坏封装对象 3. Method类--通过反射调用普通方法 4. Field类--通 ...

  9. java中反射到底是什么_JAVA中反射是什么

    烧仙草VB JAVA中的反射是运行中的程序检查自己和软件运行环境的能力,它可以根据它发现的进行改变.通俗的讲就是反射可以在运行时根据指定的类名获得类的信息.首先我们先明确两个概念,静态编译和动态编译. ...

最新文章

  1. word邮件合并一页8个_利用word邮件合并批量制作准考证
  2. 【c语言】蓝桥杯2020校内模拟赛c组
  3. mysql 中报1062_mysql error 1062 问题解决
  4. 在Windows下如何安装Tomcat服务器搭建
  5. 中国最闷声发大财的城市,人均GDP超杭州
  6. RedHat中squid简易配置
  7. npm构建vue项目
  8. idea类生成序列号
  9. OpenCV-车牌号检测
  10. 【互联网协议】北邮国际学院大三上基础知识
  11. 服务计算——Selpg
  12. 网易公开课 “可汗学院”《统计学》学习笔记
  13. 【无标题】关于CTF的相关知识
  14. html的color粉颜色,HTML颜色一览(color)
  15. 计算机网络首地址和末地址公式,计算机中的地址即为存储单元的编码,一个首地址为1000H,容量为16KB的存储区域,末地址为________H。...
  16. 排列组合思维导图_Xmind 进阶教程|高级感满满的思维导图都在使用的6个技巧。...
  17. 基于时间序列特征提取的车载网络系统入侵检测技术
  18. netstat -ano命令失效怎么办
  19. 解决win7系统重启后ip丢失问题,即每次电脑重启都要重新设置ip地址,重启后ip地址没了
  20. 09静态资源虚拟主机

热门文章

  1. linux常用rm命令详解,Linux常用命令解析- rm命令
  2. 图解HTTP笔记之第九章:HTTP瓶颈以及解决方法之websocket
  3. 【mac】关于终端上使用的快捷键
  4. GPT2-Chinese:中文的GPT2训练代码
  5. cocos creator 保持屏幕常亮 屏幕不休眠
  6. 高中计算机课主要学什么好处,高中信息技术课程中深度学习的重要性
  7. 视频内容快速转码解决方案
  8. vue 移动端选择日期控件-----vue2-datepick
  9. powerShell修改输入字体颜色
  10. 电脑版微信同时登录多个微信账号