java 实现反射_java语言实现反射机制附代码

  • Post author:
  • Post category:java


本文主要向大家介绍了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频道!



版权声明:本文为weixin_28676289原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。