Java中的反射机制详讲

  • 1、反射机制_介绍_Class对象获取
  • 2、反射机制_动态操作_构造器_方法_属性
  • 3、动态编译_DanamicCompile_反射调用main方法问题

好文推荐:排序、查找算法齐全(程序员必会 好文 值得收藏!)

1、反射机制_介绍_Class对象获取

动态:在编译期间能改变结构
反射机制:指的是可以在运行时加载、探知,使用编译期间完全未知的类

/** 测试java.lang.Class对象的获取方式* 测试各种类型的获取方式*/
@SuppressWarnings("all")
public class Test1 {public static void main(String[] args) {String path="com.TestBasic.User";try {Class clazz=Class.forName(path);//对象时表示或封装一些数据,一个类被加载后,JVM会创建一个对应该类的Class对象,他的整个结构信息会被放到Class对象中//这个Class对象就是一面镜子,通过这个镜子可以看到类的全部信息System.out.println(clazz); System.out.println(clazz.hashCode());//一个类只对应一个反射对象Class clazz2=Class.forName(path);System.out.println(clazz2.hashCode()); Class strClazz=String.class;Class strClazz2=path.getClass();System.out.println(strClazz==strClazz2);  Class intClazz=int.class;int[] a1=new int[20];int[] a2=new int[30];System.out.println(a1.getClass().hashCode()); System.out.println(a2.getClass().hashCode());  int[] a3=new int[20];int[][] a4=new int[30][3];System.out.println(a3.getClass().hashCode()); System.out.println(a4.getClass().hashCode());  } catch (ClassNotFoundException e) {e.printStackTrace();}}
}

2、反射机制_动态操作_构造器_方法_属性

/** 应用反射的API,获取类的信息(类的名字。属性、方法、构造器等)* */
public class Test3 {public static void main(String[] args) throws NoSuchMethodException, SecurityException {String path="com.TestBasic.User";try {Class clazz=Class.forName(path);//获取类的名字System.out.println(clazz.getName());  System.out.println(clazz.getSimpleName());  //获取属性信息Field[] fields=clazz.getFields();  //只能获得public的fieldSystem.out.println(fields.length);  Field[] fields2=clazz.getDeclaredFields();  //获得所有的fieldSystem.out.println(fields2.length);  for(Field temp:fields2) {System.out.println("属性:"+temp);}//获取方法信息Method[] method=clazz.getDeclaredMethods();Method m1=clazz.getDeclaredMethod("getName",null);//如果方法有参,则必须通过参数类型对应的class对象Method m2=clazz.getDeclaredMethod("setName",String.class);for(Method me:method) {System.out.println("方法:"+me);}//获取构造器信息Constructor[] constructors=clazz.getDeclaredConstructors();//获取无参构造器Constructor c=clazz.getDeclaredConstructor(null);System.out.println("获得的构造器:"+c);//获得有参的构造器Constructor c2=clazz.getDeclaredConstructor(String.class,int.class);System.out.println("获得有参的构造器:"+c2);for(Constructor con:constructors) {System.out.println("构造器:"+con);}} catch (ClassNotFoundException e) {e.printStackTrace();}}
}

注意:javabean必须有无参的构造器,因为如果有反射存在。

通过反射可以获得类的私有属性。如下:

         //通过反射API操作属性User u=clazz.newInstance();Field f=clazz.getDeclaredField("name");f.setAccessible(true);  //通过反射直接写属性f.set(u,"xiao");System.out.println(u.getName());  //通过反射直接读属性System.out.println(f.get(u));

3、动态编译_DanamicCompile_反射调用main方法问题

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;import javax.tools.JavaCompiler;
import javax.tools.ToolProvider;
public class Test4 {public static void main(String[] args) throws Exception {JavaCompiler com=ToolProvider.getSystemJavaCompiler();int result=com.run(null,null,null,"F:\\java系统学习\\hello.java");System.out.println(result==0?"编译成功":"编译失败");  Runtime run=Runtime.getRuntime();Process process=run.exec("java -cp  F:/java系统学习  hello");InputStream in=process.getInputStream();BufferedReader reader=new BufferedReader(new InputStreamReader(in));String info="";while((info=reader.readLine())!=null) {System.out.println(info);  }}
}

Java中的反射机制详讲相关推荐

  1. JAVA基础--JAVA中的反射机制详解

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

