JDK源码(19)-Package

本文深入解析Java中的Package对象,包括其作用、如何存储版本信息及其实现细节。了解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. 这串字符串。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十步杀一人_千里不留行

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值