给大家介绍一下java中的反射机制,java中反射机制更体现出了java的灵活性、多态、和类之间的耦合性。

1:反射是一种间接操作目标对象的机制,只要给定类的名字,就可以通过反设机制获取所有的类信息。

    

反射机制,我们只需要拿到这个user的名称,就可以获取到user类 里边的 属性 方法 构造等内容

2:反射机制的作用

    2.1:反编译:将 .class文件编译成.java文件   .class-->.java

    2.2:通过反射机制访问java对象的属性,方法,构造方法等。

3:通过反射获取Class类的方式

    

        //第一种方式 通过Class.forName获取Class c1 = Class.forName("com.zhibo.zyw.bdqn.Work");//第二种方式通过类 .class获取Class c2 = Work.class;  //第三种方式通过getClass去获取Work work = new Work();Class c3 =  work.getClass();

3.4 c1,c2,c3这几个类对象,都代表的是 Work的整个类  这个看也不明显,我给做个测试:

    

这样可以看出,c1,c2,c3持有的对象都是一个类型的,都获取到了我们的work类

4,在给大家演示一个关于反射机制的例子

    

/**** 水果的接口*/
public interface Fruit {void eat();
}public class Banana implements Fruit  {@Overridepublic void eat() {System.out.println("我是香蕉");}
}public class Iphone implements Fruit {@Overridepublic void eat() {System.out.println("我是苹果");}
}
/*** 工厂*/
public class Fonity {public static Fruit getFruit(String forName) {Fruit fruit = null;if ("Iphone".equals(forName)) {fruit = new Iphone();} else if ("Banana".equals(forName)) {fruit = new Orange();}return fruit;}}
public class TestMan {public static void main(String[] args) throws Exception {Fruit fruit = Fonity.getFruit("com.zhibo.zyw.bdqn.Banana");fruit.eat();}
}

  以上代码是没有采用反射机制去写的,大家看看一看有什么问题,如我们现在创建一个Orange类实现了Fruit的话,我们要获取Orange,我们就需要手动去修改我们Factior工厂里边的代码,我们修改了代码,我们的代码就会重新被编译,而且这样写的话,我们需要创建多个类都实现这个接口,我们就要反复的去修改我们的工厂

如果采用反射机制的话,就可以不用从新在编译java类

/*** 香蕉*/
public class Banana implements Fruit  {@Overridepublic void eat() {System.out.println("我是香蕉");}
}/*** 苹果*/
public class Iphone implements Fruit {@Overridepublic void eat() {System.out.println("我是苹果");}
}/*** 工厂*/
public class Fonity {public static Fruit getFruit(String forName) {Fruit fruit = null;try {fruit=Class.forName(forName).newInstance();} catch (InstantiationException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (ClassNotFoundException e) {e.printStackTrace();}return  fruit;}}public static void main(String[] args) throws  Exception {Fruit fruit =Fonity.getFruit("com.zhibo.zyw.bdqn.Banana");if (fruit!=null){fruit.eat();}}
}

在java中使用反射机制的也很多,比如: jdbc的Class.forName、spring aop动态代理底层也是反射技术,hibernate,struts2也都是用反射技术实现的。

反射缺点:
     反射包括了一些动态的类型,所有JVM无法对这些代码进行优化。所有反射的操作性能要低很多。
          还降低了可移植性,破坏了抽象性。

转载于:https://www.cnblogs.com/zhaoyuwei/p/9269454.html

