本篇主要介绍反射的原理及应用
下面通过一个例子来体会反射的好处。
1.首先定义一个PCI接口,里面规定了open和close方法
public interface PCI { public void open(); public void close(); }
2.定义一个实现类NetCard(网卡),实现PCI接口
public class NetCard implements PCI { @Override public void open() { System.out.println("net open"); } @Override public void close() { System.out.println("net close"); } }
3定义一个实现类SoundCard实现PCI接口
public class SoundCard implements PCI { public void open(){ System.out.println("sound open"); } public void close(){ System.out.println("sound close"); } }
4.编写主板类
public class Mainboard { public void run() { System.out.println("main board run...."); } public void usePCI(PCI p) {//PCI p = new SouncCard(); if (p != null) { p.open(); p.close(); } } }
5.编写测试类。
开始调用NetCARD 和SOUNDCARD工作,因为通过反射实现,所以需要读取配置信息。严谨高效的做法是使用XML文件,这里使用Properties集合保存信息。
PCI.properties配置信息中的数据必须是这样的
pci1=cn.itcast.reflect.test.SoundCard
pci2=cn.itcast.reflect.test.NetCard
import java.io.File; import java.io.FileInputStream; import java.util.Properties; /* * 电脑运行。 */ public class ReflectTest { /** * @param args * @throws Exception */ public static void main(String[] args) throws Exception { Mainboard mb = new Mainboard(); mb.run(); //每次添加一个设备都需要修改代码传递一个新创建的对象 // mb.usePCI(new SoundCard()); //能不能不修改代码就可以完成这个动作。 // 不用new来完成,而是只获取其class文件。在内部实现创建对象的动作。 File configFile = new File("pci.properties"); Properties prop = new Properties(); FileInputStream fis = new FileInputStream(configFile); prop.load(fis); for(int x=0; x<prop.size(); x++){ String pciName = prop.getProperty("pci"+(x+1)); Class clazz = Class.forName(pciName);//用Class去加载这个pci子类。 PCI p = (PCI)clazz.newInstance(); mb.usePCI(p); } fis.close(); } }
相关推荐
暴力反射是一种非常规的反射技术,它可以绕过Java的安全限制,强制访问私有成员和类,这在某些情况下可能会带来安全风险。 #### 14. 反射获取字节码对象方式、创建对象的两种方式 - **获取字节码对象**:可以通过...
《黑马程序员Java面试宝典》是一本专门为Java开发者准备的面试指南,包含了广泛而深入的Java技术知识,以及面试过程中可能会遇到的各种问题。这本书的完整版PDF提供了丰富的学习材料,帮助求职者提升自己的技术水平...
含面向对象,异常处理和常用类,线程技术,集合框架,IO操作,网络编程,文件操作,反射机制,
在"黑马程序员_Java基础辅导班教程课件[第01期]第13天"中,我们聚焦于Java编程语言的基础知识,这是一门面向初学者的课程,旨在帮助学员快速掌握Java开发的基本技能。第13天的课程通常会涵盖上一天(第12天)所学...
本文将主要围绕“黑马程序员------类加载器学习注意点”展开,探讨一些关键知识点。 首先,我们需要理解类加载器的基本工作原理。在Java中,类加载过程包括加载(Loading)、验证(Verification)、准备...
想进黑马必须掌握的重点知识这部分,很可能是"黑马程序员"培训课程的核心要求,可能包括高级主题,如JVM工作原理、垃圾回收机制、Spring框架、MyBatis、数据库设计与SQL等,这些都是Java开发者必备的专业技能。...
- 反射机制:Class类的使用,获取类的信息,创建对象,调用方法。 - 动态代理:了解JDK动态代理和CGLIB动态代理的原理和应用。 9. **设计模式** - 单例模式:了解懒汉式、饿汉式、双重检查锁定等单例实现方式。 ...
程序员编写代码,计算机执行这些代码,最终产生预期的结果。 2. **Java语言的特点**: - **简单性**:Java简化了C++的一些复杂特性,如指针,使得初学者更容易上手。 - **面向对象**:Java强调类和对象,支持封装...
|--aidl之结合反射获取应用缓存大小等空间占用 |--aidl调用系统service未公开的方法挂电话 |--aidl调用系统未公开的方法代码示例2 |--android dp和px之间转换 |--android INSTALL_PARSE_FAILED_MANIFEST_MALFORMED |...
总结来说,泛型提供了一种编译时的类型安全机制,而反射则提供了运行时对类元数据的操作能力。两者结合使用,可以帮助开发者编写更加灵活、安全的代码,特别是在处理动态类型和框架设计时。理解并熟练掌握这两者,...
【标题】"01_黑马程序员_张孝祥_Java基础加强_课程价值与目标介绍.zip" 提供的是一门由黑马程序员机构推出的Java基础强化课程,由讲师张孝祥主讲,旨在深入讲解Java编程的基础知识并进行能力提升。 【描述】中提到...
9. **反射**:理解反射机制,能够动态地获取类的信息和调用方法。 10. **网络编程**:学习Socket编程,包括TCP和UDP通信,理解服务器端和客户端的实现。 11. **Java API**:熟悉Java提供的各种标准库,如Math类、...
本教程出自知名教育机构黑马程序员,该机构以其深入浅出的教学方式和实用的案例著称。 在本教程中,你将学习到以下关键知识点: 1. **Java环境搭建**:首先,你需要了解如何下载和安装Java Development Kit (JDK)...
- **Java高级特性**:如集合框架、异常处理、反射机制、泛型等。 - **数据库操作**:SQL语言基础、JDBC编程、ORM框架(MyBatis/Hibernate)的应用。 - **Web开发**:HTML/CSS/JavaScript基础知识,Servlet/JSP开发...
7. **反射机制**:了解反射的基本原理,如何通过反射创建对象、调用方法、获取字段值,以及动态代理。 8. **网络编程**:Socket编程基础,TCP和UDP的区别,以及HTTP协议的理解。 9. **设计模式**:学习常见的设计...
16. **反射机制**:反射允许在运行时动态访问和修改类的信息,是Java的高级特性,常用于插件开发、元编程等场景。 17. **泛型**:泛型引入后,可以在编译时检查类型安全,减少强制类型转换,提升代码的可读性和可...
【Java编程基础】 ...以上是黑马Java教程知识点笔记的主要内容,涵盖了Java编程的基础到进阶知识,是学习和巩固Java技能的重要参考资料。通过深入理解和实践这些知识点,开发者可以逐步提升Java编程能力。
- **反射机制**:理解并运用Class类,动态加载类和创建对象。 2. **Java SE进阶**: - **泛型**:使用泛型提高代码复用性和安全性。 - **枚举与注解**:理解枚举的特性,掌握自定义注解及其元注解的运用。 - **...