(JAVA)反射
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;/*** @author Alina* @date 2021年12月30日 10:47 下午* JAVA 反射機制是在運行狀態(tài)中,對于任意一個類,都能夠知道這個類的所有屬性和方法;對于任意一個對象,* 都能夠調(diào)用它的任意一個方法和屬性;這種動態(tài)獲取的信息以及動態(tài)調(diào)用對象的方法的功能稱為java 語言的反射機制。* 獲取字節(jié)碼文件的三種方式* 1.new 對象后 使用getClass獲取* 2.使用靜態(tài)屬性class 獲取* 3.Class類的靜態(tài)方法 forName()* 4.獲取所有公共構(gòu)造方法* 5.獲取一個空參構(gòu)造器* 6.獲取有參構(gòu)造器* 7.獲取有參構(gòu)造器簡便方式:類中必有空參的public 權(quán)限的 class類中有newInstance()* 8.獲取一個帶有參數(shù)的私有構(gòu)造器,并運行* 9.獲取成員變量 從類中的class文件中獲取成員變量 Field getFields()* 10.獲取成員方法 Method getMethod 運行獲取到的方法 invoke*/
public class ReflectDemo {public static void main(String[] args)throws Exception {// method_2();method_10();}public static void method_10()throws Exception{Class clazz10 = Class.forName("People");Object obj = clazz10.newInstance();
// Method[] methods = clazz10.getMethods();
// for(Method m :methods){
// System.out.println(m);
// }Method method = clazz10.getMethod("show"); // 獲取空參方法method.invoke(obj);Method method1 = clazz10.getMethod("show",int.class,double.class);method1.invoke(obj,10,12.34);}public static void method_9 () throws Exception{Class clazz9 = Class.forName("People");Object obj = clazz9.newInstance();
// Field[] fields = clazz9.getFields(); //獲取所有共有權(quán)限的成員變量 獲取私有的加Declared
// for (Field f : fields){
// System.out.println(f);
// }Field filed = clazz9.getField("sex");filed.set(obj,"女");System.out.println(obj);}public static void method_8 ()throws Exception {Class clazz8 = Class.forName("People");Constructor con = clazz8.getDeclaredConstructor(String.class);System.out.println(con);//父類方法con.setAccessible(true);Object obj = con.newInstance("李四");System.out.println(obj);}public static void method_7 ()throws Exception {Class clazz7 = Class.forName("People");System.out.println(clazz7.newInstance());}public static void method_6 ()throws Exception {Class clazz6 = Class.forName("People");Constructor con = clazz6.getConstructor(String.class,int.class);Object obj = con.newInstance("張三",20);System.out.println(obj);}public static void method_5 ()throws Exception {Class clazz5 = Class.forName("People");Constructor con = clazz5.getConstructor();System.out.println(con);}public static void method_4 ()throws Exception {Class class4 = Class.forName("People");Constructor[] cons = class4.getConstructors();for(Constructor com:cons){System.out.println(com);}}public static void method_3 () throws Exception {Class class3 = Class.forName("People");System.out.println(class3);}public static void method_2 (){Class class2 = People.class;System.out.println(class2);}public static void method_1(){People p = new People();Class class1 = p.getClass();System.out.println(class1);}
}
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎
總結(jié)
- 上一篇: subject.login(token)
- 下一篇: 出现的是乱码_cad状态栏出现了方框乱码