电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

Java如何基于反射機(jī)制獲取不同的類

瀏覽:9日期:2022-08-27 11:16:22

什么是反射機(jī)制

Java的反射(reflection)機(jī)制是指在程序的運(yùn)行狀態(tài)中,可以構(gòu)造任意一個類的對象,可以了解任意一個對象所屬的類,可以了解任意一個類的成員變量和方法,可以調(diào)用任意一個對象的屬性和方法。這種動態(tài)獲取程序信息以及動態(tài)調(diào)用對象的功能稱為Java語言的反射機(jī)制。反射被視為動態(tài)語言的關(guān)鍵(在運(yùn)行階段可以改變其結(jié)構(gòu))

特點(diǎn):

1、極大的提高了程序的靈活性和擴(kuò)展性,降低模塊的耦合性,提高自身的適應(yīng)能力

2、通過反射機(jī)制可以讓程序創(chuàng)建和控制任何類的對象,無需提前硬編碼目標(biāo)類

3、能夠在運(yùn)行時構(gòu)造一個類的對象、判斷一個類所具有的成員變量和方法、調(diào)用一個對象的方法(包括 private),可能會有安全隱患

4、是構(gòu)建框架技術(shù)的基礎(chǔ)所在,使用反射可以避免將代碼寫死在框架中

5、包含動態(tài)類型,而 JVM 不能對動態(tài)代碼優(yōu)化,所以效率會比較低

在Java中可以通過Reflection APIs在運(yùn)行時動態(tài)生成class實體,通過Constructor創(chuàng)建類實例、Field訪問成員屬性、Method調(diào)用方法

Class類

在Java中,每個 class 都有一個相應(yīng)的 Class 對象。在編譯完成后,在生成的.class文件中,會產(chǎn)生一個Class對象,用于表示這個類的類型信息。

特點(diǎn):

1、由系統(tǒng)創(chuàng)建Class類

2、同一個類的實例指向同一個Class對象

3、通過Class可以完整的得到一個類所有被加載的結(jié)構(gòu)

4、Class類是Java反射的基礎(chǔ)

獲得Class類的方法:

