Java教程

第12章 扩展机制:如何使自定义API对Java平台上运行的所有应用程序可用

本文主要是介绍第12章 扩展机制:如何使自定义API对Java平台上运行的所有应用程序可用,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

1.简介

  • 通过将JAR文件放在Java Runtime Environment的目录结构中的特殊位置,在这种情况下,它称为已安装扩展。
  • 通过从另一个JAR文件的清单中以指定的方式引用JAR文件,在这种情况下,它称为下载扩展。

安装的扩展是Java Runtime Environment(JRE™)软件的lib / ext目录中的JAR文件。顾名思义,JRE是Java开发套件的运行时部分,包含平台的核心API,但没有诸如编译器和调试器之类的开发工具。JRE可以单独使用,也可以作为Java开发工具包的一部分使用。

2.类加载委托机制

扩展框架利用了类加载委托机制。当运行时环境需要为应用程序加载新类时,它将在以下位置按顺序查找该类:

  • Bootstrap类:rt.jar中的运行时类,i18n.jar中的国际化类等。
  • 已安装的扩展:JRE的lib / ext目录中的JAR文件中的类,以及系统范围内特定于平台的扩展目录中的类。
  • 类路径:类,包括JAR文件中的类,位于系统属性java.class.path指定的路径上。如果类路径上的JAR文件具有带有该Class-Path属性的清单,则Class-Path还将搜索该属性指定的JAR文件。默认情况下,该java.class.path属性的值为.当前目录。您可以使用-classpath或-cp命令行选项或设置CLASSPATH环境变量来更改值。命令行选项将覆盖CLASSPATH环境变量的设置。

Java平台使用委托模型来加载类。基本思想是每个类加载器都有一个“父”类加载器。加载类时,类加载器首先将对类的搜索“委派”给其父类加载器,然后再尝试查找类本身。

  • 实例化新的类加载器时,java.lang.ClassLoader及其子类中的构造函数允许您指定一个父级。如果您未明确指定父级,则将虚拟机的系统类加载器指定为默认父级。
  • 当被调用以加载类时,ClassLoader中的loadClass方法按顺序执行以下任务:
  1. 如果已经加载了一个类,它将返回它。
  2. 否则,它将对新类的搜索委托给父类加载器。
  3. 如果父类加载器找不到该类,则loadClass调用方法findClass查找并加载该类。
  • 如果父类加载器未找到该类,则ClassLoader的findClass方法将在当前类加载器中搜索该类。当您在应用程序中实例化类加载器子类时,您可能想覆盖此方法。
  • 类java.net.URLClassLoader充当扩展和其他JAR文件的基本类加载器,重写java.lang.ClassLoader的findClass方法以在一个或多个指定的URL中搜索类和资源。
这篇关于第12章 扩展机制:如何使自定义API对Java平台上运行的所有应用程序可用的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!