java最简单反射实例_java中的反射简单实例

importjava.lang.reflect.Field;importjava.lang.reflect.InvocationTargetException;importjava.lang.reflect.Method;importjava.lang.reflect.Modifier;importclub.reflection.entity.User.User;/*** 反射实例 通过反射获取实体类中的属性方法

*@authorMr储

**/

public classRefDemo {public static voidmain(String[] args) {try{//获得Class对象()方法一通过Class静态方法forNmae();

Class cls1 = Class.forName("club.reflection.entity.User.User");//通过class属性

Class cls2 = User.class;//对象中通过Object类的getClass();

Class cls3 = (newUser()).getClass();

System.out.println(String.class);//通过Class的newInstance()获得对象的实例返回Object类型

Object obj =cls3.newInstance();//强制转换为User类型

User user =(User)obj;//System.out.println(cls3.getName());//club.reflection.instance.User获得类的完整名字//System.out.println(cls3.getConstructors());//获得构造方法

for(Field f : cls1.getDeclaredFields()){

System.out.println(f);

}

System.out.println("++++++++++");for(Field f : cls1.getFields()){

System.out.println(f);

}/*//初始化一个User对象

User u1 = new User("张三",18,"男");

//获取属性

u1.show();

showField(u1);

u1.show();//属性赋值后的比较

//获取方法

showMethods(u1);*/}catch(ClassNotFoundException e) {

e.printStackTrace();

}catch(InstantiationException e) {

e.printStackTrace();

}catch(IllegalAccessException e) {

e.printStackTrace();

}

}/*** 获得类的属性*/

public static voidshowField(Object obj){try{//将obj转化为Class对象

Class cls =obj.getClass();

Field[] fields= cls.getDeclaredFields();//获得所有的属性

for(Field field : fields){

System.out.println(field.getName()+"\t"+field.getType().getName());//获取属性名和类型//改变访问权限(使可以赋值)

field.setAccessible(true);//给类中的属性赋值

if(field.getType().getName().equals("java.lang.String")){

field.set(obj,"名字");

}else if(field.getType().getName().equals("java.lang.Integer")){

field.set(obj,222);

}

}

}catch(SecurityException e) {

e.printStackTrace();

}catch(IllegalArgumentException e) {

e.printStackTrace();

}catch(IllegalAccessException e) {

e.printStackTrace();

}

}/*** 获取方法*/

public static voidshowMethods(Object obj){

Class cls=obj.getClass();

Method[] methods= cls.getDeclaredMethods();//获取所有方法

for(Method m : methods){

System.out.println("方法:"+m);

System.out.println("方法名称:"+m.getName());

System.out.println("访问修饰符:"+Modifier.toString(m.getModifiers()));

System.out.println("返回值类型:"+m.getReturnType());//获得参类型

Class[] ClassParameters =m.getParameterTypes();for(Class c : ClassParameters){

System.out.println("参数类型:"+c.getName());

}

}try{//获得对象的方法

Method show1 = cls.getMethod("show");//执行方法

show1.invoke(obj);//获得对象的方法

/*** "show"要执行的方法名

* String.calss 方法参数的参数类型*/Method show2= cls.getMethod("show",String.class);//执行方法

show2.invoke(obj, "反射调用传参");

}catch(NoSuchMethodException e) {

e.printStackTrace();

}catch(SecurityException e) {

e.printStackTrace();

}catch(IllegalAccessException e) {

e.printStackTrace();

}catch(IllegalArgumentException e) {

e.printStackTrace();

}catch(InvocationTargetException e) {

e.printStackTrace();

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java反射机制是在运行时动态地获取类的信息,包括类名、方法名、属性等,并且可以在运行时调用对象的方法和访问对象的属性。下面是一个简单Java反射机制的实例: 假设我们有一个Person类,其包含以下属性和方法: ```java public class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public void sayHello() { System.out.println("Hello, my name is " + name + ", and I am " + age + " years old."); } } ``` 现在我们可以使用反射机制来获取Person类的信息并创建它的实例: ```java import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; public class ReflectionExample { public static void main(String[] args) throws Exception { // 获取Person类的Class对象 Class<Person> personClass = Person.class; // 获取Person类的构造函数 Constructor<Person> constructor = personClass.getConstructor(String.class, int.class); // 创建Person类的实例 Person person = constructor.newInstance("John", 30); // 获取Person类的name属性 Field nameField = personClass.getDeclaredField("name"); nameField.setAccessible(true); // 修改Person类的name属性 nameField.set(person, "Tom"); // 调用Person类的sayHello方法 Method sayHelloMethod = personClass.getDeclaredMethod("sayHello"); sayHelloMethod.invoke(person); } } ``` 在这个例子,我们首先使用`Person.class`获取Person类的Class对象,然后使用`getConstructor`方法获取构造函数,使用`newInstance`方法创建Person类的实例。 接下来,我们使用`getDeclaredField`方法获取Person类的name属性,并使用`setAccessible`方法设置该属性可访问。然后,我们使用`set`方法修改该属性的值。 最后,我们使用`getDeclaredMethod`方法获取Person类的sayHello方法,并使用`invoke`方法调用该方法。 这个例子只是反射机制的一个简单示例,反射机制还可以应用于许多其他方面,例如动态代理、注解处理等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值