JAVA_Reflection1
package com.qf.reflection1; import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method; class Student {
private String name;
private int age; public String getName() {
return name;
} private void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public Student(String name, int age) {
super();
this.name = name;
this.age = age;
} public Student() {
super();
} } public class Test { public static void main(String[] args) { try {
// 使用反射第一步 得到某个类的Class对象
Class<Student> clazz1 = Student.class;
Class<?> clazz2 = Class.forName("com.qf.reflection1.Student");
Student student = new Student();
Class<?> clazz3 = student.getClass(); System.out.println("访问类所有属性");
// clazz1.getDeclaredField("age");// 根据属性名 得到属性值 私有的也能得到
// clazz1.getField("name");// 只能得到有访问权限的指定属性
// clazz1.getFields();//得到有访问权限的所有属性
Field fields[] = clazz1.getDeclaredFields();
for (Field field : fields) {
System.out.println(field);
} // 通过反射创建Student对象
// 1,得到无参构造方法
Constructor<Student> constructor = clazz1.getConstructor();
// 2,创建对象
Student stu = constructor.newInstance();
// 等价于 Student stu = new Student(); // 调用setName
// 1,得到setName()
Method method = clazz1.getDeclaredMethod("setName", new Class[] { String.class });
// 私有方法需要设置访问权限
method.setAccessible(true);
// 2,通过之前的student对象调用setName表示的方法
method.invoke(stu, new Object[] { "尼古拉斯赵四" }); // 1,得到getName()
Method getName = clazz1.getDeclaredMethod("getName", new Class[] {});
// 2,通过之前的student对象调用getName表示的方法
Object object = getName.invoke(stu, new Object[] {});
System.out.println(object); } catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } }
JAVA_Reflection1的更多相关文章
随机推荐
- android数据库(随apk一起发布数据库)
读取数据库+数据库版本更新 注意: a, 将随apk发布的数据库放在android工程下/res/raw路径下. b, 数据库文件存到手机上时,路径在/data/data/你的包名/databases ...
- java中两种类型变量
Java中有两种类型的变量,一种是对象类型,另一种是基础类型(primitive type). 对象类型普遍采用引用的方式,比如 List a = new ArrayList(); List b = ...
- tap/click on search button on softkeyboard
driver.sendKeyEvent(84);Appium says it successfully sent in the command but 'search' does not get ta ...
- 那些年一起踩过的坑 — Date类型序列化的问题
坑在哪里? 序列化 和 反序列化 的时候对Date字段的格式设置不一致 例如:将Java bean序列化成Json string的时候 格式为 yyyy-MM-dd 解 ...
- ruby 资料整理
http://blog.csdn.net/maingalaxy/article/details/46013393 http://blog.csdn.net/dzl84394/article/detai ...
- 17个Web前端开发工程师必看的国外网站
Web设计是一个不断变化的领域,因此掌握最新的发展趋势及技术动向对设计师来说非常重要,无论是学习新技术,还是寻找免费资源与工具,设计博客都是很不错的去处. 1. Smashing Magazine S ...
- cocos2d-x编译到android平台后,增加返回键和菜单键支持
在头文件中增加函数 virtual void keyBackClicked();//android返回键 virtual void keyMenuClicked();//android菜单键 在ini ...
- 【解决】国内访问github过慢
github在国内慢的有点不能忍了,受不了了google了一下有什么方法没,还真找到一些方法. 死马当活马医,操作完之后确实速度上快了一些,但是毕竟国情所限,仍然做不到“秒开”. 主要是参考两篇博客: ...
- 流(stream)
流的概念 Java程序通过流来完成输入/输出.流是生产或消费信息的抽象.流通过Java的输入/输出系统与物理设备链接.尽管与它们链接的物理设备不尽相同,所有流的行为具有同样的方式.这样,相同的输入/输 ...
- VisualStudio2010中创建ASP.Net WebService
相关资料:http://blog.csdn.net/yapingxin/article/details/7331375 具体操作:1.打开“Microsoft Visual Studio 2010”- ...