java反射技术常用操作
2013-01-10 14:11
531 查看
package com.saly.bean;
public class Person {
private String name;
private int age;
public Person() {
super();
}
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
public static void show(){
System.out.println("person static show run");
}
public void function(String a,int b){
System.out.println("person param function"+"a="+a+"b="+b);
}
private void privateShow(){
System.out.println("private show run");
}
@Override
public String toString() {
return "Person [age=" + age + ", name=" + name + "]";
}
}
package com.saly.test;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
/**
* 反射机制是再运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象,
* 都能够调用它的任意一个方法和属性,这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
* @author saly
*
*/
public class Reflect {
public static void main(String[] args) throws Exception {
String className = "com.saly.bean.Person";
Class<?> clazz = Class.forName(className);
//accessStaticMethed(args, clazz);
accessParamMethed(clazz);
}
/**
* 访问带参数的方法
* @param clazz
* @throws NoSuchMethodException
* @throws InstantiationException
* @throws IllegalAccessException
* @throws InvocationTargetException
*/
private static void accessParamMethed(Class<?> clazz)
throws NoSuchMethodException, InstantiationException,
IllegalAccessException, InvocationTargetException {
Method method = clazz.getMethod("function",String.class,int.class);
//创建实例对象
Object obj = clazz.newInstance();
method.invoke(obj,"salyfan",25);
}
/**
* 访问静态方法
* 不需要创建对象
* @param args
* @param clazz
* @return
* @throws NoSuchMethodException
* @throws IllegalAccessException
* @throws InvocationTargetException
*/
private static void accessStaticMethed(String[] args, Class<?> clazz)
throws NoSuchMethodException, IllegalAccessException,
InvocationTargetException {
Method method = clazz.getMethod("show", null);
method.invoke(null, null);
}
/**
* 反射技术(访问空参数的函数)
* 需要创建对象
* @param args
* @param clazz
* @throws NoSuchMethodException
* @throws InstantiationException
* @throws IllegalAccessException
* @throws InvocationTargetException
*/
private static void accessMethed(String[] args, Class<?> clazz)
throws NoSuchMethodException, InstantiationException,
IllegalAccessException, InvocationTargetException {
//获取所有公有方法(包括继承父类的)
Method[] meth = clazz.getMethods();
for(Method m:meth){
//System.out.println(m);
}
System.out.println("................................");
//获取所有声明的方法(包括私有,但不包括继承父类的)
Method[] methods = clazz.getDeclaredMethods();
for(Method m:methods){
//System.out.println(m);
}
Method method = clazz.getMethod("toString", null);
//创建实例对象
Object obj = clazz.newInstance();
Object returnValue = method.invoke(obj, args);
System.out.println(returnValue);
}
/**
* 访问字段
* @param clazz
* @throws NoSuchFieldException
* @throws InstantiationException
* @throws IllegalAccessException
*/
private static void accessField(Class<?> clazz)
throws NoSuchFieldException, InstantiationException,
IllegalAccessException {
//获取该类的名称为age的字段()
Field ageField = clazz.getDeclaredField("age");
System.out.println(ageField);
//创建实例对象
Object obj = clazz.newInstance();
//访问私有对象
//对该私有字段进行取消权限检查的能力
ageField.setAccessible(true);//暴力访问
ageField.set(obj, 25);
Object o = ageField.get(obj);
System.out.println(o);
}
}
public class Person {
private String name;
private int age;
public Person() {
super();
}
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
public static void show(){
System.out.println("person static show run");
}
public void function(String a,int b){
System.out.println("person param function"+"a="+a+"b="+b);
}
private void privateShow(){
System.out.println("private show run");
}
@Override
public String toString() {
return "Person [age=" + age + ", name=" + name + "]";
}
}
package com.saly.test;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
/**
* 反射机制是再运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象,
* 都能够调用它的任意一个方法和属性,这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
* @author saly
*
*/
public class Reflect {
public static void main(String[] args) throws Exception {
String className = "com.saly.bean.Person";
Class<?> clazz = Class.forName(className);
//accessStaticMethed(args, clazz);
accessParamMethed(clazz);
}
/**
* 访问带参数的方法
* @param clazz
* @throws NoSuchMethodException
* @throws InstantiationException
* @throws IllegalAccessException
* @throws InvocationTargetException
*/
private static void accessParamMethed(Class<?> clazz)
throws NoSuchMethodException, InstantiationException,
IllegalAccessException, InvocationTargetException {
Method method = clazz.getMethod("function",String.class,int.class);
//创建实例对象
Object obj = clazz.newInstance();
method.invoke(obj,"salyfan",25);
}
/**
* 访问静态方法
* 不需要创建对象
* @param args
* @param clazz
* @return
* @throws NoSuchMethodException
* @throws IllegalAccessException
* @throws InvocationTargetException
*/
private static void accessStaticMethed(String[] args, Class<?> clazz)
throws NoSuchMethodException, IllegalAccessException,
InvocationTargetException {
Method method = clazz.getMethod("show", null);
method.invoke(null, null);
}
/**
* 反射技术(访问空参数的函数)
* 需要创建对象
* @param args
* @param clazz
* @throws NoSuchMethodException
* @throws InstantiationException
* @throws IllegalAccessException
* @throws InvocationTargetException
*/
private static void accessMethed(String[] args, Class<?> clazz)
throws NoSuchMethodException, InstantiationException,
IllegalAccessException, InvocationTargetException {
//获取所有公有方法(包括继承父类的)
Method[] meth = clazz.getMethods();
for(Method m:meth){
//System.out.println(m);
}
System.out.println("................................");
//获取所有声明的方法(包括私有,但不包括继承父类的)
Method[] methods = clazz.getDeclaredMethods();
for(Method m:methods){
//System.out.println(m);
}
Method method = clazz.getMethod("toString", null);
//创建实例对象
Object obj = clazz.newInstance();
Object returnValue = method.invoke(obj, args);
System.out.println(returnValue);
}
/**
* 访问字段
* @param clazz
* @throws NoSuchFieldException
* @throws InstantiationException
* @throws IllegalAccessException
*/
private static void accessField(Class<?> clazz)
throws NoSuchFieldException, InstantiationException,
IllegalAccessException {
//获取该类的名称为age的字段()
Field ageField = clazz.getDeclaredField("age");
System.out.println(ageField);
//创建实例对象
Object obj = clazz.newInstance();
//访问私有对象
//对该私有字段进行取消权限检查的能力
ageField.setAccessible(true);//暴力访问
ageField.set(obj, 25);
Object o = ageField.get(obj);
System.out.println(o);
}
}
相关文章推荐
- .Net反射技术应用—与Java互操作
- java反射常用操作
- java常用类库续2(大数操作BigInteger、BigDecimal类、对象克隆技术、Arrays类)
- 浅谈Java反射(Reflect)技术--常用方法
- Java300StudyNote(2)反射-常用泛型操作(参数泛型、返回值泛型)
- C#反射技术的简单操作(读取和设置类的属性)
- [原创]JAVA反射技术(二)
- java操作数据库常用例子
- Java基础加强之框架的概念及反射技术的开发框架的原理
- java集合常用操作
- Java -- 利用反射 操作任意数组,包括对象数组 和 基本数据类型的数组
- java 字符串常用操作
- java中关于时间日期操作的常用函数
- JAVA对数字证书的常用操作
- java中反射操作构造方法
- 分布式锁2 Java非常用技术方案探讨之ZooKeeper
- Java API 与Hbase集群交互常用操作总结
- Java中的反射与内省技术内幕
- java的反射技术
- java中dao层的通用层,通过反射机制,操作数据库的增删改,适用的范围是不包含属性类