中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

上海公安廳網(wǎng)站官網(wǎng)新聞近期大事件

上海公安廳網(wǎng)站官網(wǎng),新聞近期大事件,網(wǎng)站建設(shè)中 html5,佛山網(wǎng)絡(luò)建設(shè)目錄 反射 定義 主要用途 反射相關(guān)的類 Class類中【獲得類相關(guān)方法】 Class類中【獲得類中屬性相關(guān)的方法】 Class類中【獲得類中注解相關(guān)的方法】 Class類中【獲得類中構(gòu)造器相關(guān)的方法】 Class類中【獲得類中方法相關(guān)的方法】 獲得Class對象 代碼示例1 代碼示例…

目錄

反射

定義

主要用途

反射相關(guān)的類

Class類中【獲得類相關(guān)方法】

Class類中【獲得類中屬性相關(guān)的方法】?

Class類中【獲得類中注解相關(guān)的方法】?

?

Class類中【獲得類中構(gòu)造器相關(guān)的方法】?

Class類中【獲得類中方法相關(guān)的方法】?

獲得Class對象

代碼示例1

代碼示例2

反射的優(yōu)缺點(diǎn)


反射
定義

Java的反射(re?ection)機(jī)制是在運(yùn)行狀態(tài)中,對于任意一個類,都能夠知道這個類的所有屬性和方法;對于任意一個對象,都能夠調(diào)用它的任意方法和屬性,既然能拿到那么,我們就可以修改部分類型信息;這種動態(tài)獲取信息以及動態(tài)調(diào)用對象方法的功能稱為java語言的反射(re?ection)機(jī)制。

主要用途

1.動態(tài)地創(chuàng)建類的實(shí)例:在運(yùn)行時根據(jù)類的全限定名創(chuàng)建對象。
2.檢查類的結(jié)構(gòu):獲取類的成員變量、方法、構(gòu)造器等信息。
3.調(diào)用方法:在運(yùn)行時動態(tài)地調(diào)用對象的方法。
4.訪問和修改私有字段:即使在類定義中字段是私有的,也可以通過反射來訪問和修改。?

反射相關(guān)的類
類名用途
Class類代表類的實(shí)體,在運(yùn)行的Java應(yīng)用程序中表示類和接口
Filed類代表類的成員變量/類的屬性
Method類代表類的方法
Constructor類代表類的構(gòu)造方法

Class類

Class類代表類的實(shí)體,在運(yùn)行的Java應(yīng)用程序中表示類和接口 .

Java文件被編譯后,生成了.class文件,JVM此時就要去解讀.class文件 ,被編譯后的Java文件.class也被JVM解析為一個對象,這個對象就是java.lang.Class,這樣當(dāng)程序在運(yùn)行時,每個.class文件就最終變成了Class類對象的一個實(shí)例。我們通過Java的反射機(jī)制應(yīng)用到這個實(shí)例,就可以去獲得甚至去添加改變這個類的屬性和動作,使得這個類成為一個動態(tài)的類。

Class類中【獲得類相關(guān)方法】
方法用途
getClassLoader()獲得類的加載器
getDeclaredClasses()返回一個數(shù)組,數(shù)組中包含該類的所有類和和接口類的對象(包括私有的)
forName(String className)根據(jù)類名返回類的對象
newInstance()創(chuàng)建類的實(shí)例
getName()獲得類的完整路徑名字

Class類中【獲得類中屬性相關(guān)的方法】?
方法用途
getField(String name)獲得某個公有的屬性對象
getFields()獲得所有公有的屬性對象
getDeclaredField(String name)獲得某個屬性對象
getDeclaredFields()獲得所有屬性對象

Class類中【獲得類中注解相關(guān)的方法】?
方法用途
getAnnotation(Class annotationClass)返回該類中與參數(shù)匹配的公有注解對象
getAnnotations()返回該類中所有的公有注解對象
getDeclaredAnnotaion(Class annotationClass)返回該類中與參數(shù)類型匹配的所有注解對象
getDeclaredAnnotations()返回該類所有的注解對象

Class類中【獲得類中構(gòu)造器相關(guān)的方法】?
方法用途
getConstructor(Class<?>... parameterTypes)獲得該類中與參數(shù)類型匹配的公有構(gòu)造方法
getConstructors()獲得該類的所有公有構(gòu)造方法
getDeclaredConstructor(Class<?>... parameterTypes)獲得該類中與參數(shù)類型匹配的構(gòu)造方法
getDeclaredConstructors()獲得該類所有構(gòu)造方法

