欢迎访问宙启技术站
智能推送

Java反射函数的作用及示例演示

发布时间:2023-06-25 15:11:42

Java反射是Java专门提供的一种机制,用于在程序运行时动态地(也称为运行时)访问、检测和修改类、接口、方法以及属性等相关信息。Java反射机制可以帮助Java程序在运行时解析和使用编译期间无法获取的类和接口的信息,并进行新增、修改、删除等操作。本文将介绍Java反射函数的作用,以及详细演示Java反射相关函数的使用方法和具体实现。

一、Java反射函数的作用

Java反射机制为Java程序员提供了一种灵活而强大的方式来访问和操作Java类、方法和属性等,它主要包含以下几个作用:

1. 动态地创建对象:Java反射提供了创建对象的方法,可以在运行时动态地创建Java对象。

2. 动态地获取类对象:Java反射提供了获取类对象的方法,可以在程序运行时动态地获取类信息。

3. 动态地获取类的属性信息:Java反射提供了获取类属性的方法,可以在程序运行时动态地获取类的属性信息。

4. 动态地获取类的方法信息:Java反射提供了获取类方法信息的方法,可以在程序运行时动态地获取类的方法信息。

5. 动态地调用对象方法:Java反射提供了调用对象方法的方法,可以动态地调用对象的方法。

6. 动态地修改类属性:Java反射提供了修改类属性的方法,可以动态地修改类属性的值。

以上就是Java反射函数的主要作用。下面我们将详细演示Java反射函数的使用方法和具体实现。

二、Java反射函数的示例演示

1. 动态地获取类名和对象名

获取类名:

Class<?> cls = Class.forName("java.lang.String"); // 获取类类型
String className = cls.getName(); // 获取类名
System.out.println(className); // 输出java.lang.String

获取对象名:

String str = new String("Hello World");
Class<?> cls = String.class; // 获取类类型
Constructor<?> cons = cls.getConstructor(String.class); // 获取构造方法对象
Object obj = cons.newInstance(str); // 通过构造方法对象创建实例
System.out.println(obj.toString()); // 输出Hello World

2. 动态地获取类属性

public class Person {
    private String name;
    private int age;
    public String gender;
    public long phone;
}

public static void main(String[] args) throws Exception {
    Class<?> cls = Person.class; // 获取类类型
    Field[] fields = cls.getDeclaredFields(); // 获取类属性
    for (Field field : fields) {
        System.out.println(field.getName()); // 输出属性名
        System.out.println(field.getType()); // 输出属性类型
    }
}

输出结果:

name
class java.lang.String
age
int
gender
class java.lang.String
phone
long

3. 动态获取类方法

public class Person {
    private String name;
    private int age;
    public String gender;
    public long phone;
    public void sayHello(String message) {
        System.out.println("Hello " + message);
    }
    private void sayHi(String message) {
        System.out.println("Hi " + message);
    }
    public static void sayBye(String message) {
        System.out.println("Bye " + message);
    }
}

public static void main(String[] args) throws Exception {
    Class<?> cls = Person.class; // 获取类类型
    Method[] methods = cls.getDeclaredMethods(); // 获取类方法
    for (Method method : methods) {
        System.out.println(method.getName()); // 输出方法名
        System.out.println(method.getReturnType()); // 输出方法返回值类型
    }
}

输出结果:

sayHello
void
sayHi
void
sayBye
void

4. 动态调用对象方法

public class Person {
    public void sayHello(String message) {
        System.out.println("Hello " + message);
    }
}

public static void main(String[] args) throws Exception {
    Class<?> cls = Person.class; // 获取类类型
    Constructor<?> cons = cls.getConstructor(); // 获取构造方法对象
    Object obj = cons.newInstance(); // 通过构造方法对象创建实例
    Method method = cls.getDeclaredMethod("sayHello", String.class); // 获取方法对象
    method.invoke(obj, "Java Reflection"); // 调用方法
}

输出结果:

Hello Java Reflection

5. 动态修改类属性

public class Person {
    public String name;
    public int age;
}

public static void main(String[] args) throws Exception {
    Person person = new Person();
    Class<?> cls = person.getClass(); // 获取类类型
    Field nameField = cls.getField("name"); // 获取属性对象
    Field ageField = cls.getField("age");
    nameField.set(person, "Java Reflection"); // 修改属性值
    ageField.set(person, 18);
    System.out.println(person.name); // 输出属性值
    System.out.println(person.age);
}

输出结果:

Java Reflection
18

以上就是Java反射函数的使用方法及示例演示。Java反射机制为我们提供了一种非常方便和灵活的方式来访问和操作Java类、方法和属性等,可以帮助我们更好地实现Java程序的动态特性。