首页 / JAVA / java学习之 反射
java学习之 反射
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java学习之 反射,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2727字,纯文字阅读大概需要4分钟。
内容图文
![java学习之 反射](/upload/InfoBanner/zyjiaocheng/1149/a00e04362fd1466bb4a81840cbf382a6.jpg)
以前学习java只是学习了基本语法操作,各种常用方法的使用,随着慢慢学习,很多大神都觉得要想成为大神,就必须把java的反射给理解透,这样我就带着好奇的心去学习到底反射是什么玩意,所以就上网找资料学习去了,没想到收获真的不小,其实我们平时用的跟多操作都是通过反射来完成的,比如对于servlet在web.xml的配置都是同过反射来新建一个对象,还有SSH都是通过反射来实例化对象的,通过了反射让我更好的理解SSH框架。下面小弟就开始小谈一下反射的详细内容吧, 由于本人水平有限,若文章在表述和代码方面如有不妥之处,欢迎批评指正。留下你的脚印,欢迎评论!希望能互相学习。
反射其实就是通过Class对象获取类型的相关信息;
与反射相关的类
1: Class:表示类;
2:
Field:表示成员变量;
3: Method:表示方法;
4: Constructor:表示构造器
1:class类:获取class类的话有三种方法
如定义一个Users类
public class Users { private Integer Id; private String Name; private Date Birth; private float Score; public Integer getId() { return Id; } @Override public String toString() { return "Users [Id=" + Id + ", Name=" + Name + ", Birth=" + Birth + ", Score=" + Score + "]"; } public Users() { } public Users(int id) { this.Id = id; } publicvoid setId(Integer id) { Id = id; } public String ResultStr() { return "str"; } public String getName() { return Name; } publicvoid setName(String name) { Name = name; } public Date getBirth() { return Birth; } publicvoid setBirth(Date birth) { Birth = birth; } publicfloat getScore() { return Score; } publicvoid setScore(float score) { Score = score; } }
那么可以通过三种方式来获取该类
Usersp = new Users();
// 获取类的三种方法
Class c2 = p.getClass();//新建一个对象是再获取该类
Class c1 = Users.class;//直接通过类的静态方法来获取该类
Class c3 = Class.forName("com.lishun.Peason");//通过包名和类名来获取该类(配置文件就是通过这种方式来获取实例)
获取到了类就可以获取该类的构造器,方法和成员了(这里就使用上面的第三种方法获取类实例)
1:获取构造器:Constructor
Class c3 = Class.forName("com.lishun.Peason");//
//获取本类和父类一个公有构造器
Constructor cPublic=c3.getConstructor(int.class);//int.class指的的含有一个int类型参数的构造器
//获取本类和父类所有公有构造器
Constructor[] cPublicAll=c3.getConstructors();
//获取本类一个私有或公有构造器
Constructor cPublicOrPrivaet=c3.getDeclaredConstructor();
//获取本类所有公有或私有的构造器
Constructor[] cPublicOrPrivaetAll=c3.getDeclaredConstructors();
//执行构造方法
Peason p=(Peason)cPublic.newInstance(1);
2:获取方法:Method
//获取本类和父类单个公有的方法
Method m=c3.getMethod("ResultStr");
//获取本类和父类所有的公有的方法
Method[] mall=c3.getMethods();
//获取本类单个公有或私有的方法(所有访问级别都可获取到)
Method m1=c3.getDeclaredMethod("ResultStr1",String.class);
//获取本类所有的公有或私有的方法(所有访问级别都可获取到)
Method[] mall1=c3.getDeclaredMethods();
//执行该方法
m.invoke(c3.newInstance());//若执行静态的方法,第一个参数为null 无需新的对象
3:成员:Field
//获取本类和父类单个公有的方法
try {
Field f = c3.getField("Name");
} catch (Exception e) {
System.out.println(e.getMessage());
}
//获取本类和父类所有的公有的方法
Field[] fall=c3.getFields();
//获取本类单个公有或私有的成员(所有访问级别)
Field f1=c3.getDeclaredField(Name");
//获取本类所有的公有或私有的方法(所有访问级别)
Field[] fall1=c3.getDeclaredFields();
Object o=c3.newInstance();
//给成员赋值,private成员,方法,构造器 默认都是不能赋值的
f1.setAccessible(true);//把private的成员设置为可用
f1.set(o, "lishun");
System.out.println(o);
好了我所理解的反射就这些了,,小弟在此若还有没提全的或有错误的,望各位大神们指正出来,我也是个在学习中的小菜鸟,,希望能学得到更多的技术知识
原文:http://www.cnblogs.com/lishun1005/p/4356538.html
内容总结
以上是互联网集市为您收集整理的java学习之 反射全部内容,希望文章能够帮你解决java学习之 反射所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。