您好,欢迎访问一九零五行业门户网

Java 9中的类加载器有哪些变化?

所有java程序都运行在java虚拟机(jvm)上。编译后,java 类将转换为平台和与机器无关的字节码,并且编译后的类存储为.class 文件。每当我们尝试使用它时,classloader都会将该类加载到内存中。当通过名称引用这些类时,这些类就被引入到 java 环境中。一旦类开始运行,类的加载就由类加载器完成,并且 ma​​in() 方法是启动该类的一种方法。
java 9 中的类加载器有一些小的变化:
系统类加载器 在 java 9 中不再存在,它是 的一个实例>urlclassloader,而是一个内部类。它是模块中类的默认加载器。扩展类加载器已重命名为平台类加载器。 java se 平台中的所有类都可以通过平台类加载器可见,并且 java 社区进程下的模块中但不属于 java se 平台的类也可以通过平台类加载器可见。应用程序不能依赖于定义哪个平台类的类加载器,java se 平台中的某些类是由平台类加载器定义的,而其他类则是由引导类加载器定义的.如果现有代码创建的类加载器以引导类加载器作为父类加载器,那么我们需要更改为使用平台类加载器作为父类加载器。平台类加载器不是urlclassloader的实例,而是一个内部类。引导类加载器是一个 >jvm的内置类加载器。然而,它定义了关键模块的类,例如基础。使用 -xbootclasspath/a 部署的应用程序或使用 null 作为父级创建类加载器的应用程序可能需要更改。 ul>示例public class classloadertest { public static void main(string args[]) { system.out.println("class loader test"); classloadertest test = new classloadertest(); try { test.showclassloaders(); } catch(classnotfoundexception cnfe) { system.out.println(cnfe.getmessage()); } } public void showclassloaders() throws classnotfoundexception { system.out.println("classloader of this class: " + classloadertest.class.getclassloader()); system.out.println("classloader of permission: " + java.sql.sqlpermission.class.getclassloader()); system.out.println("classloader of linkedlist: " + java.util.linkedlist.class.getclassloader()); return; }}
输出class loader testclassloader of this class: jdk.internal.loader.classloaders$appclassloader@504bae78classloader of permission: jdk.internal.loader.classloaders$platformclassloader@299a06acclassloader of linkedlist: null
以上就是java 9中的类加载器有哪些变化?的详细内容。
其它类似信息

推荐信息