反射能够在代码运行时,动静的获取对象、调用办法、设置属性。动静操作,升高代码偶合性,进步灵便度。其 JDBC
库就是通过反射加载。
实例操作
以操作 User
对象为例:
/*
* File:User.java
* User:iChochy
* URL:https://ichochy.com
* Copyright (c) 2020
* Date:2020/08/31 10:18:31
*/
package com.ichochy.example;
public class User {
private String name =”iChochy“;
private int age = 32;
private String url =”https://ichochy.com“;
public void display(){System.out.println(”Name:“+name);
System.out.println(”Age:“+age);
System.out.println(”URL:“+url);
}
}
失常调用
User user = new User();
user.display();
获取对象
类动静获取
// 获取类
Class<?> clazz = User.class;
// 获取对象
Object obj = clazz.newInstance();
类门路获取
// 获取类
Class<?> clazz = Class.forName(”com.ichochy.example.User“);
// 获取对象
Object obj = clazz.newInstance();
获取属性
获取全副
Field[] fields = clazz.getDeclaredFields();
for (Field field: fields) {System.out.println(field.getName());//name、age、url
}
属性名获取
Field field = clazz.getDeclaredField(”age“);
System.out.println(field.getName());//age
设置属性
Object obj = clazz.newInstance();
Field field= clazz.getDeclaredField(”age“);// 获取私用属性
field.setAccessible(true);// 设置反射拜访权限查看
System.out.println(field.get(obj)); //32
field.set(obj,18);// 设置属性
System.out.println(field.get(obj));//18
获取办法
获取全副
Method[] methods = clazz.getMethods();
for(Method method:methods){System.out.println(method.getName()); //display
}
办法名获取
Method method = clazz.getMethod(”display“);
System.out.println(method.getName()); //display
调用办法
Object obj = clazz.newInstance();
Method[] methods = clazz.getMethods();
for(Method method:methods){
// 调用 display 办法
if(”display“.equals(method.getName())){method.invoke(obj);
}
}
办法名调用
Object obj = clazz.newInstance();
Method method = clazz.getMethod(”display“);
method.invoke(obj);
相干文章
-
Java 中的重写 (Override) 与重载(Overload) 2020/08/20
-
收费申请 JetBrains 开源开发许可证,蕴含 IDEA 2020/08/19
-
Java 开发环境的搭建,开启你的编程之旅 2020/08/15
源文:https://ichochy.com/posts/20200823.html
请帮忙点 赞、转发!