本文主要向大家介绍了java语言实现反射机制附代码,通过具体的内容向大家展示,希望对大家学习java语言有所帮助。
1.什么是java反射
java反射是一种能够在项目运行时,知道任意一个类的属性方法并能够调用他们。
2.反射的优缺点
优点:反射机制可以实现动态创建对象和编译
缺点:性能影响,使用反射基本是一种解释操作,解释操作慢于直接执行
3.java中获取class对象的四种方法
Ⅰ、通过class类静态方法 forname
class c = class.forName(“name”);
Ⅱ、通过object类的getClass方法
String a = “123”;
Class c = a.getClass();
Ⅲ、如果T是 一个已定义类型的话,在java中可以通过 .class获取
Student s = new Student();
class c = s.class;
class d = int.class;
Ⅳ、运用primitive wrapper classes的TYPE语法
Class c = Integer.TYPE;
Class d = Double.TYPE;
4.demo(如下)
student 类
import java.util.Date;
public class Student {
private String studentID;
public String studentName;
private Date birthday;
private int score;
public String getStudentID() {
return studentID;
}
public void setStudentID(String studentID) {
this.studentID = studentID;
}
public String getStudentName() {
return studentName;
}
public void setStudentName(String studentName) {
this.studentName = studentName;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
public void finishTask(String taskName) {
System.out.println(studentName + “完成了” + taskName + “作业”);
}
}
ReflectStudentTest1测试类
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
public class ReflectStudentTest1 {
public static void main(String[] args) {
try {
// 获取Student的Class对象
//Class clazz = Class.forName(“com.hdw.Student”);
//Class clazz = Student.class;
Class clazz = new Student().getClass();
// 获取该类中所有的属性
Field[] fields = clazz.getDeclaredFields();
// 遍历所有的属性
for (Field field : fields) {
// 打印属性信息,包括访问控制修饰符,类型及属性名
System.out.println(field);
System.out.println(“修饰符:” + Modifier.toString(field.getModifiers()));
System.out.println(“类型:” + field.getType());
System.out.println(“属性名:” + field.getName());
}
// 获取该类中的所有方法
Method[] methods = clazz.getDeclaredMethods();
for (Method method : methods) {
// 打印方法签名
System.out.println(method);
System.out.println(“修饰符:”
+ Modifier.toString(method.getModifiers()));
System.out.println(“方法名:” + method.getName());
System.out.println(“返回类型:” + method.getReturnType());
// 获取方法的参数对象
Class[] clazzes = method.getParameterTypes();
for (Class class1 : clazzes) {
System.out.println(“参数类型:” + class1);
}
}
// 通过Class对象创建实例
Student student = (Student) clazz.newInstance();
// 获取属性名为studentName的字段(Field)对象,以便下边重新设置它的值
Field studentName = clazz.getField(“studentName”);
// 设置studentName的值为”张三“
studentName.set(student, “张三”);
// 通过Class对象获取名为”finishTask“,参数类型为String的方法(Method)对象
Method finishTask = clazz.getMethod(“finishTask”, String.class);
// 调用finishTask方法
finishTask.invoke(student, “数学”);
}
catch (Exception e) {
e.printStackTrace();
}
}
}
有什么问题可以直接call我!
本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言JAVA频道!