Class類中【獲得類中方法相關(guān)的方法】?
方法用途
getMethod(String name,Class<?>... parameterTypes)獲得該類某個公有的方法
geMethods()獲得該類所有公有的方法
getDeclaredMethod(String name,Class<?>... parameterTypes)獲得該類某個方法
getDeclaredMethds()獲得該類所有方法

獲得Class對象

反射的第一步是獲取代表某個類的Class對象。可以通過多種方式獲取Class對象,最常見的是:

1.使用Class.forName(String className)靜態(tài)方法,如果類名在類的路徑中,則通過該類的全限定名(包括包名)來獲取Class對象。注意,這種方式會拋出ClassNotFoundException。
2.使用.class語法,在編譯時就已經(jīng)確定。
3.調(diào)用對象的getClass()方法,在運(yùn)行時確定對象的實(shí)際類型。

代碼示例1
class Student{//私有屬性nameprivate String name = "bit";//公有屬性agepublic int age = 18;//不帶參數(shù)的構(gòu)造方法public Student(){System.out.println("Student()");}private Student(String name,int age) {this.name = name;this.age = age;System.out.println("Student(String,name)");}private void eat(){System.out.println("i am eat");}public void sleep(){System.out.println("i am pig");}private void function(String str) {System.out.println(str);}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +'}';}
}public class Test {//Class對象 只有一個public static void main(String[] args) {Class<?> c1;try {c1 = Class.forName("reflectdemo.Student");} catch (ClassNotFoundException e) {throw new RuntimeException(e);}Class<?> c2;c2 = Student.class;Student student = new Student();Class<?> c3 = student.getClass();System.out.println(c1.equals(c2));System.out.println(c1.equals(c3));System.out.println(c3.equals(c2));}
}
代碼示例2
class Student{//私有屬性nameprivate String name = "bit";//公有屬性agepublic int age = 18;//不帶參數(shù)的構(gòu)造方法public Student(){System.out.println("Student()");}private Student(String name,int age) {this.name = name;this.age = age;System.out.println("Student(String,name)");}private void eat(){System.out.println("i am eat");}public void sleep(){System.out.println("i am pig");}private void function(String str) {System.out.println(str);}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +'}';}
}public class ReflectDemo {//如何通過反射 實(shí)例化對象public static void reflectNewInstance() {Class<?> c1;try {c1 = Class.forName("reflectdemo.Student");Student student = (Student) c1.newInstance();System.out.println(student);} catch (ClassNotFoundException e) {throw new RuntimeException(e);} catch (InstantiationException e) {throw new RuntimeException(e);} catch (IllegalAccessException e) {throw new RuntimeException(e);}}// 反射私有的構(gòu)造方法  屏蔽內(nèi)容為獲得公有的構(gòu)造方法public static void reflectPrivateConstructor() {Class<?> c1;try {c1 = Class.forName("reflectdemo.Student");Constructor<Student> con =(Constructor)c1.getDeclaredConstructor(String.class,int.class);con.setAccessible(true);Student student = con.newInstance("zhangsan",18);System.out.println(student);} catch (ClassNotFoundException e) {throw new RuntimeException(e);} catch (NoSuchMethodException e) {throw new RuntimeException(e);} catch (InvocationTargetException e) {throw new RuntimeException(e);} catch (InstantiationException e) {throw new RuntimeException(e);} catch (IllegalAccessException e) {throw new RuntimeException(e);}}// 反射私有屬性public static void reflectPrivateField() {Class<?> c1;try {c1 = Class.forName("reflectdemo.Student");Field field = c1.getDeclaredField("name");field.setAccessible(true);Student student = (Student) c1.newInstance();field.set(student,"wangwu");System.out.println(student);} catch (ClassNotFoundException e) {throw new RuntimeException(e);} catch (NoSuchFieldException e) {throw new RuntimeException(e);} catch (InstantiationException e) {throw new RuntimeException(e);} catch (IllegalAccessException e) {throw new RuntimeException(e);}}// 反射私有方法public static void reflectPrivateMethod() {Class<?> c1;try {c1 = Class.forName("reflectdemo.Student");Method method = c1.getDeclaredMethod("function",String.class);method.setAccessible(true);Student student = (Student) c1.newInstance();method.invoke(student,"我是一個參數(shù)");//System.out.println(student);} catch (ClassNotFoundException e) {throw new RuntimeException(e);} catch (NoSuchMethodException e) {throw new RuntimeException(e);} catch (InstantiationException e) {throw new RuntimeException(e);} catch (IllegalAccessException e) {throw new RuntimeException(e);} catch (InvocationTargetException e) {throw new RuntimeException(e);}}public static void main(String[] args) {//reflectNewInstance();//reflectPrivateConstructor();//reflectPrivateField();reflectPrivateMethod();}
}
反射的優(yōu)缺點(diǎn)

