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());}

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

相关内容

热门资讯

高中体育《武术初级长拳》说课... 高中体育《武术初级长拳》说课稿  很多老师不知道说课稿怎么写?格式是怎么样的?下面YJBYS小编为大...
《初识“WPS演示”》教学反... 《初识“WPS演示”》教学反思本次教学结束后,我进行了深刻的教学反思。本课是学生学习WPS演示的第一...
小学运动会通讯稿 小学运动会通讯稿(通用7篇)  通讯,是运用记叙、描写、抒情、议论等多种手法,具体、生动、形象地反映...
运动会通讯稿20字左右   运动会的每个参与者都值得我们尊敬,以下是小编推荐的运动会通讯稿20字左右,欢迎阅读!  1、致长...
《我的叔叔于勒》说课稿 《我的叔叔于勒》说课稿(精选5篇)  作为一位兢兢业业的人民教师,就难以避免地要准备说课稿,借助说课...
一年级新少先队员代表发言稿   以下是小编整理的新少先队员代表发言稿,欢迎阅读。  篇一:新少先队员代表发言稿  敬爱的老师、亲...
《狼牙山五壮士》语文说课稿 《狼牙山五壮士》语文说课稿  “狼牙山五壮士”是指在抗日战争时期,在河北省易县狼牙山战斗中英勇抗击日...
高中生国旗下讲话稿主题   国旗随着雄壮的国歌在校园中冉冉升起,整个校园弥漫着庄严肃穆的氛围,能够激发学生发自内心的高尚情感...
抒情朗诵稿件1分钟 抒情朗诵稿件1分钟  抒情朗诵有哪些形式  1、自由朗读。  自由朗读,是断断续续的,是反反复复的,...
国庆节主题国旗下讲话稿 国庆节主题国旗下讲话稿  不知不觉又到了一年一度的国庆节了,这是一个举国同庆的节日,这是祖国的生日,...
工作会议上表态发言稿 工作会议上表态发言稿(精选10篇)  在现实社会中,发言稿使用的情况越来越多,发言稿可以帮助发言者更...
一分钟能干什么评课稿 一分钟能干什么评课稿范文  数学教学,要紧密联系学生的生活实际,从学生的生活经验和已有知识出发,创设...
高中趣味运动会加油稿 高中趣味运动会加油稿  无论结局是好是坏, 无怨无悔是我们的选择 ,高中趣味运动会加油稿。每当运动员...
运动会50字加油稿大全 运动会50字加油稿大全  一、运动会简介  运动会指体育运动的竞赛会,有奥运会等大型运动会,只是范围...
辩论赛新闻稿 辩论赛新闻稿(精选7篇)  随着社会在进步,我们都不可避免地要接触到新闻稿,新闻稿是公司/机构/政府...
观潮特级教师说课稿 观潮特级教师说课稿范文  作为一位优秀的人民教师,有必要进行细致的说课稿准备工作,是说课取得成功的前...
陈情表高三语文说课稿 陈情表高三语文说课稿(通用11篇)  作为一名教师,常常需要准备说课稿,说课稿有利于教学水平的提高,...
语文课程《妈妈睡了》说课稿 语文课程《妈妈睡了》说课稿范文  作为一名专为他人授业解惑的人民教师,往往需要进行说课稿编写工作,借...
清华大学毕业典礼讲话稿 清华大学毕业典礼讲话稿范文(精选9篇)  在现在社会,我们都不可避免地要接触到讲话稿,讲话稿可以起到...
足球脚内测传球说课稿 足球脚内测传球说课稿  在教学工作者实际的教学活动中,常常要根据教学需要编写说课稿,借助说课稿可以有...