javase複習 反射

2021-07-16 10:09:56 字數 2368 閱讀 6275

反射: 當位元組碼檔案載入到記憶體時, 會進行解剖建立乙個對應的class物件,把位元組碼檔案的資訊都儲存進去。

通過class物件使用位元組碼物件設定物件屬性,呼叫物件方法的過程叫做反射!!

//person p = new person(110,"狗娃");

class clazz1 = class.forname("cn.itcast.reflect.person");

system.out

.println("clazz1:"+ clazz1);

//獲取class物件的方式二: 通過類名獲取

class clazz2 = person.class

; system.out

.println("clazz1==clazz2?"+ (clazz1==clazz2));

//獲取class物件的方式三 :通過物件獲取

class clazz3 = new person(110,"狗娃").getclass();

system.out

.println("clazz2==clazz3?"+ (clazz2==clazz3));

通過class檔案可以獲取各種構造方法。。方法。。屬性,每種物件都有乙個類對應。。 直接列印出來就是方法宣告。。。

構造方法—–constructor

方法———-method

成員變數—–field

public

static

void main(string args) throws exception

constructor constructors = clazz.getdeclaredconstructors(); //獲取到乙個類的所有構造方法,包括私有的在內 。

for(constructor constructor : constructors)

*//*constructor constructor = clazz.getconstructor(int.class,string.class); // getconstructor 獲取單個指定的構造方法。

person p = (person) constructor.newinstance(999,"小城"); // newinstance()建立乙個物件

system.out.println(p);*/

//獲取私有的建構函式

constructor constructor = clazz.getdeclaredconstructor(null);

//暴力反射

constructor.setaccessible(true);

person p =(person) constructor.newinstance(null);

system.out.println(p);

/*method methods = clazz.getmethods(); // getmethods() 獲取所有 的公共方法而已。

method methods = clazz.getdeclaredmethods(); //獲取到所有的方法,但是不包含父類的方法。

for(method method : methods)*/

person p = new person(110,"狗娃");

/*

method m = clazz.getmethod("eat", int.class);

m.invoke(p, 3); //invoke 執行乙個方法。 第乙個引數:方法的呼叫物件。 第二引數: 方法所需要的引數。

//執行私有的方法

method m =clazz.getdeclaredmethod("sleep",int.class);

//設定訪問許可權允許訪問

m.setaccessible(true);

m.invoke(null, 6); //如果靜態方法, 就不用物件了 寫null

method m = clazz.getmethod("sum", int.class);

m.invoke(p,new int);

}}/*field fields = clazz.getdeclaredfields();

for(field field : fields)*/

person p = new person();

field field = clazz.getdeclaredfield("id");

//設定訪問許可權可以訪問

field.setaccessible(true);

field.set(p, 110); //第乙個引數: 設定該資料 的成員變數, 第二個引數:屬性值。

system.out.println(p);

JavaSE反射操作類

1 獲取乙個class物件 class classas class.forname 需要載入獲取的類的路徑 例如 class classas class.forname club.kang.blog.web.test.testclassmy.student 2 將這個類物件建立出來 object o...

java SE複習筆記4

知之為知之,不知為不知,是知也!知道就是知道,不知道就是不知道,這才是真正的智慧型!如果我們還記得要把自己不知道的都弄會,那麼就是大智了!哈哈 關鍵字 賦予了某種特殊含義 關鍵字全都為小寫字母 保留字 以後版本可能變成關鍵字 識別符號 我們自己定義的變數名 方法名 類名 介面名等 1 26個字母大小...

java SE複習筆記5

複習之餘,給大家加上點 論語 哈!好久沒有學習過語文啦,還真有點懷念這個課呢!學而時習之,不亦說乎?經常複習學過的知識,不也很快樂嗎?你快樂嗎?變數 veriable 定義格式 資料型別 變數名 初始化值 需要先定義後使用 有作用域,超出作用域將不能被使用 自己有初始化值 基本資料型別 8 數值型 ...