優(yōu)點(diǎn)

1. 對于任意一個類,都能夠知道這個類的所有屬性和方法;

? ? 對于任意一個對象,都能夠調(diào)用它的任意一個方法。

2. 增加程序的靈活性和擴(kuò)展性,降低耦合性,提高自適應(yīng)能力。
3. 反射已經(jīng)運(yùn)用在了很多流行框架如:Struts、Hibernate、Spring 等等。

缺點(diǎn)

1.反射會破壞封裝性,使代碼難以理解和維護(hù)。
2.反射通常比直接代碼調(diào)用慢,因?yàn)樗婕暗筋愋蜋z查等動態(tài)解析。
3.濫用反射可能導(dǎo)致安全問題,如訪問或修改不應(yīng)該被訪問的私有成員。

http://www.risenshineclean.com/news/51797.html

相關(guān)文章:

  • 網(wǎng)站建設(shè)和網(wǎng)絡(luò)推廣是干嘛廣告做到百度第一頁
  • 做網(wǎng)站維護(hù)的收入怎么確認(rèn)做專業(yè)搜索引擎優(yōu)化
  • 湖南建設(shè)廳網(wǎng)站二建注銷推廣代理平臺登錄
  • web網(wǎng)站做二級標(biāo)題是什么意思網(wǎng)絡(luò)廣告策劃書模板范文
  • 泰安哪里可以做網(wǎng)站河南網(wǎng)站推廣優(yōu)化
  • 燕郊網(wǎng)站建設(shè)社群營銷平臺有哪些
  • vue做的網(wǎng)站有什么徐州網(wǎng)站優(yōu)化
  • 不會被封的網(wǎng)站誰做搜索優(yōu)化seo
  • 宣傳片拍攝合同模板杭州百度快照優(yōu)化公司
  • 做網(wǎng)站銷售大概多少錢色盲測試圖片
  • 中文 域名的網(wǎng)站seo網(wǎng)站搭建是什么
  • asp c 網(wǎng)站開發(fā)百度發(fā)視頻步驟
  • 網(wǎng)站 設(shè)計(jì)要求營銷咨詢公司
  • 投票活動網(wǎng)站怎么做搜索引擎廣告圖片
  • 佛山建設(shè)外貿(mào)網(wǎng)站seo技術(shù)自學(xué)
  • 山東新華電腦學(xué)院學(xué)網(wǎng)站開發(fā)如何制作一個自己的網(wǎng)頁網(wǎng)站
  • 網(wǎng)站制作的報(bào)價(jià)大約是多少香港疫情最新情況
  • 寧波seo網(wǎng)站建設(shè)費(fèi)用企業(yè)推廣平臺
  • o2o商城網(wǎng)站建設(shè)供應(yīng)可以直接進(jìn)入的輿情網(wǎng)站
  • 手機(jī)app設(shè)計(jì)網(wǎng)站沈陽seo搜索引擎
  • 網(wǎng)站域名備案密碼seo產(chǎn)品優(yōu)化免費(fèi)軟件
  • 買2g 空間做下載網(wǎng)站網(wǎng)頁制作軟件dw
  • 網(wǎng)站建設(shè)中的需求報(bào)告功能企業(yè)策劃書
  • 網(wǎng)站banner圖的作用公司網(wǎng)站與推廣
  • seo排名技術(shù)教程seo排名軟件價(jià)格
  • 做網(wǎng)站好的網(wǎng)站建設(shè)公司排名青島百度推廣優(yōu)化怎么做的
  • 網(wǎng)站域名查詢地址做百度推廣銷售怎么找客戶
  • 中山市小欖新意網(wǎng)站設(shè)計(jì)有限公司太原網(wǎng)站建設(shè)制作
  • wordpress geogebraseo刷排名工具
  • 做本地網(wǎng)站需要的軟件網(wǎng)盤資源共享群吧