java 反射机制
2015-08-12 10:04
453 查看
java反射机制就是在运行状态中动态的知道任意一个类的属性和方法,对于任意一个对象能调用它的方法。
这个机制具有的功能有:
能构造任意一个类的对象并且相应的能判断任意一个对象所属的类
能得出任意一个类中的属性和方法
能调用任意一个对象中的方法
动态代理的组成部分
例子:
1.判断对象是否属于反射的类
public class test {
public static void main(String args[]) throws ClassNotFoundException {
Class c = Class.forName("test");
System.out.println(c.isInstance(new String()));
System.out.println(c.isInstance(new test()));
}
}
这就是有一个test类,然后用创建一个test类对象,new一个string和一个test分别去对比,输出为false和true
2.获取任意一个类的所有属性
public class test {
private String name ;
private long password;
public static void main(String args[]) throws Exception {
Class c = Class.forName("test");
getProperty(c);
}
public static Field[] getProperty(Class c) throws Exception {
//获取该类所有属性字段
//Field[] fields = c.getFields();//只获取public访问权限的属性字段(包括父类的)
Field[] fields = c.getDeclaredFields();//只获取该类的所有访问权限的属性(不含父类)
for(int i=0;i<fields.length;i++){
System.out.println("属性:"+fields[i]);
}
return fields;
}
}
输出结果:
属性:private java.lang.String test.name
属性:private long test.password
3.获得对象的特定public属性的值
public static Object getProperty(Object owner,String fieldName) throws Exception {
//得到对象所属类
Class ownerClass = owner.getClass();
//获取该类的某个属性
Field field = ownerClass.getField(fieldName);
//获取某个对象的特定属性
Object property = field.get(owner);
//输出该属性信息
System.out.println(fieldName+"的属性值:"+property.toString());
return property;
}
4.获得对象中的方法,执行对象中的方法
public Method[] getMethods(Class c) throws Exception {
//获取该类所有方法
//Field[] fields = ownerClass.getMethods();//只获取public访问权限的方法(包括父类的)
Method[] methods = c.getDeclaredMethods();//只获取该类的所有访问权限的方法(不含父类)
//输出所有方法
for(int i=0;i<methods.length;i++){
System.out.println("方法:" +methods[i]);
}
return methods;
}
public Object invokeMethod(Object owner,String methodName,Object[] args) throws Exception {
//得到对象所属类
Class ownerClass = owner.getClass();
//获取该类的某个方法
Method method = ownerClass.getMethod(methodName, null);
//执行某个对象的方法
Object result = method.invoke(owner, args);
//输出结果信息
System.out.println("结果返回值:"+ result);
return result;
}
这个机制具有的功能有:
能构造任意一个类的对象并且相应的能判断任意一个对象所属的类
能得出任意一个类中的属性和方法
能调用任意一个对象中的方法
动态代理的组成部分
例子:
1.判断对象是否属于反射的类
public class test {
public static void main(String args[]) throws ClassNotFoundException {
Class c = Class.forName("test");
System.out.println(c.isInstance(new String()));
System.out.println(c.isInstance(new test()));
}
}
这就是有一个test类,然后用创建一个test类对象,new一个string和一个test分别去对比,输出为false和true
2.获取任意一个类的所有属性
public class test {
private String name ;
private long password;
public static void main(String args[]) throws Exception {
Class c = Class.forName("test");
getProperty(c);
}
public static Field[] getProperty(Class c) throws Exception {
//获取该类所有属性字段
//Field[] fields = c.getFields();//只获取public访问权限的属性字段(包括父类的)
Field[] fields = c.getDeclaredFields();//只获取该类的所有访问权限的属性(不含父类)
for(int i=0;i<fields.length;i++){
System.out.println("属性:"+fields[i]);
}
return fields;
}
}
输出结果:
属性:private java.lang.String test.name
属性:private long test.password
3.获得对象的特定public属性的值
public static Object getProperty(Object owner,String fieldName) throws Exception {
//得到对象所属类
Class ownerClass = owner.getClass();
//获取该类的某个属性
Field field = ownerClass.getField(fieldName);
//获取某个对象的特定属性
Object property = field.get(owner);
//输出该属性信息
System.out.println(fieldName+"的属性值:"+property.toString());
return property;
}
4.获得对象中的方法,执行对象中的方法
public Method[] getMethods(Class c) throws Exception {
//获取该类所有方法
//Field[] fields = ownerClass.getMethods();//只获取public访问权限的方法(包括父类的)
Method[] methods = c.getDeclaredMethods();//只获取该类的所有访问权限的方法(不含父类)
//输出所有方法
for(int i=0;i<methods.length;i++){
System.out.println("方法:" +methods[i]);
}
return methods;
}
public Object invokeMethod(Object owner,String methodName,Object[] args) throws Exception {
//得到对象所属类
Class ownerClass = owner.getClass();
//获取该类的某个方法
Method method = ownerClass.getMethod(methodName, null);
//执行某个对象的方法
Object result = method.invoke(owner, args);
//输出结果信息
System.out.println("结果返回值:"+ result);
return result;
}
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树
- [原创]java局域网聊天系统