java反射知识
java反射机制是在运行状态中,对于任意一个类(class文件),都能够知道这个类的所有属性和方法:
对于任意一个对象,都能够调用它的任意一个方法和属性;
这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
动态的获取类中的信息,就是java反射
java反射的作用示意图(可以对已经定义的代码利用配置文件进行扩展,不用修改源代码,源文件提供了接口,开发者可以编写实现接口的类,类中存在处理请求和应答方式,再进行配置,即可达到原程序的扩展,)

package reflect.test; import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException; import useclass.Person; public class reflectDemo {
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, SecurityException, IllegalArgumentException, NoSuchMethodException, InvocationTargetException, NoSuchFieldException {
getFieldDemo();//获取字段
creatNewClass();//根据class文件创建对象
creatNewClass_2();//有有参数的构造方法实例化
}
public static void getFieldDemo() throws ClassNotFoundException, SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException, InstantiationException {
Class cla=Class.forName("useclass.Person");
Field f=null;//cla.getField("age");
f=cla.getDeclaredField("name");
//对私有字段的访问取消权限检查,暴力访问
f.setAccessible(true); Object obj=cla.newInstance();
f.set(obj,"小强");//把名字设置为小强
Object o=f.get(obj);
System.out.println(o);
}
public static void creatNewClass_2() throws ClassNotFoundException, SecurityException, NoSuchMethodException, IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException {
/*
* 当获取指定名称对应类中的所体现的对象时,
* 而该对象初始化不使用空参数构造,应该先获取到该构造函数
* 通过字节码文件对象即可完成
* 方法是:getConstructor(paramterTypes);
*/
String name="useclass.Person";
Class cla=Class.forName(name);//得到class文件
Constructor con=cla.getConstructor(String.class,int.class);//得到指定参数构造函数
Object obj=con.newInstance("小强",32);//用指定参数构造函数实例化
System.out.println(cla.getFields());
}
public static void creatNewClass() throws ClassNotFoundException, InstantiationException, IllegalAccessException{
//早期:new的时候,先根据被new的类的名称找寻该类的字节码文件,并加载进内存,
//并创建该字节码文件对象,并接着创建该字节文件的对应的Person对象
useclass.Person p=new useclass.Person(); //现在:
String name="useclass.Person";
//找寻该名称类文件,并加载进内存,,并产生Class对象
Class cla=Class.forName(name);
//产生该类的对象
Object obj=cla.newInstance();//获取带参数的构造函数,并实例化 } }
java反射知识的更多相关文章
- 云笔记项目-Java反射知识学习
在云笔记项目中,补充了部分反射的知识,反射这一部分基础知识非常重要,前面学习的框架Spring和MyBatis读取xml配置文件创建对象,以及JDBC加载驱动等都用了反射,但只知道有这个东西,具体不知 ...
- java反射知识相关的文章
整理的反射相关的文章: (1).通俗理解反射(知乎):学习java应该如何理解反射? (2).关于反射比较深入的博文地址:深入解析Java反射(1) - 基础 贴出我反射调用代码:(craw,dept ...
- 学习Spring必学的Java基础知识(1)----反射(转)
引述要学习Spring框架的技术内幕,必须事先掌握一些基本的Java知识,正所谓"登高必自卑,涉远必自迩".以下几项Java知识和Spring框架息息相关,不可不学(我将通过一个系 ...
- 学习Spring必学的Java基础知识(1)----反射
引述要学习Spring框架的技术内幕,必须事先掌握一些基本的Java知识,正所谓"登高必自卑,涉远必自迩".以下几项Java知识和Spring框架息息相关,不可不学(我将通过一个系 ...
- Spring IOC知识java反射
[1] Java反射知识-->Spring IoC :http://www.iteye.com/topic/1123081 [2] Java动态代理-->Spring AOP :http: ...
- 学习Spring必学的Java基础知识
[1] Java反射知识-->Spring IoC :http://www.iteye.com/topic/1123081 [2] Java动态代理-->Spring AOP :http: ...
- 主题:学习Spring必学的Java基础知识(9)----HTTP报文
转: 引述要学习Spring框架的技术内幕,必须事先掌握一些基本的Java知识,正所谓“登高必自卑,涉远必自迩”.以下几项Java知识和Spring框架息息相关,不可不学(我将通过一个系列分别介绍这些 ...
- Java反射-高级知识掌握
PS:本文就Java反射的高级知识做下汇总,理清在什么情况下,我们应该去使用反射,提供框架的健壮性,ps:xieyang@163.com/xieyang@163.com
- Java反射-中级知识掌握
PS:本文就Java反射常用的中级知识做下汇总和分析/cnxieyang@163.com/xieyang@e6yun.com
随机推荐
- linux下的oracle11gR2静默安装,经验分享
说明: 1.我的linux是64位的redhat6.5,安装的oracle版本是11.2.0的. 2.我这是自己安装的linux虚拟机,主机名为ora11g,ip为192.168.100.122 3. ...
- Cocos2d-x获取随机数
计算机是无法产生真正的随机数的,都是伪随机.获取随机数的方式和算法多种多样,这里只给出一种方法,基于最新的C++11. 1 2 3 4 5 #include <random> std::u ...
- 【JS】Intermediate3:AJAX
1.load new content into a page without a full reload XML HTTP Request (XHR) To retrieve new content ...
- linux的nohup命令的用法
在应用Unix/Linux时,我们一般想让某个程序在后台运行,于是我们将常会用 & 在程序结尾来让程序自动运行.比如我们要运行mysql在后台: /usr/local/mysql/bin/my ...
- Spark0.8.0的安装配置
1.profile export SCALA_HOME=/home/hadoop/scala-2.9.3SPARK_080=/home/hadoop/spark-0.8.0export SPARK_H ...
- chmod chgrp chown
Linux系统中的每个文件和目录都有访问许可权限,用它来确定谁可以通过何种方式对文件和目录进行访问和操作. 文件或目录的访问权限分为只读,只写和可执行三种.以文件为例,只读权限表示只允许读其内容,而禁 ...
- HW5.1
public class Solution { public static void main(String[] args) { int count = 0; for(int i = 1; i < ...
- 关于Redis的常识(推荐)
原文出处: https://github.com/springside/springside4/wiki/redis 版本:V3.0.3 2013-8-1 (@江南白衣版权所有,转载请保留出处) 1. ...
- 数据绑定之DataFormatString
设定BoundField的DataFormatString,通常有以下几种 DataFormatString= "{0:C}" 货币,货币的格式取决于当前Thread中Cultur ...
- PC-经典之“运行里面的密密”
msconfig.exe 你自己往里面输入这个字母就可以看到了,试试看,还有,我这里有一些可以在"运行"栏里输入的命令,一并给你: 以下为Windows操作系统的常用运行命令,执行 ...