Java反射简介
2015-09-12 17:49
295 查看
反射
1、Java反射的概念
自己理解:可以通过类来获得对象及其属性和方法,先知道整体,然后根据整体是什么类型,在创建具体实现的对象,从而进行其他操作。
反射含义:可以获取正在运行的Java对象。
2、Java功能:
可以判断运行对象属于哪一个类
可以判断运行对象拥有的成员和函数
反射甚至可以调用private修饰的方法
3、实现Java反射的类
Class:它表示正在运行的Java应用程序中的类和接口
Field:提供有关类或接口的属性信息,以及对它的动态访问权限
Constructor:提供关于类的单个构造方法的信息以及对它的访问权限
Method:提供关于类或接口中某个方法信息
4、反射的优缺点
反射的优点是可以实现动态创建对象
反射的缺点是对性能有影响
代码示例:
public class Mydemo {
public static void main(String[] args){
// 获取整个类
Class<?> c = null;
try {
c = Class.forName("java.lang.Integer");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
// 获取所有的属性
Field[] fs = c.getDeclaredFields();
// 定义可变长的字符串,用来存储属性
StringBuffer sb = new StringBuffer();
// 通过追加的方法,将每个属性拼接到此字符串中
// 最外边的public定义
sb.append(Modifier.toString(c.getModifiers()) + " class " + c.getSimpleName() +"{\n");
// 里边的每一个属性
for(Field field:fs){
// 空格
sb.append("\t");
// 获得属性的修饰符,例如public,static等等
sb.append(Modifier.toString(field.getModifiers())+" ");
// 属性的类型的名字
sb.append(field.getType().getSimpleName() + " ");
// 属性的名字+回车
sb.append(field.getName()+";\n");
}
sb.append("}");
System.out.println(sb);
}
}
1、Java反射的概念
自己理解:可以通过类来获得对象及其属性和方法,先知道整体,然后根据整体是什么类型,在创建具体实现的对象,从而进行其他操作。
反射含义:可以获取正在运行的Java对象。
2、Java功能:
可以判断运行对象属于哪一个类
可以判断运行对象拥有的成员和函数
反射甚至可以调用private修饰的方法
3、实现Java反射的类
Class:它表示正在运行的Java应用程序中的类和接口
Field:提供有关类或接口的属性信息,以及对它的动态访问权限
Constructor:提供关于类的单个构造方法的信息以及对它的访问权限
Method:提供关于类或接口中某个方法信息
4、反射的优缺点
反射的优点是可以实现动态创建对象
反射的缺点是对性能有影响
代码示例:
public class Mydemo {
public static void main(String[] args){
// 获取整个类
Class<?> c = null;
try {
c = Class.forName("java.lang.Integer");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
// 获取所有的属性
Field[] fs = c.getDeclaredFields();
// 定义可变长的字符串,用来存储属性
StringBuffer sb = new StringBuffer();
// 通过追加的方法,将每个属性拼接到此字符串中
// 最外边的public定义
sb.append(Modifier.toString(c.getModifiers()) + " class " + c.getSimpleName() +"{\n");
// 里边的每一个属性
for(Field field:fs){
// 空格
sb.append("\t");
// 获得属性的修饰符,例如public,static等等
sb.append(Modifier.toString(field.getModifiers())+" ");
// 属性的类型的名字
sb.append(field.getType().getSimpleName() + " ");
// 属性的名字+回车
sb.append(field.getName()+";\n");
}
sb.append("}");
System.out.println(sb);
}
}
相关文章推荐
- 15_09_12 初学Java的一些小知识点
- Java构建工具:Ant vs Maven vs Gradle
- JavaWeb:浏览器中下载文件时,显示下载框
- java 虚拟机--新生代与老年代GC
- java super和this总结
- myeclipse中,项目上有个叉报错,文件没有错误【解决方案】
- Spring4新特性——核心容器的其他改进
- 使用Rabbitmq/spring进行RPC
- 用MyEclipse自动生成hibernate映射文件和实体类(MyEclipse Datebase Explorer)
- Java JNI实现原理初探
- JavaFX8中去掉ScrollPane边框的3种方式
- JAVA中使用哈希表
- Java Web 中文乱码问题总结
- 在Eclipse或者ADT中使用ButterKnifeZelezny,Android组件初始化从此变得简单易懂!!!!
- SpringMVC拦截器(包括自定以拦截器--实现HandlerInterceptorAdapter)(资源和权限管理)
- Java设计模式——代理模式
- 360笔试 选镇长问题
- 关于spring配置文件的继承和抽象属性
- 哈希表(HashMap)分析及实现(JAVA)
- Spring4新特性——泛型限定式依赖注入