美文网首页
java反射

java反射

作者: yutz | 来源:发表于2019-02-22 20:31 被阅读0次

参考博客:https://www.cnblogs.com/qwop/p/6637326.html
慕课网视频教程:https://www.imooc.com/video/3733
java中,万事万物皆对象,但是里面有两个特殊的对象:普通数据类型和类。
普通数据类型有封装类作为对象,我们所写的每一个类都是java.lang.Class类的实例对象。

假如我们创建了一个类Foo,那么作为Class类的实例对象,有三种表示方式:
第一种:实际在告诉我们任何一个类都有一个隐含的静态成员变量class

Class c1=Foo.class;

第二种:已知该类的对象,那么可以通过getClass方法

Class c2=foo1.getClass();

第三种:

    Class c3=null;
    try {
        c3=Class.forName("test.ttttt.Foo");  //"类的全称"
    } catch (ClassNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } 

c1、c2、c3称为类的类类型,可以进行比较,都是相等的,并且,可以通过他们中的任何一个,创建Foo类的实例

Foo foo=(Foo)c1.newInstance();//需要有无参数的构造方法
反射应用的实例:

首先这里要了解静态加载与动态加载
动态加载:程序在运行时调用相应方法,即使其他方法是错误的,程序依旧会执行。通过动态加载可以让程序的可延长性大大提升,对以后的维护和扩展有重要意义。
静态加载:程序在编译时执行。在执行过程中加载所有可能执行到的程序。在这种加载方式下,只要加载中一个方法出错,程序就不能运行。我们一般写程序默认的是静态加载,常用的new创建对象是静态加载

下面是一个程序,根据输入创建相对应的对象

public static void main(String[] args) {
//静态加载。编译时加载,编译时就需要加载全部可能使用到的的类,一个类出错,其他类的功能都不能得到执行
  if("Word".equals(args[0])){
    Word Word = new Word();
    System.out.println("Word");
  }
  if("Excel".equals(args[0])){
    Excel excel = new Excel();
    System.out.println("Excel");
  }
}

但是当Excel类不存在时,因为静态加载,即使输入是Word,也无法执行,这时候若用动态加载,即不需要考虑Excel,如下代码,其中OfficeAble为Word类和Excel类的共同接口

public static void main(String[] args) {
try {
  //运行时加载,动态加载类
  Class c1 = Class.forName(args[1]);
  //通过类类型加载对象。
  OfficeAble rb = (OfficeAble)c1.newInstance();
  rb.startPro();
}

显而易见的好处:当程序扩展的时候,直接在接口增加功能模块,就像我们升级手机上的程序不需要下载完整的安装包一样,这个时候直接添加功能模块就可以,不用再次编译了

相关文章

  • 博客地址

    java注解-01、java注解-02、Git面试资源java反射-01、java反射-02、java反射-03为...

  • Java反射机制入门

    Java反射机制入门 一、什么是反射 JAVA反射机制(The JAVA reflection mechanism...

  • Java基础之反射

    Java基础之—反射(非常重要)Java中反射机制详解Java进阶之reflection(反射机制)——反射概念与...

  • 反射之一

    总结内容源自一下文章粗浅看java反射机制反射机制应用实践谈谈java反射机制Java Reflection(反射...

  • 反射之二

    总结内容源自一下文章粗浅看java反射机制反射机制应用实践谈谈java反射机制Java Reflection(反射...

  • Java基础之反射

    Java基础之反射 反射基本介绍 反射的使用通过反射调用属性和方法通过反射获取配置文件 反射基本介绍 Java反射...

  • Java 反射机制

    Java 反射机制 什么是反射 Java 反射是Java语言的一个很重要的特征,它使得Java具体了“动态性”。 ...

  • 一探究竟:Java反射效率低的原因到底在哪?

    预备知识 了解 Java 反射基本用法 看完本文可以达到什么程度 了解 Java 反射原理及 Java 反射效率低...

  • 面试官说:大家都说 Java 反射效率低,你知道原因在哪里么

    预备知识 了解 Java 反射基本用法 看完本文可以达到什么程度 了解 Java 反射原理及 Java 反射效率低...

  • Java面试题之JavaSE高级

    一、Java中的反射 1.说说你对Java中反射的理解 java中的反射首先是能够获取到Java...

网友评论

      本文标题:java反射

      本文链接:https://www.haomeiwen.com/subject/ihcyyqtx.html