java的反射机制

1,什么是java的反射机制?

是在运行期,对于任意一个类(这个类指的是Object或者Iterface等等的Class类),都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种在运行期动态生成对象,并改变它的状态的功能称为java语言的反射机制。

2,java反射机制的优点以及缺点是什么?

    优点:因为可以在运行期动态获取类的属性和方法,改变对象的状态,所以增大了程序的灵活性;利用这种特性可以实现动态代理机制!
缺点:原先我们的java程序是先预编译成.java->.class文件,然后再执行,编译器会对代码进行优化。现在是要在运行期动态获取Class类,再由Class去生成一个对象,这样会导致编译器要频繁地做安全检查,访问控制以及方法传参的类型检查等等,机器的反应时间相差在数量级上,但对于人来说忽略不计(不知道我理解的对不对,欢迎各位道友指正,感激不尽)

3,java反射机制的基本用法

首先要获取一个Class对象,有三种方式:
<span style="font-size:14px;">第一种方式:
Class c = Class.forName("Test");
第二种方式:
Class c = Test.class; 
第三种方式:
Test test = new Test();
Class c = test.getClass();</span>
生成对象:
<span style="font-size:14px;">Test t = (Test) c.newInstance();
Test t = (Test) c.newInstance();
//            Constructor<Test> constructor = c.getConstructor();//获取无参的构造函数
//            Test t = constructor.newInstance();
Constructor<Test> constructor = c.getConstructor(String.class,int.class);//获取有参的构造函数
Test t = constructor.newInstance("test",1);</span>
获取类中的属性:
<span style="font-size:14px;">Field[] fields = c.getDeclaredFields();//获取属性集合
Field field = c.getDeclaredField("name");//获取特定的属性
Test t1 = (Test)c.newInstance();
field.setAccessible(true);//打破封装性,实现属性赋值
field.set(t1,"test");//赋值
System.out.print(t1.getName());
//获取属性的修饰以及类型
Modifier.toString(field.getModifiers());//private
field.getGenericType();//String</span>
获取类中的方法并执行,包括静态方法:
<span style="font-size:14px;">Method method = c.getDeclaredMethod("print",String.class);
method.invoke(t1,"反射获取的方法");//调用真实对象t1的print方法去执行
Method method1 = c.getDeclaredMethod("print1",String.class);
method1.invoke(null,"反射获取的Static方法");//调用Test的静态print1方法去执行</span>
反射操作数组对象:
<span style="font-size:14px;">Object o = Array.newInstance(Integer.TYPE,10);//创造一个长度为10的一维int数组
int[] ints = new int[]{5,8};
Object array = Array.newInstance(Integer.TYPE,ints);//返回一个二维数组
System.out.print("====二位数组====" + array);
array = Array.get(array,3);//返回索引为三的一维数组
System.out.print("====一位数组====" + array);
Array.set(array, 3, 12);//设置索引为3的值是12
System.out.print(Array.get(array, 3) + "");</span>

以上纯属个人学习笔记,有说得不对的地方,各位看官随意喷!







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值