Java反射函数的作用及示例演示
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程序的动态特性。
