原文网址:Java反射系列--应用_IT利刃出鞘的博客-CSDN博客
简介
本文用示例介绍Java反射的应用。
调用类的方法
package org.example.a;
import java.lang.reflect.Method;
class Human {
private String name;
private Integer age;
public Human() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public void sayCategory() {
System.out.println("HUMAN");
}
public String sayHello(String name, Integer age) {
return "名字:" + name + " " + "年龄:" + age;
}
}
public class Demo {
public static void main(String[] args) {
Class<?> c = null;
try {
c = Class.forName("org.example.a.Human");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
try {
Method method = c.getMethod("sayHello", String.class, Integer.class);
System.out.println(method.invoke(c.newInstance(), "Tony", 20));
} catch (Exception e) {
e.printStackTrace();
}
}
}
执行结果
名字:Tony 年龄:20
修改属性
package com.example.a;
import java.lang.reflect.Field;
public class Demo {
public static void main(String[] args) {
User user = new User();
try {
Class<? extends User> aClass = user.getClass();
Field nameField = aClass.getDeclaredField("name");
nameField.setAccessible(true); //将name属性设置成可被外部访问
nameField.set(user, "Tony"); //设置name属性内容
System.out.println(user.getName());
// 也可以这么写:
// System.out.println(nameField.get(user));
nameField.setAccessible(false); //将name属性设置成不可被外部访问
} catch (Exception e) {
e.printStackTrace();
}
}
}
class User {
private String name;
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public void sayCategory() {
System.out.println("HUMAN");
}
public String sayHello(String name, Integer age) {
return "名字:" + name + " " + "年龄:" + age;
}
}
执行结果
Tony
上边是文章的部分内容,为便于维护,全文已转移到此网址:Java反射系列-应用 - 自学精灵