飞道的博客

JDK源码(19)-Package

665人阅读  评论(0)

一、概述

Package对象包含有关Java包的实现和规范的版本信息。 该版本信息由加载该类的ClassLoader实例检索并提供。 通常,它存储在与类分发的清单中。构成包的一组类可以实现特定的规范。

在每个ClassLoader实例中,来自同一个java包的所有类都具有相同的Package对象。 静态方法允许通过名称找到一个包,或者找到当前类加载器已知的所有包的集合。

二、方法


  
  1. //返回此包的名称。
  2. public String getName()
  3. //返回此程序包实现的规范的标题。
  4. public String getSpecificationTitle ()

  
  1. //在实例中按名称查找包
  2. public static Package getPackage(String name) {
  3. ClassLoader l = ClassLoader.getClassLoader(Reflection.getCallerClass());
  4. if (l != null) {
  5. return l.getPackage(name);
  6. } else {
  7. return getSystemPackage(name);
  8. }
  9. }

三、package的作用

package 的作用就是 c++ 的 namespace 的作用,防止名字相同的类产生冲突。Java 编译器在编译时,直接根据 package 指定的信息直接将生成的 class 文件生成到对应目录下。如 package aaa.bbb.ccc 编译器就将该 .java 文件下的各个类生成到 ./aaa/bbb/ccc/ 这个目录。

import 是为了简化使用 package 之后的实例化的代码。假设 ./aaa/bbb/ccc/ 下的 A 类,假如没有 import,实例化A类为:new aaa.bbb.ccc.A(),使用 import aaa.bbb.ccc.A 后,就可以直接使用 new A() 了,也就是编译器匹配并扩展了 aaa.bbb.ccc. 这串字符串。


转载:https://blog.csdn.net/m0_37609579/article/details/103723950
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场