反射机制是什么

反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

反射机制能做什么

反射机制主要提供了以下功能:

  • 在运行时判断任意一个对象所属的类;

  • 在运行时构造任意一个类的对象;

  • 在运行时判断任意一个类所具有的成员变量和方法;

  • 在运行时调用任意一个对象的方法;

  • 生成动态代理。

反射机制的优点与缺点 

为什么要用反射机制?直接创建对象不就可以了吗,这就涉及到了动态与静态的概念, 
    静态编译:在编译时确定类型,绑定对象,即通过。 
    动态编译:运行时确定类型,绑定对象。动态编译最大限度发挥了java的灵活性,体现了多 
    态的应用,有以降低类之间的藕合性。 
    一句话,反射机制的优点就是可以实现动态创建对象和编译,体现出很大的灵活性,特别是在J2EE的开发中 
    它的灵活性就表现的十分明显。比如,一个大型的软件,不可能一次就把把它设计的很完美,当这个程序编 
    译后,发布了,当发现需要更新某些功能时,我们不可能要用户把以前的卸载,再重新安装新的版本,假如 
    这样的话,这个软件肯定是没有多少人用的。采用静态的话,需要把整个程序重新编译一次才可以实现功能 
    的更新,而采用反射机制的话,它就可以不用卸载,只需要在运行时才动态的创建和编译,就可以实现该功 
    能。 
       它的缺点是对性能有影响。使用反射基本上是一种解释操作,我们可以告诉JVM,我们希望做什么并且它 
    满足我们的要求。这类操作总是慢于只直接执行相同的操作。

反射的应用

package day18;import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.Arrays;class Student{private int no;public String name;public Student() {System.out.println("无参构造");}public Student(int no, String name) {this.no = no;this.name = name;System.out.println("带参构造:"+no+","+name);}public void f1() {System.out.println("无参无返回值得方法f1");}public String f2(String s,int n) {return "串"+s+":"+n;}
}
public class TestClass1 {public static void main(String[] args) throws Exception {// Class反射//运行 期  获得类中的信息//先获得 字节码文件的对象Class<?> c = Class.forName("day18.Student");
//        Class<Student> c = Student.class;
//        Class<? extends Student> c = new Student().getClass();//属性----------------------------------------------------------System.out.println("-------------------属性 ----------------------");
//        Field [] fs = c.getFields();//public Field [] fs = c.getDeclaredFields();//所有属性for(Field f: fs) {System.out.println(f.getName());System.out.println(f.getType());System.out.println(Modifier.toString(f.getModifiers()));}Field f1 = c.getDeclaredField("name");Object obj = c.newInstance();//调用构造f1.set(obj, "Tom");System.out.println(f1.get(obj));Field f2 = c.getDeclaredField("no");f2.setAccessible(true);//设置允许访问权限f2.set(obj, 11);System.out.println(f2.get(obj));//方法----------------------------------------------------------------System.out.println("------------------方法--------------------------");Method [] ms = c.getDeclaredMethods();for(Method m :ms) {System.out.println(m.getName());System.out.println(m.getReturnType());System.out.println(Arrays.toString(m.getParameterTypes()));}Method m1 = c.getDeclaredMethod("f1");m1.invoke(obj);Method m2 = c.getDeclaredMethod("f2", String.class,int.class);System.out.println(m2.invoke(obj, "hello",123));//构造--------------------------------------------------------------System.out.println("-------------------构造--------------------------------");Constructor<?> [] crs = c.getDeclaredConstructors();for(Constructor cr :crs) {System.out.println(cr.getName());System.out.println(Arrays.toString(cr.getParameterTypes()));}Constructor cr1 = c.getDeclaredConstructor();cr1.newInstance();Constructor cr2 = c.getDeclaredConstructor(int.class,String.class);cr2.newInstance(111,"郭靖");}}

Day18 (二)反射相关推荐

  1. java 反射应用_java反射(二)--反射应用案例

    一.反射实例化对象 经过一系列的分析之后发现虽然可以获取Class类的实例化对象,但是依然觉得这个对象的获取意义不是很大,因此可以通过以下几个案例去理解反射的核心意义 --反射实例化对象:获取Clas ...

  2. spring(二)-反射、动态代理

    主要是对上一篇文章中涉及到的点做补充,欢迎指正! 1.  java反射知识-Spring IOC 依赖注入 Java反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类:在运行时构造任意一个 ...

