19、JDK源码解析-Package

一、概述

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

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

二、方法

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

    //在实例中按名称查找包
    public static Package getPackage(String name) {
        ClassLoader l = ClassLoader.getClassLoader(Reflection.getCallerClass());
        if (l != null) {
            return l.getPackage(name);
        } else {
            return getSystemPackage(name);
        }
    }

三、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. 这串字符串。

版权声明:本文不是「本站」原创文章,版权归原作者所有 | 原文地址: