二、反射:框架設計的靈魂
獲取class物件的方式:
class.forname(「全類名」):將位元組碼檔案載入進記憶體,返回class物件
* 多用於配置檔案 ,將類名定義在配置檔案中。讀取檔案,載入類
類名.class:通過類名的屬性class獲取(載入進記憶體後)
* 多用於引數的傳遞
物件.getclass():getclass()方法在object類中定義著。(已經有物件時)
* 多用於物件的獲取位元組碼的方式
public
class
reflectdemo0
}
class物件功能:
獲取成員變數們
* field getfields() :獲取所有public修飾的成員變數
* field getfield(string name) 獲取指定名稱的 public修飾的成員變數
* field getdeclaredfields() 獲取所有的成員變數,不考慮修飾符
* field getdeclaredfield(string name)
public
class
reflectdemo1
system.out.
println
("----------------");
//2 field getfield(string name) 獲取指定名稱的 public修飾的成員變數
field a = personclass.
getfield
("a");
//宣告異常
//獲取成員變數的值
person p =
newperson()
;//object get(object obj) 返回由該 field表示的字段在指定物件上的值
object value = a.
get(p)
; system.out.
println
(value)
;//null
//設定a的值
//void set(object obj, object value) 將指定的物件引數中由此 field物件表示的字段設定為指定的新值
a.set(p,
"張三");
system.out.
println
(p);
system.out.
println
("***************===");
//field getdeclaredfields() 獲取所有的成員變數,不考慮修飾符(包括private)
field[
] declaredfields = personclass.
getdeclaredfields()
;for
(field declaredfield : declaredfields)
//field getdeclaredfield(string name)
field d = personclass.
getdeclaredfield
("d");
//忽略訪問許可權修飾符的安全檢查
d.setaccessible
(true);
//暴力反射,新增這行**就可以訪問私有變數了
object value2 = d.
get(p)
;//can not access a member of class domain.person with modifiers "private"
// system.out.println(value2); //非法訪問異常--私有
system.out.
println
(value2)
;//null
}}
獲取構造方法們
* constructor> getconstructors()
* constructor getconstructor(… parametertypes)
* constructor getdeclaredconstructor(… parametertypes)
* constructor> getdeclaredconstructors()
public
class
reflectdemo2
system.out.
println
("----------------");
// constructorconstructor1 = personclass.getconstructor(); //使用空參構造器
// system.out.println(constructor1); //public domain.person()
// person person1 = constructor1.newinstance();
//如果使用空引數構造方法建立物件,操作可以簡化:class物件的newinstance方法,即不用先獲取構造器
person person1 = personclass.
newinstance()
; system.out.
println
(person1)
;//person、
// 暴力反射,當使用constructor> getdeclaredconstructors()私有構造器構造物件時可使用
// constructor.setaccessible(true);
}}
獲取成員方法們:
* method getmethods()
* method getmethod(string name, … parametertypes)
* method getdeclaredmethods()
* method getdeclaredmethod(string name, … parametertypes)
獲取全類名
* string getname()
public
class
reflectdemo3
//3 獲取類名
string classname = personclass.
getname()
; system.out.
println
(classname)
; 全類名:包名.類名
}}
練習案例:
配置檔案反射
將需要建立的物件的全類名和需要執行的方法定義在配置檔案中
在程式中載入讀取配置檔案
使用反射技術來載入類檔案進記憶體
建立物件
執行方法
//配置檔案pro.properties
classname=domain.student
methodname=sleep
/*
假設的框架類(直接用,不更改)
(只需要改變配置檔案,就可以建立不同的類和執行不同的方法)
*/public
class
reflecttest
}
反射基礎概念 WEB應用部署
反射基礎概念 web應用部署 web應用部署 1 發布 方式是通過虛擬目錄,現在這個方式我不用 2 還要複製web站點 製作web站點的windows安裝程式這兩個我也不用 3 預編譯站點麼明白 中小型站點,現在基本都是 server 08的伺服器,iis7或者以上版本,直接建站,簡單配置。即使存在...
Web開發 02 HTML基礎
標題標籤 html 共提供六級標題標籤 段落標籤 段落標籤將網頁分成若干個段落。預設情況下,文字在乙個段落中會自動根據瀏覽器視窗的大小換行。水平線標籤 水平線標籤的效果就是一條分割線。一般用於將段落與段落分開,使得層次更加分明。換行標籤 html 中換行操作只能通過標籤來完成,文字中的回車符是沒有作...
Web測試方法 02
1.頁面鏈結檢查 2.相關性檢查 3.檢查按鈕的功能是否正確 4.字串長度檢查 輸入超出需求所說明的字串長度的內容,看系統是否會檢查字串長度,還要檢查需求規定的字串長度是否正確合理。5.字元型別檢查 在應該輸入指定型別內容的地方輸入其它型別的內容,看系統是否會檢查字元型別,例如 在豆丫網後台版本號處...