zoukankan      html  css  js  c++  java
  • 8.1.18示例:使用forName()的扩展

    不同之处在于,loadClass()试图保证被装载的类型是被装载到用户自定义的类装载器的命名空 间里,而forName()试图确认所需的类型被装载到当前命名空间中,这个当前命名空间就是类 型(该类型的方法包括forName ()调用)所属的定义类装载器的命名空间。

    因为forName ()从类EasyGrect的main ()方法中被调用,forName ()请求装载所需类型 的类装载器就是EasyGreet的定义类装载器。当在Sun的Java2 SDK1.2版本下运行的时候,装载 EasyGreet的就是系统类装载器,它会在类路径中寻找类。要使用类路径环境变量,可以通过一 个如下的命令行执行随书光盘中linking/ex7目录下的EasyGreet程序:

    java EasyGreet Hello
    如果没有明确地在命令行或者环境变量中指定一个类路径,系统类装载器会在当前目录中 寻找所需的类型。因为当前目录(随书光盘的linking/ex7目录)中没有包含Hello.dass,系统类 装载器无法找到Hello.class。forName ()方法抛出ClassNotFoundException异常并中止,随后, EasyGreet的main ()方法也同样抛出该异常并中止:
    为了能让EasyGreet找到Hello.class,只需要在类路径中包含greeters目录,这可以通过在命 令行使用“-cp”选项指定,如下所示:
    java -cp .;greeters;EasyGreet Hello
    使用Greet中GreeterClassLoader的loadClass ()方法与EasyGreet中使用forName ()方法的 最重要的区别就是,被装载的greeter类所被装载入的命名空间不同。在Greet里,greeter类被装 载到GreeterClassLoader的命名空间;在EasyGreet里面,greeter类被装载到系统类装载器的命名空间。

  • 相关阅读:
    搞懂 Python 中多继承与Mixin设计模式
    Python 中的新式类和经典类的区别?
    值得收藏!15个 Pythonic 的代码示例
    windows启动nacos1.3.2
    Linux完成MySQL安装,本地连接时出现1064错误
    vagrant安装的坑
    AvaloniaUI TextBox 不能显示中文的问题解决
    [笔记] zookeeper 本地测试部署
    docker: Error response from daemon: Ports are not available
    smartsql 入门使用踩坑笔记
  • 原文地址:https://www.cnblogs.com/mongotea/p/11979779.html
Copyright © 2011-2022 走看看