文章目录

  • 一、反射的定义
    • 二、反射常用的方法
      • 三、撸代码(都有解释)
        • (1) 获取类对象
        • (2) 获取构造器
        • (3) 获取成员变量
        • (4)获取成员方法
      • 四、分享交流

点进来的小伙伴,都是爱,要是再点个赞那就更感激不尽了。

一、反射的定义

  • 官方的解释:

Java的反射( reflection )机制是指在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象的属性和方法。这种动态获取程序信息以及动态调用对象的功能称为Java语言的反射机制。反射被视为动态语言的关键

  • 我的解释:

反射其实就是一面镜子,类的一个镜子,就像我们每天早上照的镜子,将类的所有情况都看的一清二楚,并将每个部分又单独的封装成一个各自的类,然后这面镜子就是类对象

如果感觉羞涩难懂,那你看看代码就明白了

二、反射常用的方法

  • java代码的三个阶段
  • 获取Class对象的方式
  • Class对象的常见功能(API)

三、撸代码(都有解释)

(1) 获取类对象

Teacher类

package chen.com.reflex_study;/*** java反射的学习:*  author:放牛娃学编程*  公众号:放牛娃学编程(精彩文章都在这)*/
public class Teacher {private String sex;private int age;private int height;public int salary;public int subject;public Teacher(String sex, int age, int height) {this.sex = sex;this.age = age;this.height = height;}public Teacher() { }public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public int getHeight() {return height;}public void setHeight(int height) {this.height = height;}public int getSalary() {return salary;}public void setSalary(int salary) {this.salary = salary;}public int getSubject() {return subject;}public void setSubject(int subject) {this.subject = subject;}@Overridepublic String toString() {return "Teacher{" +"sex='" + sex + '\'' +", age=" + age +", height=" + height +", salary=" + salary +", subject=" + subject +'}';}public void run(int koilemeter) {System.out.println("我可是"+koilemeter+"跑步冠军哟!");}
}

获取构造器

