Java基礎之反射

2021-09-13 23:22:06 字數 2380 閱讀 9408

1.反射:將類的各個組成部分封裝為其他物件,這就是反射機制

好處:1.可以在程式執行過程中,操作這些物件

2.可以解耦,提高程式的可擴充套件性

2.獲取class物件的幾種方式

1.class.forname(「全類名」):將位元組碼檔案載入進來,返回class物件

2.類名.class:通過類名的屬性class獲取

3.物件.getclass 通過object類定義的方法獲取

person p = new person();//建立person類的物件

class clazz1 = class.forname("com.xunrui.bean.person");// class.forname("全類名")

class clazz2 = person.class;//類名獲取

class clazz3 = p.getclass();//物件獲取

3.獲取成員屬性的方法

field fields = clazz1.getfields();  //獲取所有公共成員變數

for(object o :fields)

field name1 = clazz1.getfield("a"); //通過成員變數的名字 獲取成員變數物件

name1.set(p,"張三"); //操作成員變數a

object o1 = name1.get(p);

system.out.println(o1);

field fieldss = clazz1.getdeclaredfields(); //獲取所有的成員變數(包含私有的)

for(object o :fieldss)

field name2 = clazz1.getdeclaredfield("name");

name2.setaccessible(true); //由於private string name; 是非public的 故而需要暴力反射 去掉私有許可權

name2.set(p,"私有許可權的張三"); //操作成員變數a

object o2 = name2.get(p);

system.out.println(o2);

4.獲取物件的過程

//物件的獲取過程

constructor constructors = clazz1.getconstructors();

for (object o:constructors)

//建立有參非私有的建構函式

constructor constructor = clazz1.getconstructor(string.class,int.class);//獲取建構函式

person person = (person) constructor.newinstance("張三",23);

//person person1 = (person) clazz1.newinstance(); //使用建構函式建立無參物件

system.out.println(person);

//私有的構造獲取

constructor declaredconstructors = clazz1.getdeclaredconstructors();

for (object o:declaredconstructors)

//建立有參非私有的建構函式

constructor declaredconstructor = clazz1.getdeclaredconstructor(string.class, int.class);

declaredconstructor.setaccessible(true);//去除私有

person person1 = (person) declaredconstructor.newinstance("李四",24);

system.out.println(person1);

5.獲取方法的過程

method methods = clazz1.getmethods();  //獲取所有的public的方法

// method declaredmethods = clazz1.getdeclaredmethods(); 獲取包含私有方法的方法陣列

for (object o : methods)

method method = clazz1.getmethod("eat", string.class);//獲取指定方法

//method method1 = clazz1.getdeclaredmethod("eat", string.class);//獲取private的方法

去除私有 暴力反射

method.invoke(person, "飯");//執行方法

Java基礎 反射

public class getconstructor1 獲取乙個類的所有構造方法,包括似有的 constructor constructors2 clazz1.getdeclaredconstructors for constructor constructor constructors2 獲取單...

java反射基礎

反射就是在執行時才知道要操作的類是什麼,並且可以在執行時獲取類的完整構造,並呼叫對應的方法。1 通過 class 類獲取成員變數 成員方法 介面 超類 構造方法 getname 獲得類的完整名字。getfields 獲得類的public型別的屬性。getdeclaredfields 獲得類的所有屬性...

java反射基礎

反射 反射 將類的各個組成部分封裝為其他物件,這就是反射機制 好處 1.可以在程式執行過程中,操作這些物件。2.可以解耦,提高程式的可擴充套件性。獲取class物件的方式 1.class.forname 全類名 將位元組碼檔案載入進記憶體,返回class物件 多用於配置檔案,將類名定義在配置檔案中。...