Java反射详解
创始人
2024-06-01 19:43:36
0

1,反射简介

反射是被视为动态语言的关键,反射机制允许程序在执行期间借助Reflection API来获取类的内部信息(如类的属性和方法),并能够直接操作对象的内部属性和方法。
加载完类之后,在堆内存会产生一个Class类型的对象(一个类在堆中会有多个对象,但是只有一个Class对象)这个Class对象包含了完整的类的结构信息,我们可以通过这个Class对象来获取加载的这个类的结构和属性信息,这个过程称为反射

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2,通过反射操作类中属性

2.1,创建Person类

public class Person {private String name;public int age;private String nation;public Person() {}public String getName() {return name;}public String getNation() {return nation;}public void setNation(String nation) {this.nation = nation;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public Person(String name, int age, String nation) {this.name = name;this.age = age;this.nation = nation;}public void setAge(int age) {this.age = age;}public Person(String name, int age) {this.name = name;this.age = age;}public void show(){System.out.println("你好,我是一个人");}public String shownation(){System.out.println("我的国籍是:"+nation);return this.nation;}
}

2.2,操作Person类中的属性

public static void main(String[] args) throws Exception{//获取Calss类对象Class claszz = Person.class;      //通过反射创建类对象Person o = (Person)claszz.newInstance();//通过反射获取类的属性Field age1 = claszz.getField("age");age1.set(o,10);System.out.println(o.getAge());}

在这里插入图片描述

    public static void main(String[] args) throws Exception{//获取Calss类对象Class claszz = Person.class;//通过反射创建类对象Person o = (Person)claszz.newInstance();//获取方法字段Method show = claszz.getDeclaredMethod("show");//执行方法,方法.invoke(对象)show.invoke(o);}

在这里插入图片描述
2.3,操作类中的私有属性

 public static void main(String[] args) throws Exception{//获取Calss类对象Class clazz = Person.class;//通过反射创建类对象Person person = (Person)clazz.newInstance();Field name = clazz.getDeclaredField("name");name.setAccessible(true);name.set(person,"张三");System.out.println(person.getName());}

在这里插入图片描述

3,反射与封装

封装是防止外部调用内部私有属性或方法,而反射可以调用并操作内部的私有属性或方法,这是不是会有冲突呢

这是不矛盾的,封装解决的是建议我们怎么调的问题,反射解决的是我们怎么掉的问题。

4,Class类的理解

在这里插入图片描述
我们知道Java是一个面向对象语言,一切都是对象,我们在声明一个类的时候如:Class User{}
其实User类就是一个Class的对象实例。Class User=new Class();其实User就是Class的对象。
获取类的一个对象
4,1,创建Class的实例的方式
在这里插入图片描述
Class的一个实例就对应一个运行时类(这里就是Person类),加载到内存中的运行时类会缓存一段时间,在这个时间内,我们可以通过不同的方式来获取此运行时类(Person类)。

5,通过反射读取配置文件

在这里插入图片描述

 public static void main(String[] args) throws Exception{Properties pro=new Properties();FileInputStream fileInputStream=new FileInputStream("application.properties");pro.load(fileInputStream);String user=pro.getProperty("name");System.out.println(user);}

在这里插入图片描述

6,通过反射创建运行时类的对象

public static void main(String[] args) throws Exception{Class clazz = Person.class;Object o = clazz.newInstance();System.out.println(o.getClass().getName());}

其实这里面newinstance()是通过调用无参构造函数来创建对象实例。
6.1,反射的动态性
我们知道反射最大的特性就是动态性,就是在编译时是无法确定结果的,只有在运行是才会确定结果。

public static Object getInstane(String classPath) throws Exception {Class aClass = Class.forName(classPath);Object o = aClass.newInstance();return o;}

我们利用发射动态性来动态的创建对象。

public static void main(String[] args) throws Exception {int num=new Random().nextInt(3);String classPath="";switch (num){case 1:classPath="reflection.User";break;case 2:classPath="java.sql.Date";break;case 3:classPath="reflection.Person";break;}System.out.println(getInstane(classPath).getClass().getName());}

在这里插入图片描述
我们只有在运行时才能确定对象类型,这就是发射的动态性。

相关内容

热门资讯

初中作文读后感【实用6篇】 初中作文读后感 篇一《红楼梦》读后感《红楼梦》是中国古代文学的巅峰之作,也是我读过的一本非常经典的小...
刻痕(精简3篇) 刻痕 篇一刻痕刻痕是指物体表面因外力作用而产生的破坏性痕迹。刻痕不仅会影响物体的外观美观度,还可能降...
春天作文(推荐6篇) 春天作文 篇一春天的美丽春天是一年四季中最美丽的季节之一。当冬天的严寒逐渐消退,春天的阳光温暖而明媚...
吃牙膏初一作文(实用6篇) 吃牙膏初一作文 篇一吃牙膏的危害牙膏是我们日常生活中必不可少的物品之一,它具有保护牙齿健康的作用。然...
我身边的胡胖作文800字(优... 我身边的胡胖作文800字 篇一胡胖是我的好朋友,他是一个胖胖的男孩,大家都亲切地叫他“胖胖”。胖胖的...
第一次吃自助餐初中作文(优选... 第一次吃自助餐初中作文 篇一第一次吃自助餐今天,我第一次去吃自助餐。这是我以前从未尝试过的新鲜事物,...
乐在元宵夜初中作文(精选6篇... 乐在元宵夜初中作文 篇一元宵节是我国传统的节日之一,也是中国农历正月十五的晚上。这一天,人们会举行各...
傣族泼水节作文(推荐6篇) 傣族泼水节作文 篇一傣族泼水节是中国云南省傣族人民传统的节日,也是中国国家级非物质文化遗产。每年农历...
以包汤圆为主题的优秀作文【优... 以包汤圆为主题的优秀作文 篇一包汤圆的乐趣包汤圆是中国传统的民间活动之一。每年农历正月十五的元宵节,...
校园生活二三事作文【最新6篇... 校园生活二三事作文 篇一我的校园生活充满了欢笑和感动。在这个充满活力的地方,我度过了许多难忘的时光。...
初一学生作文【精彩6篇】 初一学生作文 篇一:我的暑假计划初一学生作文 篇二:我的理想职业初一学生作文 篇三   我们平常看书...
自信作文【通用6篇】 自信作文 篇一自信是一种积极向上的心态,是人们在面对困难和挑战时保持坚定信念和积极态度的能力。自信是...
初中作文:爸爸,我想对您说【... 初中作文:爸爸,我想对您说 篇一亲爱的爸爸:您好!我想借此机会写一封信给您,表达我对您的感激之情和对...
初中生家长的寄语(优选5篇) 初中生家长的寄语 篇一亲爱的家长们:首先,我要向大家表示衷心的感谢,感谢你们一直以来对孩子的关心和支...
并列式议论文(实用5篇) 并列式议论文 篇一应该提高法定退休年龄随着现代医疗和生活水平的提高,人们的寿命也在不断延长。这使得许...
寂寞的天空初中作文【经典5篇... 寂寞的天空初中作文 篇一寂寞的天空天空,是一片广袤无垠的蓝色宇宙,是我们向往的自由之地。然而,有时候...
初中英语作文:美味的臭豆腐(... 初中英语作文:美味的臭豆腐 篇一Stinky Tofu: A Delicious DelicacyS...
亲情作文【优质6篇】 亲情作文 篇一:珍贵的亲情亲情,是我们生命中最珍贵的财富。无论是父母的爱护、兄弟姐妹的关怀,还是亲人...
成长路上的X初一作文20篇 成长路上的X初一作文 第一篇在一生当中,“人”没有完美的,只有尽量去做到完美!但如果怕去犯错或是做错...
雨的作文(精彩6篇) 雨的作文 篇一雨是大自然的一种神奇的馈赠,它给予了我们生活的滋润和希望。每当雨水纷纷扬扬地落在大地上...