package 是java的关键字,是熟知的包概念,java封装了一个Package对象,用来专门处理包相关的问题

 

包的方法内容概要

1. 静态方法:获取所有的包对象和根据二进制名字查找包对象,其实现依赖ClassLoard对象

 

getPackage(String name);
  getPackages();

2. 名字相关的一组方法: java 包有一套规范,参考规范即可

 

getName();
  getImplementationTitle()
  getImplementationVendor()
  getImplementationVersion()  getSpecificationVendor() getSpecificationVersion()

3. 版本比较的方法:   

 

isCompatibleWith(String version)

4. 是否封装密封的方法: 

isSealed()
  isSealed(URL url)

5. 和包上的注解相关的一组方法: 继承自  java.lang.reflect.AnnotatedElement接口

 

<A extends Annotation> A    getAnnotation(Class<A> annotationClass)

     Annotation[]    getAnnotations()

     Annotation[]    getDeclaredAnnotations()

     <A extends Annotation>A    getDeclaredAnnotation(Class<A> annotationClass)
  <A extends Annotation>A[]    getAnnotationsByType(Class<A> annotationClass)

     <A extends Annotation> A[]    getDeclaredAnnotationsByType(Class<A> annotationClass)

     isAnnotationPresent(Class <? extends Annotation> annotationClass)

 

 

package chapter.lang;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 软件包对象包含有关Java包的实现和规范的版本信息。
 * 该版本信息由加载该类的ClassLoader实例检索并提供。
 * 通常,它存储在与类分发的清单中
 */
public class PackageDemo {
    public static Logger logger = LoggerFactory.getLogger(PackageDemo.class);

    public static void main(String[] args) {
        try{
            //静态方法
            // classLoader 类的理解********************
            Package[] packages = Package.getPackages();
            for(Package pk : packages){
                logger.info("{} ",pk.getName());
            }
            logger.info("共计 {} 个包",packages.length);
            Package findPackage = Package.getPackage("java.io");
            logger.info("查找结果 {}",findPackage.getName());

            Package pka = Class.forName("java.lang.Package").getPackage();
            pka = Class.forName("org.slf4j.Logger").getPackage();
            logger.info(">>>>>> {} ","和名字有关的方法");
            //返回此包的字符串表示形式。
            logger.info(" toString ={}",pka.toString());
            //返回此包的名称。
            logger.info(" 名字 name ={}",pka.getName());

            //返回此包的标题。
            logger.info(" 标题 getImplementationTitle ={}",pka.getImplementationTitle());
            //返回此包的提供者
            logger.info(" 提供者 getImplementationVendor ={}",pka.getImplementationVendor());
            //返回此包的提供者
            logger.info(" 提供版本 getImplementationVersion ={}",pka.getImplementationVersion());

            //返回此程序包实现的规范的标题。
            logger.info(" 规范标题 getSpecificationTitle = {}", pka.getSpecificationTitle());
            //规范的提供者
            logger.info(" 规范提供者 getSpecificationVendor = {}", pka.getSpecificationVendor());
            //规范版本
            logger.info(" 规范版本 getSpecificationVersion = {}", pka.getSpecificationVersion());
            //是否封装
            logger.info("是否封装密封 isSealed(URL){}",pka.isSealed());
            //包的版本
            logger.info("包版本比较 当前版本(isCompatibleWith) {} 是否大于参数{} 版本 = {}",
                pka.getImplementationVersion(),"1.10",pka.isCompatibleWith("1.7.25"));
            //包上允许有注解,三组方法
            //<A extends Annotation> A    getAnnotation(Class<A> annotationClass)
            //返回该元素的,如果这样的注释 ,否则返回null指定类型的注释
            //Annotation[]    getAnnotations()
            //返回此元素上 存在的注释。
            logger.info("第一组注解形式");
            //Annotation[]    getDeclaredAnnotations()
            //返回 直接存在于此元素上的注释。
            //<A extends Annotation>A    getDeclaredAnnotation(Class<A> annotationClass)
            //如果这样的注释 直接存在 ,则返回指定类型的元素注释,否则返回null
            logger.info("第二组注解形式");
            //<A extends Annotation>A[]    getAnnotationsByType(Class<A> annotationClass)
            //返回与此元素相关 联的注释 。
            //<A extends Annotation> A[]    getDeclaredAnnotationsByType(Class<A> annotationClass)
            //如果此类注释 直接存在或 间接存在,则返回该元素的注释(指定类型)。
            logger.info("第三组注解形式");

            //查找方法
            //boolean    isAnnotationPresent(Class <? extends Annotation> annotationClass)
            //如果此元素上 存在指定类型的注释,则返回true,否则返回false。
            logger.info("查找方法 isAnnotationPresent");

        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

    }

}