java反射机制
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java反射机制相关的知识,希望对你有一定的参考价值。
一、为什么使用反射
为了写通用性的代码,如框架等。编译时期不知道传入的对象的类型,无法调用方法和属性,所以框架为了实现通用性,将Object为参数,只在运行的时候通过该类的Class对象获得类的信息。
二、什么是反射
主要是指程序可以访问、检测和修改它本身状态或行为的一种能力。Java中,反射是一种强大的工具。它使您能够创建灵活的代码,这些代码可以在运行时装配,无需在组件之间进行源代表链接。反射允许我们在编写与执行时,使我们的程序代码能够接入装载到JVM中的类的内部信息,而不是源代码中选定的类协作的代码。这使反射成为构建灵活的应用的主要工具。但需注意的是:如果使用不当,反射的成本很高。
三、怎么使用
主要方法:
1.得到Class对象 三种方式
(1)Class.forName("类的字符串全名")
Class<?> clazz = Class.forName("com.chapter14.Student");
(2)使用类.class 获得该类对应的Class对象
Class<?> clazz = Student.class;
(3)对象.getClass()方法
Object object = new Student();
Class<?> clazz = object.getClass();
2.得到构造函数 创建对象
(1)Object o = clazz.newInstance(); //Object o = new Student();
(2)使用Constructor创建对象,带declare 是得到所有访问权限的,不带declare是得到public的
得到所有构造函数:Constructor[] consArr clazz.getDeclaredConstructors();
Class[] clazzArr = new Class[]{int.class,String.class,int.class}; Constructor c = clazz.getDeclaredConstructor(clazzArr);
Object o = c.newInstance(1,"aaa",22);
3.得到方法,调用方法(对于方法来说declared能显示4种访问权限,不加declared 只有public + 父类的方法)
得到所有方法:Method[] methodArr = clazz.getDeclaredMethods();
对象.方法名(参数);
方法名.invoke(对象,参数);
4.得到属性
Field name = clazz.getDeclaredField("name"); name.setAccessible(true);//设值属性的访问性 破坏了封装
5.动态创建数组
String[] strArr = new String[5];
strArr[0] = "aaa";
Object objArr = Array.newInstance(String.class, 5);
技术分享:www.kaige123.com
本文出自 “11247808” 博客,转载请与作者联系!
以上是关于java反射机制的主要内容,如果未能解决你的问题,请参考以下文章