说到反射,相信有过编程经验的人都不会陌生。反射机制让Java变得更加的灵活。反射机制在Java的众多特性中是非常重要的一个。下面就让我们一点一点了解它是怎么一回事。
什么是反射
在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
反射有什么用
1,在运行时判断任意一个对象所属的类;
2,在运行时构造任意一个类的对象;
3,在运行时判断任意一个类所具有的成员变量和方法;
4,在运行时调用任意一个对象的方法;
5,生成动态代理。
反射的API
学习一门语言,一种比较好的方式就是看它的API文档,因为它的API是最权威的,最准确的。下面我们一起看看JDK的API对于反射是如何描述的吧!
与反射有关的所有接口以及类都在java.lang.reflect包里。
接口
类
类摘要
|
AccessibleObject
|
AccessibleObject 类是 Field、Method 和 Constructor 对象的基类。
|
Array
|
Array类提供了动态创建和访问 Java 数组的方法。
|
Constructor<T>
|
Constructor提供关于类的单个构造方法的信息以及对它的访问权限。
|
Field
|
Field提供有关类或接口的单个字段的信息,以及对它的动态访问权限。
|
Method
|
Method提供关于类或接口上单独某个方法(以及如何访问该方法)的信息。
|
Modifier
|
Modifier 类提供了static方法和常量,对类和成员访问修饰符进行解码。
|
Proxy
|
Proxy提供用于创建动态代理类和实例的静态方法,它还是由这些方法创建的所有动态代理类的超类。
|
ReflectPermission
|
反射操作的 Permission 类。
|
下面给大家写了一个小实例:
package reflection;
public class UserInfo {
private Integer id;
private String userName;
private String password;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString(){
return this.getClass().getName();
}
}
package reflection;
public class GetClass {
public boolean ClassCheck(){
try {
System.out.println("第一种,通过类本身获得对象");
Class UserClass = this.getClass();
System.out.println("第一种方式成功!类名:"+UserClass.toString()+"\n");
System.out.println("第二种,通过子类实例获取父类");
UserInfo ui = new UserInfo();
UserClass = ui.getClass();
Class SubUserClass = UserClass.getSuperclass();
System.out.println("第二种方式成功!类名:"+SubUserClass.toString()+"\n");
System.out.println("第三种,通过类名加.class获得对象");
Class ForClass = reflection.UserInfo.class;
System.out.println("第三种方式成功!类名:"+ForClass.toString()+"\n");
System.out.println("第四种,通过类名的字符串获得对象");
Class ForName = Class.forName("reflection.UserInfo");
System.out.println("第四种方式成功!类名:"+ForName.toString()+"\n");
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}
@Override
public String toString(){
return this.getClass().getName();
}
public static void main(String[] args) {
GetClass gc = new GetClass();
gc.ClassCheck();
if (gc.ClassCheck()) {
System.out.println("所有反射全部成功!");
}
else {
System.out.println("反射有问题,请检查!");
}
}
}
上面四种方法里面,我用的最多的是第四种,这种一般都是配合配置文件一起用的。反射与配置文件的结合让我们的代码变得非常的灵活,易扩展、以维护。可谓是好处多多呀,所以才有那句”反射反射,程序员的快乐!“一起尽情的快乐吧!
PS:下一篇将结合实例更加详细的讲解!《菜鸟学编程(十)——Java反射机制(二)》
分享到:
相关推荐
Java反射实例源码,具体讲解内容见博客http://blog.csdn.net/liushuijinger 菜鸟学编程(九)——Java反射机制(一) 菜鸟学编程(十)——Java反射机制(二)
菜鸟成长手册2009——CPU-内存-硬盘篇 - 硬件知识精华菜鸟成长手册2009——CPU-内存-硬盘篇 - 硬件知识精华菜鸟成长手册2009——CPU-内存-硬盘篇 - 硬件知识精华菜鸟成长手册2009——CPU-内存-硬盘篇 - 硬件知识精华...
这是我自己地java反射机制的总结,在学习饿过程中自己的看法,以及学习的记录,希望能够帮助到大家!
电子版的Python GUI设计之Tkinter菜鸟编程,一般是扫描图片组成的PDF或网页版 ,不支持查找操作,特整理成Word版并分享。
一个在黑客界引起轰动的菜鸟教材---跟我学编程系列
个人总结,集10年开发经验,精挑细选!不要错过哦。非常经典,非常实在的资料.轻松上手,附上经典实例,
菜鸟学习Java一(Java基础)
java菜鸟学习第一步-java基础语法,学习一门语言先从语法开始学起,学好基础才能深入的学习编程
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。 Java...
菜鸟学习ARM——安装交叉编译链记录,及编译jpeg
菜鸟也玩LINUX——brk()漏洞重提.pdf
java学习进阶之路,如果从一个菜鸟进阶成大神(csdn)————程序
这个编程规范很不错,让你知道书上的程序和网上的程序的那些编排,变量的定义为什么是这样定义,因为你不知道在程序界有他们共同的规定,当你了解了这篇文章你的程序会突飞猛进,会让别人一看就是专业人员写出来的...
菜鸟构建个人网站——“纯真年代”建站全过程(五).pdf
从原理讲解反射技术,及其作用,是不可多得的上手教程
让你从菜鸟变大师的必备装备! Windows游戏编程大师技巧——2D和3D游戏编程基础 绝对经典!值得一看!
菜鸟学习JAVA简单入门到精通,可以帮助刚入门的程序猿快速学习进入公司需要的技能
一名菜鸟学习编程技术,记录所学知识并分享给大家,希望大家多多支持。 今天来写一篇关于学习Linux基础命令——工作目录切换命令的博文,也实践了很多,总结给大家一起学习! 文章目录1. “`pwd命令“`2. “`cd命令...
何勤老师的最新著作,编程原理,编程思路讲得很好.
运用Java和SQL设计管理系统,对于初学java的人来说,是很好的资料,里面包括源代码