java中的反射机制是什么相关推荐

  1. 浅说Java中的反射机制(一)

    在学习传智播客李勇老师的JDBC系列时,会出现反射的概念,由于又是第一次见,不免感到陌生.所以再次在博客园找到一篇文章,先记录如下: 引用自java中的反射机制,作者bingoideas.(()为我手 ...

  2. java代码安全检测机制_全面解析:java中的反射机制,内含代码验证解析

    什么是反射? 在运行状态中,对于任意一个类,都能够获取到这个类的所有属性和方法,对于任意一个对象,都能够调用它的任意一个方法和属性(包括私有的方法和属性),这种动态获取的信息以及动态调用对象的方法的功 ...

  3. formdata 接受参数中带有class 对象_浅析JAVA中的反射机制及对Servlet的优化

    今天来聊聊java中的反射机制,工作以后发现很多东西动不动就要使用反射或者动态代理,如果不能很好的理解反射,那么对于动态代理等一些重要的设计模式就会有种不够通透的感觉. 所谓的反射,就是在运行状态中, ...

  4. Java中的反射机制详讲

    Java中的反射机制详讲 1.反射机制_介绍_Class对象获取 2.反射机制_动态操作_构造器_方法_属性 3.动态编译_DanamicCompile_反射调用main方法问题 好文推荐:排序.查找 ...

  5. 【反射机制】Java中的反射机制,使用反射机制创建对象、访问属性、方法、构造方法等

    这篇文章主要是整理了Java中的反射机制,包括:反射机制概念.反射机制访问构造方法.反射机制访问普通方法.反射机制访问属性,反射机制访问修饰符. 目录 一.反射机制概念 二.反射机制使用 (1)加载C ...

  6. JAVA基础--JAVA中的反射机制详解

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

  7. 根据实例详解Java中的反射机制

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

  8. 黑马程序员,黑马论坛 ------JAVA中的反射机制

    文章来源:黑马程序员,黑马论坛 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法:这种动态获取的信息以及动态调用对象的方法 ...

  9. java 反射机制_详解Java中的反射机制的优缺点

    一.什么是反射? 对于程序员来说,应该很少需要直接使用反射工具:之所以在语言中提供它们,是为了支持其他Java特性,比如对象序列化.Java Beans以及RMI.还有就是在很多框架中,也是应用到了反 ...

最新文章

  1. OKR 落地需要相关工具的辅助吗?
  2. java bank项目答案_Java基础实战Bank项目01-04
  3. van 自定义组件_vant 自定义 van-dropdown-item的用法
  4. 05-iOS蓝牙开发总结
  5. HDU-1016 Prime Ring Problem DFS
  6. On Error Resume Next是什么意思
  7. python程序的运行速度在所有计算机语言中最快_【编程专题】实测四种编程语言的运算速度,最快的竟然是它!...
  8. 百度智能云发布『乘风』 端云一体化方案 助力人脸应用10分钟落地
  9. srgan要训练多久_SRGAN-超分辨率图像复原
  10. [ZJOI2008]生日聚会
  11. linux freemind字体,解决 ubuntu 18.04 lts freemind 或freeplane 乱码口口的问题
  12. 本科生毕业论文(设计)撰写规范
  13. java老王博客_老王的JAVA基础课:第5课 面向对象
  14. 使用二手书App的心得
  15. 图片怎么缩小尺寸比例不变?
  16. 微博推荐算法学习(Weibo Recommend Algolrithm)
  17. 联想笔记本声音太小怎么办_笔记本电脑声音变小了怎么办 这里有妙招
  18. List 集合对象比较大小
  19. JDK 8 的安装报javac不是外部或内部命令
  20. 如何用qq远程桌面链接到计算机,如何用qq远程控制电脑_qq怎么远程连接对方的电脑-win7之家...

热门文章

  1. SDIO Host层驱动
  2. 年轻代、年老代和持久代
  3. 多路IO复用(Linux)
  4. eigen 列拼接_eigen Dense矩阵拼接
  5. 那些你可能不知道的网易云音乐奇技淫巧
  6. 008-我的博友不锈钢钥匙扣上的随身金属外壳可启动U盘-20190413
  7. FleaPHP 开发指南 - 4. 命名规范和目录结构
  8. 中移动TD-LTE及对终端的要求
  9. 常用PC服务器阵列卡、硬盘健康监控
  10. 嵌入式主板在数控机床领域的应用