/*
* 獲取class檔案物件
* 1.通過物件獲取
* 2.通過類獲取
* 3.通過class中的 靜態方法獲取(classforname() 常用)
*/
//通過物件獲取
person person = new person();
//獲取person類的 class檔案物件
class<? extends person> c1 = person.getclass();
system.out.println(c1);
//通過類獲取
classc2 = person.class;
system.out.println(c2);
//常用(只需要乙個字串 就能獲取該類的class物件)
//注意:引數要填全類名 包名+類名
class<?> c3 = class.forname("com.lanou3g.reflect.person");
system.out.println(c3);
//通過class檔案物件 獲取類中構造方法
class<?> c = class.forname(「com.lanou3g.reflect.person」);
// 獲取所有的公有的(public)構造方法
constructor<?> constructors = c.getconstructors();
//遍歷
for (constructor<?> constructor : constructors)
//獲取單個構造方法
constructor<?> constructor = c.getconstructor();
//利用該構造方法建立物件
object newinstance = constructor.newinstance();
system.out.println(newinstance);
//有參構造建立物件(引數是 引數類的檔案型別)
constructor<?> constructor1 = c.getconstructor(string.class, int.class);
object newinstance2 = constructor1.newinstance("王龍",30);
system.out.println(newinstance2);
/*
* 通過class檔案物件 快速建立物件
* 前提:
* 1.類必須用public
* 2.必須提供無參構造方法
* 3.該無參構造方法必須是public修飾
*/
class<?> c = class.forname(「com.lanou3g.reflect.person」);//獲取類中所有的構造方法(包括私有)//快速建立物件(直接使用類中 無參構造方法建立)
object object = c.newinstance();
system.out.println(object);
//通過class檔案物件 獲取類中構造方法
class<?> c = class.forname(「com.lanou3g.reflect.person」);//通過class檔案物件 獲取類中構造方法constructor<?> declaredconstructors = c.getdeclaredconstructors();
for (constructor<?> constructor : declaredconstructors)
//獲取私有的構造方法
constructor<?> declaredconstructor = c.getdeclaredconstructor(int.class,string.class);
//開啟私有方法使用許可權
declaredconstructor.setaccessible(true);
//建立物件
object newinstance = declaredconstructor.newinstance(30,「王龍」);
//列印物件
system.out.println(newinstance);
class<?> c = class.forname(「com.lanou3g.reflect.person」);
//獲取所有公開的成員變數
field fields = c.getfields();
for (field field : fields)
//單獨獲取指定成員變數
field field = c.getfield(「name」);
//建立乙個person
object newinstance = c.newinstance();
//通過反射 給該屬性賦值
field.set(newinstance, 「gorilla」);
system.out.println(newinstance);
//獲取私有成員變數 age 並 賦值 列印
field declaredfield = c.getdeclaredfield("age");
//開啟訪問許可權
declaredfield.setaccessible(true);
declaredfield.set(newinstance, 30);
system.out.println(newinstance);
class<?> c = class.forname(「com.lanou3g.reflect.person」);
//獲取類中所有的公開方法(包括父類的)
method methods = c.getmethods();
for (method method : methods)
//獲取指定的成員方法
//引數1: 獲取的方法名字
//引數2: 獲取的方法的引數的class型別
method method = c.getmethod(「eat」);
system.out.println(method);
//呼叫該方法
method.setaccessible(true);
object newinstance = c.newinstance();
//引數1:呼叫該方法的物件
//引數2:呼叫該方法 要傳入的引數
object invoke = method.invoke(newinstance);
system.out.println(invoke);
method method2 = c.getmethod("speak", string.class);
object invoke2 = method2.invoke(newinstance, "國語教學");
system.out.println(invoke2);
method declaredmethod = c.getdeclaredmethod("play", string.class);
//開啟許可權
declaredmethod.setaccessible(true);
//呼叫方法
object invoke3 = declaredmethod.invoke(newinstance, "lol");
system.out.println(invoke);
/*
* 利用反射
* 向arrarylist中 新增 integer資料 person物件
* 注意: 編譯成class檔案 泛型不存在
*/
arraylistlist = new arraylist<>();
//獲取class檔案物件 arraylist
class<? extends arraylist> class1 = list.getclass();
//獲取arraylist類中的 add方法
method method = class1.getmethod("add", object.class);
//呼叫該方法存值
method.invoke(list, 123);
method.invoke(list, new person("王龍",30));
method.invoke(list, "哈哈");
//列印檢視
system.out.println(list);
2020 7 30 漸入佳境
學到的題目 賽後總結反思 集訓第4天,中午12 00開始組隊賽。開始的時候不知道先做哪個題,看了看排名,有人交了c題 只不過錯了 我們就開始研究c題,乍一看是乙個字串的題,其實是乙個動腦子的 思維 題,轉戰a題,a題比較簡單,老孔有思路直接碼出,我們看著也沒什麼問題就讓他交了一下 翻車了,仔細檢查一...
redis漸入佳境 05 zset型別
zset就是有序集合,除了集合的特性外還對每乙個集合元素新增了乙個順序的屬性,zadd方法使用具體如下 zadd 集合名 序號 集合元素 zrage方法的使用具體如下 zrange 集合名 開始位置 結束位置 withscores withscores 是指的是否顯示序號 redis 127.0.0...
讓你的iOS學習漸入佳境
ios 應用開發入門 容易上手卻不簡單的課程,圍繞著swift語法介紹了物件導向程式設計,通過這門課能夠掌握swift語言和找到物件,是 ios 開發者 課程的最佳入門。ios 開發者 真正意義的ios開發之旅 學習一門語言,不做專案學起來極慢無比 甚至可以說根本學不會 但是光做專案不看語言文件就只...