模块  java.base
软件包  java.lang

Class Package

  • 实现的所有接口
    AnnotatedElement

    public class 软件包
    extends Object
    implements AnnotatedElement
    表示与类加载器关联的运行时包的元数据。 元数据包括注释,版本控制和密封。

    运行时包的注释在package-info.class中与运行时包中的类在相同的代码源中读取。

    组成运行时包的类集可以实现特定的规范。 定义软件包时,可以提供规范标题,版本和供应商(表明规范的所有者/维护者)。 应用程序可以使用Package.isCompatibleWith(String)方法询问软件包是否与特定规格版本兼容。 此外,在定义Package时,可以提供有关构成运行时包的实际类的信息。 此信息由实现标题,版本和供应商(指示类的供应商)组成。

    软件包可与明确定义ClassLoader.definePackage(String, String, String, String, String, String, String, URL)方法。 呼叫者提供规范和实现标题,版本和供应商。 呼叫者还指示包是否为sealed 如果软件包没有明确的运行包定义在运行时包中的类定义时,则软件包自动地被类的定义类加载器定义,如下所示。

    为命名模块中的类自动定义的软件包具有以下属性:

    • 包的名称源自类的binary names 由于命名模块中的类必须位于命名包中,因此派生名称永远不会为空。
    • 如果已知,则使用module location作为代码源密封封装。
    • 未指定规范和实现标题,版本和供应商。
    • 包装上的任何注释都是从package-info.class读取的,如上所述。

    为未命名模块中的类自动定义的软件包具有以下属性:

    • 包的名称是"" (对于未命名包中的类)或从类的binary names派生(对于命名包中的类)。
    • 包装没有密封。
    • 未指定规范和实现标题,版本和供应商。
    • 包装上的任何注释都是从package-info.class读取的,如上所述。

    软件包可以与获得Package.getPackage(String)ClassLoader.getDefinedPackage(String)方法。 由类加载器定义的每个软件包都可以使用Package.getPackages()ClassLoader.getDefinedPackages()方法获得。

    Implementation Note:
    builtin class loaders没有为命名模块中的包显式定义软件包对象。 相反,这些包是自动定义的,没有规范和实现版本控制信息。
    从以下版本开始:
    1.2
    另请参见:
    The JAR File Specification: Package SealingClassLoader.definePackage(String, String, String, String, String, String, String, URL)
    See The Java™ Virtual Machine Specification:
    5.3运行时包
    • 方法详细信息

      • getName

        public String getName()
        返回此包的名称。
        结果
        The Java™ Language Specification的 6.5.3节中定义的此包的完全限定名称,例如, java.lang
      • getSpecificationTitle

        public String getSpecificationTitle()
        返回此包实现的规范的标题。
        结果
        如果不知道,则返回规范标题 null
      • getSpecificationVersion

        public String getSpecificationVersion()
        返回此包实现的规范的版本号。 此版本字符串必须是由“。”分隔的非负十进制整数序列,并且可能具有前导零。 比较版本字符串时,会比较最重要的数字。

        规范版本号使用由句号“。”分隔的非负十进制整数组成的语法,例如“2.0”或“1.2.3.4.5.6.7”。 这允许可扩展数字用于表示主要,次要,微等版本。 版本规范由以下正式语法描述:

        SpecificationVersion:
        Digits RefinedVersionopt
        RefinedVersion:
        . Digits
        . Digits RefinedVersion
        Digits:
        Digit
        Digits
        Digit:
        any character for which Character.isDigit(char) returns true, e.g. 0, 1, 2, ...
        结果
        如果 null则返回规范版本 null
      • getSpecificationVendor

        public String getSpecificationVendor()
        返回拥有并维护实现此包的类的规范的组织,供应商或公司的名称。
        结果
        如果不知道规范供应商,则返回 null
      • getImplementationTitle

        public String getImplementationTitle()
        返回此包的标题。
        结果
        如果不知道,则返回 null的实现标题。
      • getImplementationVersion

        public String getImplementationVersion()
        返回此实现的版本。 它由此实现的供应商分配的任何字符串组成,并且没有Java运行时指定或期望的任何特定语法。 可以将此供应商针对此包用于此实现的其他包版本字符串进行相等性比较。
        结果
        如果不知道,则返回 null的实现版本。
      • getImplementationVendor

        public String getImplementationVendor()
        返回实现此包的供应商,如果 null则返回 null
        结果
        实现此程序包的供应商,如果不知道,则返回 null
      • isSealed

        public boolean isSealed()
        如果此包已密封,则返回true。
        结果
        如果包装是密封的,则为true,否则为false
      • isSealed

        public boolean isSealed​(URL url)
        如果此包相对于指定的代码源 url密封,则返回true。
        参数
        url - 代码源URL
        结果
        如果此包装相对于给定的 url密封, url
      • isCompatibleWith

        public boolean isCompatibleWith​(String desired)
                                 throws NumberFormatException
        将此软件包的规范版本与所需版本进行比较。 如果此包规范版本号大于或等于所需的版本号,则返回true。

        通过顺序地比较期望和规范字符串的相应组件来比较版本号。 每个组件都转换为十进制整数并比较值。 如果规范值大于期望值,则返回true。 如果值小于false则返回。 如果值相等,则跳过周期并比较下一对组件。

        参数
        desired - 所需版本的版本字符串。
        结果
        如果此程序包的版本号大于或等于所需的版本号,则为true
        异常
        NumberFormatException - 如果当前版本未知或所需或当前版本的格式不正确。
      • getPackage

        @Deprecated(since="9")
        public static 软件包 getPackage​(String name)
        Deprecated.
        If multiple class loaders delegate to each other and define classes with the same package name, and one such loader relies on the lookup behavior of getPackage to return a 软件包 from a parent loader, then the properties exposed by the 软件包 may not be as expected in the rest of the program. For example, the 软件包 will only expose annotations from the package-info.class file defined by the parent loader, even if annotations exist in a package-info.class file defined by a child loader. A more robust approach is to use the ClassLoader.getDefinedPackage(java.lang.String) method which returns a 软件包 for the specified class loader.
        在调用者的类加载器及其祖先中按名称查找包。

        如果调用者的类加载器定义软件包给定的名称,该软件包返回。 否则, 软件包递归方式(父对象)查找给定名称的软件包来调用调用者类加载器的祖先。

        调用此方法相当于在ClassLoader实例上调用ClassLoader.getPackage(java.lang.String) ,该实例是调用者的类加载器。

        参数
        name - 包名称,例如“ java.lang ”。
        结果
        软件包通过调用者的类加载器或其祖先,或定义的给定名称 null如果没有找到。
        异常
        NullPointerException - 如果 namenull
        另请参见:
        ClassLoader.getDefinedPackage(java.lang.String)
      • getPackages

        public static 软件包[] getPackages()
        返回调用者的类加载器及其祖先定义的所有软件包 返回的数组可能包含多个具有相同包名称的软件包对象,每个对象都由类加载器层次结构中的不同类加载器定义。

        调用此方法相当于在ClassLoader实例上调用ClassLoader.getPackages() ,该实例是调用者的类加载器。

        结果
        由此类加载器及其祖先定义的 软件包对象的数组
        另请参见:
        ClassLoader.getDefinedPackages()
      • toString

        public String toString()
        返回此Package的字符串表示形式。 它的值是字符串“package”和包名。 如果定义了包标题,则会附加它。 如果定义了包版本,则会附加它。
        重写:
        toStringObject
        结果
        包的字符串表示。
      • getAnnotation

        public <A extends Annotation> A getAnnotation​(<A> annotationClass)
        从界面复制的说明: AnnotatedElement
        返回该元素的,如果这样的注释 否则返回null指定类型的注释。
        Specified by:
        getAnnotation在接口 AnnotatedElement
        参数类型
        A - 要查询的注释的类型,如果存在则返回
        参数
        annotationClass - 与注释类型对应的Class对象
        结果
        如果此元素上存在指定注释类型,则此元素的注释,否则为null
        异常
        NullPointerException - 如果给定的注释类为null
        从以下版本开始:
        1.5
      • isAnnotationPresent

        public boolean isAnnotationPresent​(<? extends Annotation> annotationClass)
        如果此元素上存在指定类型的注释,则返回true,否则返回false。 此方法主要用于方便地访问标记注释。

        此方法返回的真值相当于: getAnnotation(annotationClass) != null

        默认方法的主体被指定为上面的代码。

        Specified by:
        isAnnotationPresent ,界面 AnnotatedElement
        参数
        annotationClass - 与注释类型对应的Class对象
        结果
        如果此元素上存在指定注释类型的注释,则返回true,否则返回false
        异常
        NullPointerException - 如果给定的注释类为null
        从以下版本开始:
        1.5
      • getAnnotationsByType

        public <A extends Annotation> A[] getAnnotationsByType​(<A> annotationClass)
        从界面复制的说明: AnnotatedElement
        返回与此元素关联的注释。 如果没有与此元素关联的注释,则返回值是长度为0的数组。此方法与AnnotatedElement.getAnnotation(Class)之间的区别在于此方法检测其参数是否为可重复注释类型 (JLS 9.6),如果是,则尝试通过“查看”容器注释来查找该类型的一个或多个注释。 此方法的调用者可以自由修改返回的数组; 它对返回给其他调用者的数组没有影响。
        Specified by:
        getAnnotationsByType在接口 AnnotatedElement
        参数类型
        A - 要查询的注释的类型,如果存在则返回
        参数
        annotationClass - 与注释类型对应的Class对象
        结果
        如果与此元素关联,则指定注释类型的所有此元素的注释,否则为长度为零的数组
        异常
        NullPointerException - 如果给定的注释类为null
        从以下版本开始:
        1.8
      • getAnnotations

        public Annotation[] getAnnotations()
        从界面复制的说明: AnnotatedElement
        返回此元素上存在的注释。 如果没有存在于此元素上注解,返回值是长度为0这种方法的调用者可以随意修改返回的数组的数组; 它对返回给其他调用者的数组没有影响。
        Specified by:
        getAnnotations在界面 AnnotatedElement
        结果
        此元素上的注释
        从以下版本开始:
        1.5
      • getDeclaredAnnotation

        public <A extends Annotation> A getDeclaredAnnotation​(<A> annotationClass)
        从界面复制的说明: AnnotatedElement
        如果直接存在这样的注释,则返回指定类型的此元素的注释,否则返回null。 此方法忽略继承的注释。 (如果此元素上没有直接出现注释,则返回null。)
        Specified by:
        getDeclaredAnnotation在界面 AnnotatedElement
        参数类型
        A - 要查询的注释的类型,如果直接存在则返回
        参数
        annotationClass - 与注释类型对应的Class对象
        结果
        如果直接出现在此元素上,则此元素的指定注释类型的注释,否则为null
        异常
        NullPointerException - 如果给定的注释类为null
        从以下版本开始:
        1.8
      • getDeclaredAnnotationsByType

        public <A extends Annotation> A[] getDeclaredAnnotationsByType​(<A> annotationClass)
        从界面复制的说明: AnnotatedElement
        如果此类注释直接存在间接存在 ,则返回指定类型的此元素的注释。 此方法忽略继承的注释。 如果此元素上没有直接或间接存在的指定注释,则返回值为长度为0的数组。此方法与AnnotatedElement.getDeclaredAnnotation(Class)之间的区别在于此方法检测其参数是否为可重复注释类型 (JLS 9.6),并且如果是,则尝试通过“查看”容器注释(例如,如果存在)来查找该类型的一个或多个注释。 此方法的调用者可以自由修改返回的数组; 它对返回给其他调用者的数组没有影响。
        Specified by:
        getDeclaredAnnotationsByType在接口 AnnotatedElement
        参数类型
        A - 要查询的注释的类型,如果直接或间接存在则返回
        参数
        annotationClass - 与注释类型对应的Class对象
        结果
        如果直接或间接出现在此元素上,则指定注释类型的所有此元素的注释,否则为长度为零的数组
        异常
        NullPointerException - 如果给定的注释类为null
        从以下版本开始:
        1.8
      • getDeclaredAnnotations

        public Annotation[] getDeclaredAnnotations()
        从界面复制的说明: AnnotatedElement
        返回直接出现在此元素上的注释。 此方法忽略继承的注释。 如果此元素上没有直接存在注释,则返回值为长度为0的数组。此方法的调用者可以自由修改返回的数组; 它对返回给其他调用者的数组没有影响。
        Specified by:
        getDeclaredAnnotations在界面 AnnotatedElement
        结果
        注释直接出现在此元素上
        从以下版本开始:
        1.5