public class MyReflect { public static void main(String[] args) throws ClassNotFoundException { Teacher t = new Teacher(); // 1、通過對象獲得 Class c1 = t.getClass(); // 2、forName + 全限定名 獲得 Class c2 = Class.forName('reflect.Teacher'); // 3、通過類名獲得 Class c3 = Teacher.class; // 4、基本數(shù)據(jù)類型的Type屬性獲得 Class c4 = Double.TYPE; // 5、通過子類的Class對象獲得 Class c5 = c1.getSuperclass(); }}class Person { String name; public Person() { }}class Teacher extends Person { public Teacher() { }}

Java如何基于反射機(jī)制獲取不同的類

getXXX為獲取 public 構(gòu)造器、屬性、方法

getDeclaredXXX 獲取任意構(gòu)造器、屬性、方法(包括private)

setAccessible方法避開權(quán)限檢測,用以訪問權(quán)限不足的成員

以下不在贅述

準(zhǔn)備:Person類以及Tercher子類

package reflect;class Person { public String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Person() { } public Person(String name, int age) { this.name = name; this.age = age; } @Override public String toString() { return 'Person{' +'name=’' + name + ’’’ +', age=' + age +’}’; } public String greet(String name) { return 'hello ' + name + '.'; }}class Teacher extends Person {}

Constructor類

java.lang.reflect.Constructor類是java.lang.reflect.Executable類的直接子類,用于表示類的構(gòu)造方法。通過Class對象的 getConstructors() 方法可以獲得當(dāng)前運(yùn)行時類的構(gòu)造方法

public class MyConstructor { public static void main(String[] args) throws Exception { Class<Person> c = (Class<Person>) Class.forName('reflect.Person');// Object person2 = c.newInstance(); //@Deprecated// System.out.println(person2); Constructor<Person> constructor = c.getConstructor(); Person person = constructor.newInstance(); System.out.println(person); // 獲取 public 有參構(gòu)造方法 Constructor<Person> constructor1 = c.getConstructor(String.class, int.class); Person person1 = constructor1.newInstance('JL', 18); System.out.println(person1); // 獲取構(gòu)造方法 Constructor<Person> constructor2 = c.getDeclaredConstructor(String.class, int.class); constructor2.setAccessible(true); Person person2 = constructor1.newInstance('JL', 18); System.out.println(person2.name); }}

Field類

java.lang.reflect.Field類用于封裝成員變量信息,調(diào)用Class對象的 getField() 或 getFields()等方法可以獲得當(dāng)前運(yùn)行時類的成員變量

public class MyField { public static void main(String[] args) throws Exception { Class<?> c = Class.forName('reflect.Person'); // 在Person類中,無參的構(gòu)造方法不能省略 Object p = c.getConstructor().newInstance(); // 獲取 public 成員變量 Field[] fields = c.getFields(); // 獲取所有成員變量(包括 private) Field[] allFields = c.getDeclaredFields(); //獲取指定名稱public變量 Field f1 = c.getField('name'); // 成員變量set、get f1.set(p, 'JL'); System.out.println(f1.get(p)); Field f2 = c.getDeclaredField('age'); // private int age // 忽略權(quán)限檢查,使得 private 成員可以被訪問 f2.setAccessible(true); f2.set(p, 18); System.out.println(f2.get(p)); }}

Method類

java.lang.reflect.Method類是java.lang.reflect.Executable類的直接子類,用于封裝成員方法的信息,調(diào)用Class對象的 getMethod() 方法或 getMethods() 方法可以獲得當(dāng)前運(yùn)行時類的指定方法或所有方法

public class MyMethod { public static void main(String[] args) throws Exception { Class<Person> c = (Class<Person>) Class.forName('reflect.Person'); Person p = c.getConstructor().newInstance(); // 獲取所有 public 方法 Method[] methods = c.getMethods(); // 獲取 greet 方法 Method method1 = c.getMethod('greet', String.class); //執(zhí)行 greet 方法 System.out.println(method1.invoke(p, 'JL')); } }0

PS:主要簡單說明反射的使用,關(guān)于類加載機(jī)制,性能分析等沒有說明

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 连续油炸机,全自动油炸机,花生米油炸机-烟台茂源食品机械制造有限公司 | 聚丙烯酰胺_阴离子_阳离子「用量少」巩义亿腾厂家直销,售后无忧 聚合甘油__盐城市飞龙油脂有限公司 | 北京发电机出租_发电机租赁_北京发电机维修 - 河北腾伦发电机出租 | 压砖机_电动螺旋压力机_粉末成型压力机_郑州华隆机械tel_0371-60121717 | 杰福伦_磁致伸缩位移传感器_线性位移传感器-意大利GEFRAN杰福伦-河南赉威液压科技有限公司 | 亿立分板机_曲线_锯片式_走刀_在线式全自动_铣刀_在线V槽分板机-杭州亿协智能装备有限公司 | ◆大型吹塑加工|吹塑加工|吹塑代加工|吹塑加工厂|吹塑设备|滚塑加工|滚塑代加工-莱力奇塑业有限公司 | 防潮防水通风密闭门源头实力厂家 - 北京酷思帝克门窗 | 泥浆在线密度计厂家-防爆数字压力表-膜盒-远传压力表厂家-江苏大亚自控设备有限公司 | 柔软云母板-硬质-水位计云母片组件-首页-武汉长丰云母绝缘材料有限公司 | 无锡装修装潢公司,口碑好的装饰装修公司-无锡索美装饰设计工程有限公司 | 高低温试验房-深圳高低温湿热箱-小型高低温冲击试验箱-爱佩试验设备 | 定制异形重型钢格栅板/钢格板_定做踏步板/排水沟盖板_钢格栅板批发厂家-河北圣墨金属制品有限公司 | 碳纤维复合材料制品生产定制工厂订制厂家-凯夫拉凯芙拉碳纤维手机壳套-碳纤维雪茄盒外壳套-深圳市润大世纪新材料科技有限公司 | 贴板式电磁阀-不锈钢-气动上展式放料阀-上海弗雷西阀门有限公司 工业机械三维动画制作 环保设备原理三维演示动画 自动化装配产线三维动画制作公司-南京燃动数字 | 带式压滤机_污泥压滤机_污泥脱水机_带式过滤机_带式压滤机厂家-河南恒磊环保设备有限公司 | 洛阳网站建设_洛阳网站优化_网站建设平台_洛阳香河网络科技有限公司 | 土壤肥料养分速测仪_测土配方施肥仪_土壤养分检测仪-杭州鸣辉科技有限公司 | 玉米深加工设备|玉米加工机械|玉米加工设备|玉米深加工机械-河南成立粮油机械有限公司 | 自动售货机_无人售货机_专业的自动售货机运营商_免费投放售货机-广州富宏主官网 | 北京京云律师事务所 | 石油/泥浆/不锈钢防腐/砂泵/抽砂泵/砂砾泵/吸砂泵/压滤机泵 - 专业石油环保专用泵厂家 | 西安展台设计搭建_西安活动策划公司_西安会议会场布置_西安展厅设计西安旭阳展览展示 | 京港视通报道-质量走进大江南北-京港视通传媒[北京]有限公司 | 广州物流公司_广州货运公司_广州回程车运输 - 万信物流 | 药品仓库用除湿机-变电站用防爆空调-油漆房用防爆空调-杭州特奥环保科技有限公司 | 三佳互联一站式网站建设服务|网站开发|网站设计|网站搭建服务商 赛默飞Thermo veritiproPCR仪|ProFlex3 x 32PCR系统|Countess3细胞计数仪|371|3111二氧化碳培养箱|Mirco17R|Mirco21R离心机|仟诺生物 | 北京租车公司_汽车/客车/班车/大巴车租赁_商务会议/展会用车/旅游大巴出租_北京桐顺创业租车公司 | 电子厂招聘_工厂招聘_普工招聘_小时工招聘信息平台-众立方招工网 | 废气处理_废气处理设备_工业废气处理_江苏龙泰环保设备制造有限公司 | 上海冠顶工业设备有限公司-隧道炉,烘箱,UV固化机,涂装设备,高温炉,工业机器人生产厂家 | 冷水机-工业冷水机-冷水机组-欧科隆品牌保障 | 污水/卧式/潜水/钻井/矿用/大型/小型/泥浆泵,价格,参数,型号,厂家 - 安平县鼎千泵业制造厂 | 在线悬浮物浓度计-多参数水质在线检测仪-上海沃懋仪表科技有限公司 | 螺旋绞龙叶片,螺旋输送机厂家,山东螺旋输送机-淄博长江机械制造有限公司 | 网站建设-高端品牌网站设计制作一站式定制_杭州APP/微信小程序开发运营-鼎易科技 | led全彩屏-室内|学校|展厅|p3|户外|会议室|圆柱|p2.5LED显示屏-LED显示屏价格-LED互动地砖屏_蕙宇屏科技 | 玉米深加工设备|玉米加工机械|玉米加工设备|玉米深加工机械-河南成立粮油机械有限公司 | 船用烟火信号弹-CCS防汛救生圈-船用救生抛绳器(海威救生设备) | 贵州水玻璃_-贵阳花溪闽兴水玻璃厂 | 5nd音乐网|最新流行歌曲|MP3歌曲免费下载|好听的歌|音乐下载 免费听mp3音乐 |