反射-初识
来源:互联网 发布:国外人工智能网站 编辑:程序博客网 时间:2024/06/06 00:46
一、反射的概述
在运行状态中,对于任意一个类(class文件),都能够知道这个类的所有属性与方法,任意一个对象都可以调用他的属性与方法
反射机制:动态获取java类中信息(属性、方法)的机制
可以理解为类的解剖
反射有什么用呢?
如果想要对制定名称的字节码文件进行加载并获取其中的内容并调用,这时就使用到了反射技术
以tomcat为例,他提供了处理请求和应答的方式,因为具体的处理动作不同,所以对外提供的接口由开发者来实现具体的请求和应答处理
比如:自定义一个类,并实现Servlet(这个是tomcat提供的),那么我们就必须实现其中已经定义好的请求、应到的处理方式
Class myClassimplements Servlet
{
//实现方法
}
类与用户之间的桥梁:配置文件,配置文件中已经定义好了类的一些元素
JAVA会对类文件(字节码文件)向上抽取一些共性:名称、字段、构造函数、一般函数
二、获取class对象的三种方式
1、Object类中的getClass()方法
Personp=newPerson(12,"zhangsan");
Class clazz=p.getClass();
这种方式的使用前提是:必须要明确具体的类,并创建对象,使用上比较麻烦,不常用
2、任何数据类型都具备一个静态的属性,class来获取其对应的class静态成员属性
Classclazz=Person.class;
使用时比较简单,但是还是需要明确所使用的类的名称,这种扩展性较差,不常用
3、只要通过给定的类的字符串名称即可实现
Classclazz=Class.forName(“cn.itheima.bean”),在调用forName方法时有可能出现ClassNotFoundException异常,需要抛出或者捕获异常
里面的字符串的必须是类的完整路径:cn.itheima.bean
第三种方式很常用,而且扩展性较强,反射的时候经常使用此方法
三、反射的使用
String name=”cn.itheima.bena.Person”
//寻找改名称的类文件,并加载到内存,并产生class对象
Class clazz=Class.forName(name);
//产生类对象,他会返回一个object对象
Objectobj=clazz.newInstance();
newInstance:相当于对象的new方法,会调用class里面的空参构造函数
注意:一般被反射的类都有一个空参,但如果获取指定的名称对应的类中没有空参构造函数时,一般先获取到这个类中的构造函数,通过字节码文件对象可以完成:getConstructors();他会获取这个类所有的构造函数
但这个方法只能获取公有的构造函数
获取构造方法:
String name=”cn.itheima.bena.Person”
Classclazz=Class.forName(name);
Constructorconstructor=clazz.getConstructor(String.class,int.class)
Objectobj=constructor.newInstance(“xiaomin”,39);
获取字段:
Fieldf=clazz.getField(“age”)//只能获取公共的
Fieldf=class.getDeclaredField(“age”)//获取所有的
获取字段的值:
对私有字段的访问权限取消,暴力访问
Field.setAccessible(true)
Objectobj=clazz.newInstance();
Objecto=f.get(obj);
System.out.println(o)//这里打印age默认的值
获取公共函数:获取公有的方法
Class clazz=Class.forName(“cn.itheima.bean.Person”);
Method[] methods=clazz.getMethods();
For(Methodm:methods)
{
//打印所有的方法
System.out.println(m);
}
如果要获取所有的方法,包括私有的
Method[]methods=clazz.getDeclareMethods();
获取空参数的一般方法
Methodmethod=clazz.getMethod(“show”,null);//他会获取到show方法
运行某个方法:
Objectobj=clazz.newInstance();
Method.invoke(obj,null);
- 反射-初识
- 初识反射
- 初识.net反射技术
- 初识反射机制
- Java反射之初识
- 初识反射API
- Java反射机制初识
- 初识Java反射机制
- 反射的初识
- Java(8)--初识反射
- 初识java反射机制
- Java反射机制初识
- 初识Java反射
- 初识java反射机制
- 初识Java反射
- 初识java反射
- Java反射初识
- 初识java反射机制
- CSDN邮件病毒?
- android系统通过图片绝对路径获取URI的三种方法
- netty-protobuf-rpc与protobuf-socket-rpc互通
- SQL2000数据库查询讲解002--最简单的查询
- 程序员的收藏之免费QQ秀
- 反射-初识
- .NET中的动态编译
- 从拼图游戏开始(九)_界面优化及功能完善
- 关闭资源.close()语句放在try里面好还是finally里面好?
- www.matrix67.com
- Node.js 2013年大事记
- 从拼图游戏开始(十)_项目总结
- 黑马程序员_IO流
- 4年技术经验