  3. 自学Java day18 jvav反射专题 从jvav到架构师

    反射是jvav被视为动态语言的关键,可以让程序创建和控制任何类的对象,无需提前硬编码目标类,极大的提高了程序的灵活性和扩展性,降低模块的耦合性,提高自身的适应能力.反射机制是构建框架技术的基础所在,使 ...

  4. Java安全(二) 反射

    反射相关概念 反射是Java的特征之一,是一种间接操作目标对象的机制,核心是JVM在运行状态的时候才动态加载类,对于任意一个类都能够知道这个类所有的属性和方法,并且对于任意一个对象,都能够调用它的方法 ...

  5. 对抽象工厂+反射+配置文件的实例理解

    第一遍学习设计模式时,总有飘飘然的感觉.<大话设计模式>这本书虽然读起来挺有趣味,也感觉比其他讲设计模式的书好理解一些.但是真要用在机房收费系统时还是费劲的.米老师讲过:思想要上移,行动要 ...

  6. (Java)注解和反射

    文章目录 注解和反射 一. 注解 1.1 元注解 1.2 内置注解 1.3 自定义注解 二. 反射 2.1 什么是反射 2.2 Class类 2.3 创建Class类的方式 2.4 所有类型的Clas ...

  7. python 元类的call_python3 全栈开发 - 内置函数补充, 反射, 元类,__str__,__del__,exec,type,__call__方法...

    python3 全栈开发 - 内置函数补充, 反射, 元类,__str__,__del__,exec,type,__call__方法 一, 内置函数补充 1,isinstance(obj,cls)检查 ...

  8. java 有哪些反射机制_Java 的反射机制你了解多少?

    不知道多少次听说过了Java反射机制的使用,比如:Spring 框架如何实例化IoC容器中的Bean,编码过程中如何动态的清理对象中的字段信息等等.工作中只是听说.看同事们编码实践,但是自己却只是概念 ...

  9. 反射的基本知识(详解)

    一:反射的引出 1:问题 比如我们给出一个student类 其方法show(),我们将其写入配置文件中:现在我们来一个新的需求说是要改变重写一个show()方法 show()2,那么如何在不修改源码的 ...

  10. Python学习——02-Python基础——【9-面向对象进阶】——isinstance(obj,cls)、反射等...

    一 isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象 1 class Foo(objec ...

最新文章

  1. 怎么请假显智商高?评论区亮了! | 每日趣闻
  2. C语言字符串字母移位
  3. Java中BigDecimal的一个除法异常
  4. Ubuntu 添加、删除ppa源
  5. PHP小程序码扫码登录网站,WeAuth微信小程序实现PC网站扫码授权登录
  6. ubuntu18安装vnpyv1.9.2之二
  7. 为啥俺要写博客--凭什么?
  8. SaaS是什么?我们为什么要做SaaS?
  9. 我!程序媛!上家阿里巴巴,下家字节跳动!薪资翻番!选择裸辞躺平!无限期休息!...
  10. JavaScript 小案例 弹幕
  11. [赛后总结]G2022 Regular Contest 02总结
  12. 【R1CS to QAP】
  13. H5性能测试(优化建议)
  14. su与su - 命令详解
  15. Spring的四种注入方式
  16. python实现简易聊天需要登录_python socket编程 实现简单p2p聊天程序
  17. 太魔人共祝四周年生日快乐!
  18. 思科AP常见型号和WiFi标准POE标准对应表
  19. 计算机的假桌面,给电脑桌面放个假!极品桌面抢先评测
  20. 帝亚吉欧通过使用 Liquid UI 简化和卸载他们的 SAP PM 每年为每位员工节省 9 万美元。

热门文章

  1. 编程中python怎么读-Python编程怎么学习好?老男孩Python入门
  2. python乘法口诀表-用python打印99乘法口诀表
  3. 编程入门python语言是多大孩子学的-Python 适合初学编程的人学吗?
  4. python3.6.5安装教程-Centos7 安装Python3.6.5步骤
  5. 学python有哪些用途-初入门学习python有哪些用途?
  6. python读文件操作-python文件操作读取文件写入文件
  7. python基础教程第4版-Python基础教程(第3版) 笔记(四)
  8. python 是什么类型的语言-Python什么意思是一门什么样的语言
  9. python基础教程第二版下载-Python基础教程(第2版)
  10. zuul框架设计与实现