package chen.com.reflex_study;/*** java反射的学习:*  author:放牛娃学编程*  公众号:放牛娃学编程(精彩文章都在这)*/public class ReflexTest {public static void main(String[] args) throws Exception {// 获取类对象,有三种方式/*** 1. Class.forName(str), str时要反射类的全限定类名* 2. 类名.class , 类名指的时需要反射的类名* 3. 对象.getClass(), getClass()方法在Object类中定义*/// 1. Class.forName(str), str时要反射类的全限定类名Class cls = Class.forName("chen.com.reflex_study.Teacher");System.out.println("cls = " + cls);System.out.println("-----------------");// 2. 类名.class , 类名指的时需要反射的类名Class cls2 = Teacher.class;System.out.println("cls2 = " + cls2);System.out.println("-----------------");// 3. 对象.getClass(), getClass()方法在Object类中定义Teacher teacher = new Teacher();Class cls3 = teacher.getClass();System.out.println("cls3 = " + cls3);System.out.println((cls == cls2));System.out.println((cls2 == cls3));}
}

(2) 获取构造器

package chen.com.reflex_study;import java.lang.reflect.Constructor;/*** java反射的学习:*  author:放牛娃学编程*  公众号:放牛娃学编程(精彩文章都在这)*/
public class ReflexTest02 {public static void main(String[] args) throws Exception {// 通过获取到的类对象,再获取其它相应的东西(比如成员变量,方法,构造器)// 1. 获取构造器/*** a. Constructor<?>[] getConstructors()*  返回一个数组包含 Constructor物体反射所有的 类对象表示的类的公共构造函数* b. Constructor<T> getConstructor(类<?>... parameterTypes)*  返回一个 Constructor对象反映指定的公共构造函数的 类对象表示的类。* c. Constructor<T> getDeclaredConstructor(类<?>... parameterTypes)*  返回一个 Constructor对象反映指定的构造函数的类或接口的 类对象表示。* d. Constructor<?>[] getDeclaredConstructors()*  返回 Constructor物体反射所有的构造函数通过 类对象表示的类中声明一个数组。*/Class teacherClass = Teacher.class;// b. 获取构造器Constructor constructor = teacherClass.getConstructor();// 用构造器创建对象Object o = constructor.newInstance();System.out.println("o = " + o);System.out.println("-----------------");// b. 获取带参构造器Constructor constructor1 = teacherClass.getConstructor(String.class, int.class, int.class);Object o1 = constructor1.newInstance("老王八", 28, 180);System.out.println("o1 = " + o1);System.out.println("-----------------");// d. 返回所有构造器函数Constructor[] cons = teacherClass.getDeclaredConstructors();for (Constructor con : cons) {System.out.println(con);}}
}

(3) 获取成员变量

package chen.com.reflex_study;import java.lang.reflect.Field;/*** java反射的学习:*  author:放牛娃学编程*  公众号:放牛娃学编程(精彩文章都在这)*/
public class ReflexTest03 {public static void main(String[] args) throws Exception {// 2. 获取成员变量/*** a. Field getField(String name)*  返回一个 Field对象反映的类或接口的 类对象表示的指定公共成员。* b. Field[] getFields()*  返回一个数组包含 Field物体反射的类或接口的 类对象代表所有可访问的公共领域* c. Field getDeclaredField(String name)*  返回一个对象,反映了 Field指定声明字段的类或接口的 类对象表示。* d. Field[] getDeclaredFields()*  返回 Field物体反射所有字段的类或接口的 类对象表示声明数组。*/// 获取类对象Class teacherClass = Teacher.class;// b. Field[] getFields(), 私有的不能够访问Field[] fields = teacherClass.getFields();for (Field field : fields) {System.out.println(field);}System.out.println("-------------");// d. Field[] getDeclaredFields()Field[] fields1 = teacherClass.getDeclaredFields();for (Field field : fields1) {System.out.println(field);}// 用获取到的成员变量, 然后进行赋值操作Field salary = teacherClass.getField("salary");Teacher teacher = new Teacher();// 获取值Object o = salary.get(teacher);System.out.println("teacher.getSalary() = " + o);// 赋值salary.set(teacher,5800);System.out.println("teacher.getSalary() = " + teacher.getSalary());System.out.println("-------------");// 暴力反射(获取私有属性)Field sex = teacherClass.getDeclaredField("sex");sex.setAccessible(true);sex.set(teacher,"female");System.out.println("teacher.getSalary() = " + teacher.getSex());}
}

(4)获取成员方法

package chen.com.reflex_study;import java.lang.reflect.Method;/*** java反射的学习:*  author:放牛娃学编程*  公众号:放牛娃学编程(精彩文章都在这)*/
public class ReflexTest04 {public static void main(String[] args) throws Exception {// 获取成员方法/*** a. Method getMethod(String name, 类<?>... parameterTypes)*  返回一个 方法对象反映的类或接口的 类对象表示的指定公共成员方法。* b. Method[] getMethods()*  返回一个数组包含 方法物体反射所有的类或接口的 类对象表示的公共方法,包括那些由类或接口的超类和超接口继承的声明。* c. Method getDeclaredMethod(String name, 类<?>... parameterTypes)* 返回一个 方法对象反映指定声明方法的类或接口的 类对象表示。* d. Method[] getDeclaredMethods()* 返回一个数组包含 方法物体反射所有声明的方法的类或接口的 类对象,代表包括公众、保护,默认(包)的访问,和私有方法,但不包括继承的方法。*/// 获取类对象Class<Teacher> teacherClass = Teacher.class;// b. Method[] getMethods()Method[] methods = teacherClass.getMethods();for (Method method : methods) {System.out.println(method);}System.out.println("-------------------");// 获取方法Method method = teacherClass.getMethod("run", int.class);// 执行方法Teacher teacher = new Teacher();method.invoke(teacher, 1000);}
}

四、分享交流

最后有兴趣一起交流的,可以关注我的公众号:这里你能够学到很实用的技巧,不是常用的我不说,公众号回复提取码即可获取以下学习资料啦啦啦啦,喜欢就拿去吧!!

(链接时常会失效,若出现此类情况,可以加我微信:17722328325(加时请备注:学习资料))

  1. Java web从入门到精通电子书

  2. Python机器学习电子书

  3. Python400集(北京尚学堂)

  4. JavaScript项目案例、经典面试题

  5. Java300集(入门、精通)

  6. Java后端培训机构录集(同事培训内部提供)

  7. java重要知识pdf文档(价值连城呀呀,不收藏你会后悔的)



        喜欢就关注吧,点个赞吧

java反射学习---(框架设计的灵魂,你不收藏都后悔)相关推荐

  1. Java反射:框架设计的灵魂

    Java反射:框架设计的灵魂 框架:办成品软件,可以在框架的基础上进行开发 反射:将类的各个部分封装成对象,这就是反射机制 反射的好处 在程序运行的过程中,操作这些对象 可以降低程序的耦合性,提高程序 ...

  2. Java 反射:框架设计的灵魂

    作者 l 会点代码的大叔(CodeDaShu) 在学习 Java 反射之前,先让我们看看这几个概念. 01 解释型语言和编译型语言 解释型语言:不需要编译,在运行的时候逐行翻译解释:修改代码时可以直接 ...

  3. Java--反射(框架设计的灵魂)

    Java--反射(框架设计的灵魂) 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢! 说明 框架:半成品软件.可以在框架的基础上进 ...

  4. 饮水思源--浅析深度学习框架设计中的关键技术

    点击上方"深度学习大讲堂"可订阅哦! 编者按:如果把深度学习比作一座城,框架则是这座城中的水路系统,而基于拓扑图的计算恰似城中水的流动,这种流动赋予了这座城以生命.一个优雅的框架在 ...

  5. 基于JAVA英语学习网站设计与实现计算机毕业设计源码+数据库+lw文档+系统+部署

    基于JAVA英语学习网站设计与实现计算机毕业设计源码+数据库+lw文档+系统+部署 基于JAVA英语学习网站设计与实现计算机毕业设计源码+数据库+lw文档+系统+部署 本源码技术栈: 项目架构:B/S ...

  6. 大学四年Java后端学习路线规划,所有私藏资料我都贡献出来了,不看毕业肯定后悔!!!

    一定要走在学校前面自学,规划好自己的时间,按照自己的路线走. 大学四年Java后端学习路线规划,所有私藏资料我都贡献出来了,不看毕业肯定后悔!!! 学习路线与资源方法 一.第一件事,很重要!!! 二. ...

  7. java反射总结(框架灵魂)

    反射库(reflection library) 提供了一个非常丰富且精心设计的工具集, 以便编写能够动态操纵 Java 代码的程序.这项功能被大量地应用于 JavaBeans 中,它是 Java 组件 ...

  8. java深度学习框架Deeplearning4j实战(一)BP网络分类器

    1.Deeplearning4j 深度学习,人工智能今天已经成了IT界最流行的词,而tensorflow,phython又是研究深度学习神经网络的热门工具.tensorflow是google的出品,而 ...

  9. java反射学习(适合新人)

    有很多面试的同学整天背那些官方并且浅薄的面试答案,而不知道其的原理,或则说根本就不知道具体的作用,所以呢,小子不才,就准备做一个课程系列,针对于各大面试题,来一个概括性的讲述,虽然不是特别具体,但是用 ...

  10. 一起学JAVA 反射学习(超详细)

    1 什么是反射? Reflection(反射) 是 Java 程序开发语言的特征之一,它允许运行中的 Java 程序对自身进行检查,或者说"自审",也有称作"自省&quo ...

最新文章

  1. [SCOI2008]奖励关(期望dp)
  2. java数据模型公共类_UML数据建模工具之Enterprise Architect(EA)实例
  3. Kali Linux重新支持RTL8814au芯片
  4. 软件测试沟通技巧,你到底应该如何沟通:沟通的技巧
  5. 删零c语言,C语言(请不要删)
  6. 利用var_export 写缓存配置
  7. 前端学习(2077):开始回顾
  8. pdoModel封装
  9. 报错 The CUDA compiler identification is unknown;No CMAKE_CUDA_COMPILER could be found.
  10. mysql表文件创建_php文件创建mysql的表
  11. [linux]查看机器有几个cpu,是否支持64位
  12. 如何能够快速创建自己的APP应用?
  13. linux php 集成安装,1.2.2 XAMPP-Linux版PHP集成化安装包
  14. matlab中solver函数_matlab solve函数的用法
  15. 文本串加密和解密程序
  16. 【支付宝商家中心】支付功能签约,产品签约失败;修改经营类目;系统检测到您的账户不符合国家相关法律法规或《支付宝用户服务协议》约定
  17. Liunx 切换用户This account is currently not available
  18. 仿豆果美食tableview的展开和收缩效果
  19. python snownlp情感分析_SnowNLP情感分析+生成词云
  20. 介绍一下我大二开发的游戏:地下城冒险

热门文章

  1. [建筑设计].TLF-SOFT-SOFTPLAN.V13.33.bin Flaresim
  2. 小程序更新数组操作push、pop、unshift、shift
  3. java 调用odi_[转]ODI定时任务
  4. 短进程优先的调度算法详解
  5. LLS1000智能线路控制器
  6. java 登陆邮箱_java如何登陆163邮箱,获取登陆用户的好友列表(1)
  7. 佛说爱情二:前生500次的回眸才换得今生的一次擦肩而过
  8. BindingResult的使用
  9. (实战)决策树例子+画图
  10. 如何开通电子邮箱的SMTP功能