反射: 當位元組碼檔案載入到記憶體時, 會進行解剖建立乙個對應的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 數值型 ...