不积跬步,无以至千里;不积小流,无以成江海。
Java语言基础
Java反射
先看一下正向的操作,对这个类进行实例化,再使用这个类对象进行操作。
public class Apple { private int price; public int highprice; int lowprice; String name; public int getprice() { return price; } public void setprice(int price) { this.price = price; } public void sell(){ System.out.println("All apples are selling!"); } private void buy() { System.out.println("Buy apples!"); } public static void main(String[] args) throws Exception { //正常调用 Apple apple = new Apple(); apple.setprice(5); System.out.println("apple's price is: " + apple.getprice()); } }
使用反射机制,先要获取到该类的字节码文件对象(.class)
获取字节码文件对象的三种方式。
Class cls = Class.forName("Testfather.Apple"); Class cls = Apple.class; Class cls = apple.getClass();
1. 通过Class类中的静态方法forName,直接获取到一个类的字节码文件对象,此时该类还是源文件阶段,并没有变为字节码文件。
Class cls = Class.forName("Testfather.Apple");
2. 当类被加载成.class文件时,此时Person类变成了.class,在获取该字节码文件对象,也就是获取自己, 该类处于字节码阶段。
Class cls = Apple.class;
3. 通过类的实例获取该类的字节码文件对象,该类处于创建对象阶段。
Class cls = apple.getClass();