java_day21_反射和注解
反射和注解
一.反射
反射(Reflection)是Java 程序開發(fā)語言的特征之一,它允許運(yùn)行中的 Java 程序獲取自身的信息,并且可以操作類或?qū)ο蟮膬?nèi)部屬性。程序中一般的對(duì)象的類型都是在編譯期就確定下來的,而Java反射機(jī)制可以動(dòng)態(tài)地創(chuàng)建對(duì)象并調(diào)用其屬性,這樣的對(duì)象的類型在編譯期是未知的。所以我們可以通過反射機(jī)制直接創(chuàng)建對(duì)象,即使這個(gè)對(duì)象的類型在編譯期是未知的。
?反射的核心是JVM在運(yùn)行時(shí)才動(dòng)態(tài)加載類或調(diào)用方法/訪問屬性,它不需要事先(寫代碼的時(shí)候或編譯期)知道運(yùn)行對(duì)象是誰。
參考博文?
Java反射框架主要提供以下功能:????? 參考知乎
- 1.在運(yùn)行時(shí)判斷任意一個(gè)對(duì)象所屬的類;
- 2.在運(yùn)行時(shí)構(gòu)造任意一個(gè)類的對(duì)象;
- 3.在運(yùn)行時(shí)判斷任意一個(gè)類所具有的成員變量和方法(通過反射甚至可以調(diào)用private方法);
- 4.在運(yùn)行時(shí)調(diào)用任意一個(gè)對(duì)象的方法
(一)、得到構(gòu)造器的方法-Constructor
(二).獲得字段信息的方法-Field
(三).獲得方法信息的方法-Method
(四).獲取Class(類類型)的三種方式
1.根據(jù)類的對(duì)象獲取
Person person = new Person ( );
Class clazz = person.getClass ( );
2.根據(jù)類獲取
Class clazz = Person.class;
3.通過類名獲取
Class clazz = Class.forName("com.lanou3g.code0510.reflection.Person")
(五).通過反射調(diào)用方法的代碼:
Person person = new Person ( );//創(chuàng)建person類的對(duì)象
person.setName("張三");//設(shè)置屬性值
person.setAge(19);//設(shè)置屬性值
Class clazz = Person.Class;//創(chuàng)建Class對(duì)象
//通過類的方法名獲得該方法
Method showMethod = clazz.getDeclaredMethod ("show");
showMethod.setAccessible (true);//讓這個(gè)類的方法可以被訪問
showMethod.invoke(Person);//調(diào)用這個(gè)方法
二.注解
它提供了一種結(jié)構(gòu)化的,并且具有類型檢查能力的新途徑,從而使得程序員能夠?yàn)榇a加入元數(shù)據(jù),而不會(huì)導(dǎo)致代碼雜亂且難以閱讀。
1.基本格式:public @interface 注解名 {定義體}
2.四個(gè)元注解,用于修飾注解的注解
1).@Target:表示該注解可以用于什么地方。
取值(ElementType)包括:
CONSTRUCTOR:用于描述構(gòu)造器
FIELD:用于描述域
LOCAL_VARIABLE:用于描述局部變量
METHOD:用于描述方法
PACKAGE:用于描述包
PARAMETER:用于描述參數(shù)
TYPE:用于描述類、接口(包括注解類型) 或enum聲明
2).@Retention:表示需要在什么級(jí)別保存該注解信息。
取值(RetentionPolicy)包括:
SOURCE:在源文件中有效(即源文件保留)
CLASS:在class文件中有效(即class保留)
RUNTIME:在運(yùn)行時(shí)有效(即運(yùn)行時(shí)保留),因此可以通過反射機(jī)制讀取注解的信息。
3).@Documented:表示將此注解包含在javadoc中。
4).@Inherited:表示允許子類繼承父類中的注解。
參考博文
?
轉(zhuǎn)載于:https://www.cnblogs.com/memo-song/p/9021680.html
總結(jié)
以上是生活随笔為你收集整理的java_day21_反射和注解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pc版WastelandSurvival
- 下一篇: 华盛证券港股钱提不出来