java反射

来源:互联网 发布:googletts语音数据 编辑:程序博客网 时间:2024/06/05 11:18

---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------

Java的反射就是把java类作为操作的对象,对它的函数,属性,成员等进行操作。也就是说,我们平时用java来模拟这个对象那个对象,现在,轮到了类这个玩意。

Java的反射主要涉及到的类是java.lang.Class类和java.lang.reflect包中的Constructor、Field、Method类。

下面的程序演示了大部分常用到的反射用法

package reflect;/*注意包*/import java.lang.reflect.Constructor;import java.lang.reflect.Field;import java.lang.reflect.Method;class Demo1 {// 实验类1private String str;public int x = 88;public Demo1() {str = "默认初始化的Demo1";}public Demo1(String str) {this.str = "传参初始化的Demo1 : " + str;}@Overridepublic String toString() {return str;}}public class ReflectTest {public static void main(String[] args) {Class clas1 = void.class;System.out.println(clas1);System.out.println("得到类名 " + new Demo1().getClass().getName());System.out.println("-----得到Class类的3种方法-----");Class clazzDemo1 = Demo1.class;System.out.println("打印类 1 " + clazzDemo1);clazzDemo1 = new Demo1().getClass();System.out.println("打印类2 " + clazzDemo1);try {clazzDemo1 = Class.forName("reflect.Demo1");// 完整类名System.out.println("打印类3 " + clazzDemo1);} catch (ClassNotFoundException e) {System.out.println("错误1");}System.out.println("--------实例化对象--------");try {Object obj = clazzDemo1.newInstance();System.out.println("实例化对象1:" + obj);Constructor<?> constructor = clazzDemo1.getConstructor(String.class);Demo1 obj2 = (Demo1) constructor.newInstance("hehe");System.out.println("实例化对象2:" + obj2);} catch (Exception e) {System.out.println("错误2");}System.out.println("-------得到字段---------");Demo1 demo1 = new Demo1();Field fieldx;try {fieldx = demo1.getClass().getField("x");System.out.println("字段x " + fieldx.get(demo1));fieldx = demo1.getClass().getDeclaredField("str");fieldx.setAccessible(true);System.out.println("字段str :" + fieldx.get(demo1));} catch (Exception e) {System.out.println("错误3");}System.out.println("-----------得到接口------");Class<?> interfaces[] = java.util.ArrayList.class.getInterfaces();for (Class c : interfaces) {System.out.println("ArrayList接口为:" + c);}System.out.println("------得到方法----------");try {Method method1=String.class.getMethod("charAt", int.class);System.out.println("abc的第二个字母 "+method1.invoke("abc", 1));} catch (Exception e) {System.out.println("错误4");} }}

运行结果

void得到类名 reflect.Demo1-----得到Class类的3种方法-----打印类 1 class reflect.Demo1打印类2 class reflect.Demo1打印类3 class reflect.Demo1--------实例化对象--------实例化对象1:默认初始化的Demo1实例化对象2:传参初始化的Demo1 : hehe-------得到字段---------字段x 88字段str :默认初始化的Demo1-----------得到接口------ArrayList接口为:interface java.util.ListArrayList接口为:interface java.util.RandomAccessArrayList接口为:interface java.lang.CloneableArrayList接口为:interface java.io.Serializable------得到方法----------abc的第二个字母 b

---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------详细请查看:www.itheima.com

0 0
原创粉丝点击