`
李史斌
  • 浏览: 2918 次
  • 性别: Icon_minigender_1
最近访客 更多访客>>
社区版块
存档分类
最新评论

Java反射机制收藏

    博客分类:
  • Java
阅读更多
Java中反射机制详解
反射:

  可以动态的获取指定类中的成员,以及建立类对象。

好处:提高了程序的扩展性。

张三,李四等这些生活中的对象,可以通过Person类的形式对其进行描述。

当class文件产生以后,这些class文件也是生活中的事物,那么对这些class文件也可以进行描述,该描述对应的类型就是Class。

在java中,每一个字节码文件都有一一个与之对应的Class对象。不仅包括引用数据类型,也包括基本数据类型。int.Class

1 String.class----Class2 3      Class class1=String.class;4 5      String s="abc";6      Class class2=s.getClass();7 8      Class class3 = Class.forName("java.lang.String");
以上就是获取字节码文件的三种方式。

     以前操作对象的时候用的是new关键字完成,并通过对象.成员方式进行调用

1  Person p= new Person();2         //1.光加载Person.class文件。3         //2.对对象进行初始化。4         p.function("heihei");5         //在对象调用成员方法时,需要明确两个因素:6                 1.对象  2.获取参数列表
现在可以通过字节码对象完成以上动作。

1  //加载Person.class文件,获取Person.class文件对象的Class对象2         Class clazz = Class.forName("Person");3         //通过字节码文件对象,对指定类进行创建并初始化。4         Person p=(Person)clazz.newInstance();5         //通过对象调用成员6         //p.function("heihei");
类可以作为参数进行传递,那么方法也一样可以作为参数进行传递,因为方法存在于字节码文件内, 所以可以通过Class对象获取字节码文件中的内容。

Method m =  Class.getMethod("function",String.class);        m.invoke(p,"heihei");
类或者方法都作为参数传递这样对于开发到底有那些好处呢?

需求:设计一个主板,为了提高后期的扩展性,也就是为了后期提高电脑的额功能,对外提供了PCI的接口。以方便电脑功能的扩展。

1  interface PCI{ 2                      void open(); 3                       void close(); 4                 } 5                 class MainBoard{ 6                     public void usePCI(PCI p){ 7                         p.open(); 8                         p.close(); 9                         }10                 }11                 class MainBoardDemo{12                     public static void main(String[] args){13                         MainBoard mb=new MainBoard();14                            //mb.usePCI(null);15                                 mb.usePCI(NetCard);16                         }17                 }
后期,要进行电脑功能的扩展,需加入一个网卡,只需要定义一个网卡类实现PCI接口,只要覆盖这个规则,主板就可以使用该板卡。

1 class NetCard implements PCI{2                       public void open();{3                              system.out.println("open");4                         }5                           public void close();{6                              system.out.println("close");7                         }8                 }
  那么为了使用其网卡,还需要做一个步骤就是在已定义好的应用程序中,建立网卡对象,并作为参数传入,那么就是对原有的程序进          行修改。这样不利于程序的健壮性。

        可不可以在不修改源码的基础上运行后期出现的这些子类对象呢?

        只要在前期设计时,将后期指定的类进行对象的建立,这样后期的子类对象就不需要再建立对象,只要将子类名称告知即可。

        为了获取后期对象,并在前期可以使用,或对外提供了一个配置文件。前期程序可以直接操作该配置文件,后期的子类只需要将子类          名称存入配置文件即可。

        这时就需要动态的获取指定的类并预先创建对象

1 就用到了反射机制。重新修改一下应用程序。
2            class MainBoardDemo{
3                     public static void main(String[] args){ 4                         MainBoard mb=new MainBoard(); 5                         File file=new File("conf.txt"); 6                         BufferenReader buff = new BufferenReader(new FileReader(file));
7                         String className = buff.readLine(); 8                         Class clazz = Class.forName(className); 9                         PCI p = (PCI)clazz.newInstance();
10                         mb.usePCI(p);
11                         }
12                 }

配置文件conf.txt

        当后期出现网卡或者声卡的时候,只需要将该子类的全类名存入配置文件即可, 源程序不需要进行修改

        在该例中,可以了解,反射给我们的程序带来了很强的扩展性。
分享到:
评论

相关推荐

    java C++ 书籍收藏

    - 反射机制允许在运行时动态访问和修改类和对象的属性和方法。 - Class.newInstance:创建类的新实例,常用于反射。 2. 工具类和常量 - java.lang.Math、java.util.Arrays、java.util.Collections:这些类提供...

    Java经典代码(绝对值得收藏)

    7. **反射与注解**:反射机制允许在运行时动态获取类的信息并操作对象,注解提供了一种元数据的方式,可以用于配置、验证或自动生成代码。经典代码可能会使用反射来实现动态代理,或者用注解进行代码的自我描述。 8...

    Java代码收藏.rar

    9. **反射API**:反射机制允许在运行时动态地获取类的信息并操作类的对象,是Java平台的一个强大功能,常用于框架开发和自动化测试。 10. **注解(Annotation)**:注解提供了一种元数据方式,可以用来标记代码,...

    java面试题库 整合完美收藏版

    这个“java面试题库 整合完美收藏版”包含了丰富的Java基础、进阶、框架以及实战相关的问题,旨在帮助应聘者全面了解并掌握Java技术栈。 一、Java基础知识点 1. Java语法:包括数据类型(如基本类型和引用类型)、...

    收藏20200425-223758_java_

    2. **进阶主题**:如异常处理、反射机制、线程同步、内存管理(垃圾回收)、集合框架(ArrayList、LinkedList、HashMap等)以及IO流的使用。 3. **Java框架**:Spring、MyBatis、Hibernate等常用Java框架的介绍和...

    精品资料(2021-2022年收藏)信息工程系Java专业实习报告..doc

    5. **反射机制**:Java反射机制允许程序在运行时动态地获取类的信息(如类名、属性、方法等)并调用。这对于动态加载类、创建对象、访问私有成员等具有重要意义。 6. **项目实践**:通过实际项目如SMS超市管理系统...

    Java API帮助文档

    Java API帮助文档是Java开发人员不可或缺的资源,它包含了Java平台标准版(Java SE)的所有公共类、接口、方法...提供的"JAVA帮助文档.CHM"和"JAVA帮助文档.chw"文件是查阅这些知识的便捷途径,值得开发者收藏和参考。

    Java基础知识总结 - 超详细篇收藏.zip

    10. **反射机制**:Java反射API允许程序在运行时动态地获取类的信息(如类名、方法名)并进行操作,是实现元编程的重要手段。 11. **注解(Annotation)**:注解为编译器和开发工具提供元数据,可以用于代码的编译...

    精品资料(2021-2022收藏)JAVA+android-.doc

    此外,资料还涵盖了JAVA的新特性,如Assert、Generic、Enum、Annotation、Static Import、Autoboxing、Unboxing等,并介绍了反射机制的使用。 面向对象编程部分,详细解析了类和对象、面向对象的三大特征(封装、...

    JAVA 范例开发大全 源代码

    8. **反射机制**:在运行时动态访问类的信息,如创建对象、调用方法、获取字段等。 9. **泛型**:提高代码的复用性和安全性,以及泛型集合的使用。 10. **JDBC**:数据库连接、查询、插入、更新和删除数据的方法,...

    2021-2022年收藏的精品资料软件工程师Java字节码开发深入解析教程解释.docx

    - 字节码在Java反射机制中扮演关键角色。通过字节码,我们可以动态地调用类的方法、访问字段,甚至修改类的行为。这对于构建动态代理、元编程框架(如Spring AOP)等高级功能非常有用。 总结来说,Java字节码是JVM...

    java高手的文章合集

    7. **反射机制**:允许程序在运行时动态地获取类的信息并调用其方法,是Java的一大特色。 8. **JVM**:Java虚拟机是Java程序的运行环境,理解其内存模型、垃圾回收机制对优化程序性能有直接影响。 9. **设计模式**...

    基于JAVA技术的搜索引擎的研究报告及实现收藏.doc

    同时,JAVA的反射机制和动态代理功能使得索引结构的扩展和优化变得灵活。 **2.2.3 Web服务器** JAVA的Servlet和JSP技术用于构建搜索引擎的后端服务,处理用户的查询请求。Tomcat、Jetty等JAVA应用服务器提供了稳定...

    C++_Java_Python2三个标准库的离线API

    Java API文档还涵盖了反射(Reflection)和注解(Annotation)等高级特性,帮助开发者深入理解Java的内在机制。 最后是Python2的API文档。Python2虽然已经停止更新,但在许多项目中仍被广泛使用。Python以其简洁...

    全新java实践教程

    此外,实践教程可能还会涉及更高级的主题,如设计模式、反射、注解、泛型、Lambda表达式、Stream API、并发编程库(如ExecutorService和Future)以及Java 8及更高版本的新特性。 通过这个全新的Java实践教程,你...

    超全的Java类库祥解

    8. **反射**:`java.lang.reflect`包提供了反射API,可以在运行时动态检查和操作类、接口、字段和方法,是元编程的重要工具。 9. **注解(Annotation)**:自Java 5起,注解成为一种元数据,可以用于编译器、应用...

    精品资料(2021-2022收藏)JAVA+android-.pdf

    - Java的IO操作、多线程、网络编程、反射机制、异常处理和设计模式也是重要的学习内容。 5. **JDBC(Java Database Connectivity)**: - JDBC是Java连接数据库的标准接口,用于执行SQL语句,处理结果集,管理...

    android JAVA源码,工具,视频,文件。经验,2年收藏网盘分享

    经验,2年收藏网盘分享”表明这个压缩包可能包含了一系列与Android开发相关的资源,包括Java源代码、开发工具、教学视频以及相关的学习文件。这些资源可能是一位有两年经验的开发者在学习和工作中积累并整理的,分享...

Global site tag (gtag.js) - Google Analytics