  2. java代码安全检测机制_全面解析:java中的反射机制,内含代码验证解析

    什么是反射? 在运行状态中,对于任意一个类,都能够获取到这个类的所有属性和方法,对于任意一个对象,都能够调用它的任意一个方法和属性(包括私有的方法和属性),这种动态获取的信息以及动态调用对象的方法的功 ...

  3. formdata 接受参数中带有class 对象_浅析JAVA中的反射机制及对Servlet的优化

    今天来聊聊java中的反射机制,工作以后发现很多东西动不动就要使用反射或者动态代理,如果不能很好的理解反射,那么对于动态代理等一些重要的设计模式就会有种不够通透的感觉. 所谓的反射,就是在运行状态中, ...

  4. 浅说Java中的反射机制(一)

    在学习传智播客李勇老师的JDBC系列时,会出现反射的概念,由于又是第一次见,不免感到陌生.所以再次在博客园找到一篇文章,先记录如下: 引用自java中的反射机制,作者bingoideas.(()为我手 ...

  5. java中的反射机制是什么

    给大家介绍一下java中的反射机制,java中反射机制更体现出了java的灵活性.多态.和类之间的耦合性. 1:反射是一种间接操作目标对象的机制,只要给定类的名字,就可以通过反设机制获取所有的类信息. ...

  6. 【反射机制】Java中的反射机制,使用反射机制创建对象、访问属性、方法、构造方法等

    这篇文章主要是整理了Java中的反射机制,包括:反射机制概念.反射机制访问构造方法.反射机制访问普通方法.反射机制访问属性,反射机制访问修饰符. 目录 一.反射机制概念 二.反射机制使用 (1)加载C ...

  7. 根据实例详解Java中的反射机制

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

  8. 黑马程序员,黑马论坛 ------JAVA中的反射机制

    文章来源:黑马程序员,黑马论坛 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法:这种动态获取的信息以及动态调用对象的方法 ...

  9. java 反射机制_详解Java中的反射机制的优缺点

    一.什么是反射? 对于程序员来说,应该很少需要直接使用反射工具:之所以在语言中提供它们,是为了支持其他Java特性,比如对象序列化.Java Beans以及RMI.还有就是在很多框架中,也是应用到了反 ...

最新文章

  1. OpenVINO实时人脸表面3D点云提取
  2. apimonitor 神器啊 。。
  3. python集合属性方法运算_python对象及运算 序列小结 集合
  4. android 属性动画伸缩,Android的属性动画(二)加载框圆点旋转收缩放大缩小效果的实现...
  5. 为WPF播放GIF伤神不?
  6. linux设置新硬盘权限,Linux 下挂载新硬盘以及更改为普通权限
  7. 工作93:注意数据对应接口位置
  8. openjdk:8u22-jre-alpine在java开发中的NullPointerException错误解决方案
  9. Android--手机root获取与判断应用是否获取
  10. 对变量移位顺序读写_Java多线程并发读写锁ReadWriteLock实现原理剖析
  11. CCNA 中文教材 (pdf)
  12. Java 员工信息管理系统
  13. centos7安装polygraph
  14. Android 运行时权限
  15. 【JAVAEE框架】浅谈 Spring 框架的两大核心思想 AOP 与 IOP
  16. 内容赛道进入集团作战时代,巨头呈现“一超多强”竞争格局
  17. 第六章 深入理解Magento – 高级Magento模型(EAV)
  18. 解决hbase报错Master exiting
  19. OverFeat——全卷积首次用于检测问题 (目标检测)(深度学习)(ICLR 2014)
  20. 旺店通与金蝶集成解决方案

热门文章

  1. mondrian olap 示例_java开源的OLAP引擎--mondrian
  2. 22考研每日必背长难句1
  3. MySQL服务器性能(通过Sysbench测试cpu、io、内存以及mysql服务等)
  4. 【视频AVI隐写/提取】MSU StegoVideo下载、使用方法(需要用到解码器)
  5. 如何在CentOS中加入sl(跑火车)命令
  6. zemax与matlab自由曲面csdn,ZEMAX 自由曲面、HMD/HUD应用——自由曲面公差分析
  7. mysql基于gtid的故障恢复模拟
  8. 麻省理工 - OpenCourseWare
  9. ICLOUD储存空间要升级吗_杭州楼市“吃紧”,楼市调控再升级,房价又要跌一波了吗?...
  10. plupload插件使用