import java.lang.reflect.Field
import java.util.Arrays
import static java.lang.System.out
enum Tweedle { DEE, DUM }
public class Book {
public long chapters = 0
public String[] characters = { "Alice", "White Rabbit" }
public Tweedle twin = Tweedle.DEE
public static void main(String... args) {
Book book = new Book()
String fmt = "%6S: %-12s = %s%n"
try {
Class<?>c = book.getClass()
Field chap = c.getDeclaredField("chapters")
out.format(fmt, "before", "chapters", book.chapters)
chap.setLong(book, 12)
out.format(fmt, "after", "chapters", chap.getLong(book))
Field chars = c.getDeclaredField("characters")
out.format(fmt, "before", "characters",
Arrays.asList(book.characters))
String[] newChars = { "Queen", "King" }
chars.set(book, newChars)
out.format(fmt, "after", "characters",
Arrays.asList(book.characters))
Field t = c.getDeclaredField("twin")
out.format(fmt, "before", "twin", book.twin)
t.set(book, Tweedle.DUM)
out.format(fmt, "after", "twin", t.get(book))
// production code should handle these exceptions more gracefully
} catch (NoSuchFieldException x) {
x.printStackTrace()
} catch (IllegalAccessException x) {
x.printStackTrace()
}
}
}
输出:
BEFORE: chapters = 0
AFTER: chapters = 12
BEFORE: characters = [Alice, White Rabbit]
AFTER: characters = [Queen, King]
BEFORE: twin = DEE
AFTER: twin = DUM
如果对你有帮助的话,请采纳一下。如果有任何问题,都可以联系我!
JAVA中反射是动态获取信息以及动态调用对象方法的一种反射机制。
Java反射就是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;并且能改变它的属性。而这也是Java被视为动态语言的一个关键性质。
Java反射的功能是在运行时判断任意一个对象所属的类,在运行时构造任意一个类的对象,在运行时判断任意一个类所具有的成员变量和方法,在运行时调用任意一个对象的方法,生成动态代理。
扩展资料:
JAVA中反射实例:
1、Class superClass=clazz.getSuperclass()//获取父类。
System.out.println("getSuperclass:"+superClass)。
2、Class[] interfaces=clazz.getInterfaces()//获取实现接口。
System.out.println("getInterfaces:"+interfaces.length)。
3、Constructor[] cons=clazz.getConstructors()//构造方法。
System.out.println("getConstructors:"+cons.length)。
参考资料来源:百度百科: JAVA反射机制