Module  java.base
软件包  java.lang

Class Package

  • All Implemented Interfaces:
    AnnotatedElement


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

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

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

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

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

    • 该包的名称源自binary names的类。 由于命名模块中的类必须在命名的包中,所以派生的名称永远不会为空。
    • 如果已知的话,该封装将以module location作为代码来源。
    • 规格和实现标题,版本和供应商未指定。
    • 软件包上的任何注释从上述package-info.class读取。

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

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

    A 软件包可以用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
      • getSpecificationVendor

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

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

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

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

        public boolean isSealed​()
        如果封装密封,则返回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)
        已过时。 如果多个类加载器彼此委托并定义具有相同包名称的类,并且一个这样的加载器依赖于getPackage的查找行为从父加载器返回一个软件包 ,则由软件包公开的属性可能不如预期的那样其余的程序。 例如, 软件包将仅显示由父加载程序定义的package-info.class文件的注释,即使子载入程序定义的package-info.class文件中存在注释。 更强大的方法是使用ClassLoader.getDefinedPackage(java.lang.String)方法,该方法为指定的类加载器返回一个软件包
        在调用者的类加载器及其祖先中通过名称查找包。

        如果调用者的类加载器定义软件包给定的名称,该软件包返回。 否则,对于给定名称的软件包 ,调用者的类加载器的祖先被递归地搜索(由父母父代)。

        调用此方法相当于在调用者的类加载器的一个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”和包名称。 如果定义了包标题,则将其附加。 如果定义了包版本,则会附加它。
        重写:
        toStringObject
        结果
        包的字符串表示形式。
      • getAnnotation

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

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

        该方法返回的真值等价于: getAnnotation(annotationClass) != null

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

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

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

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

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

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

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