public class ReflectPhone2 { public static void main(String[] args) throws Exception { //獲取字節碼文件 Class<?> rName = Class.forName(全限定類名); /** * 獲取構造方法 * */ //獲取___所有public的構造方法, //如果還要獲取所有的構造方法用getDeclaredConstructors()方法 Constructor<?>[] constructors = rName.getConstructors(); //獲取___指定的構造方法,這獲取的是無參構造方法, //要獲取有參的請在行參列表上寫上(數據類型.class,數據類型.class); Constructor<?> constructor = rName.getConstructor(); //調用___無參構造方法 Object newInstance = constructor.newInstance(); /** * 獲取方法 * */ //獲取___類中所有的public修飾的方法,其中包括父類的方法。 //如果還要獲取所有的方法用getDeclaredMethods()方法 Method[] methods = rName.getMethods(); //獲取___指定的方法,這獲取的是無參方法, //要獲取有參的請在行參列表上寫上(指定的方法名,數據類型1.class,數據類型2.class); Method method = rName.getMethod(方法名); //調用___非static修飾的方法需要invoke(對象,實參1,實參2), //有static修飾的方法需要invoke(null,實參1,實參2)。 //我這調用的非static修飾方法沒有參數就只需一個對象 method.invoke(newInstance); /** * 獲取字段 * */ //獲取___類中的public字段。如果還要獲取所有的字段用getDeclaredFields()方法 Field[] fields = rName.getFields(); //獲取___指定的字段。 Field field = rName.getDeclaredField(指定的字段名); //設置___指定的字段,非static修飾,set(對象,值);有static修飾,set(null,值) field.set(newInstance,5.2); //調用___指定字段的值,非static修飾,get(對象);有static修飾,get(null) Object object = field.get(newInstance); System.out.println("指定字段的值=="+object); /** * 破壞包裝declaredField.setAccessible(boolean)破壞封裝,可以調用私有成員 * true:破環 * false:默認值,不破壞 */ Field field2 = rName.getDeclaredField(私有化的字段名); //破壞封裝,不讓字段私有化 field2.setAccessible(true); //設置字段的值 field2.set(newInstance,值); //調用設置后的字段值,並打印 Object object2 = field2.get(newInstance); System.out.println("破壞封裝==="+object2); //獲取全限定類名 String name = rName.getName(); System.out.println("全限定類名: "+name); //獲取類名簡寫 String simpleName = rName.getSimpleName(); System.out.println("類名簡寫: "+simpleName); } }