1.package-info.java用于描述当前包的信息
2.创建它的办法
在Eclipse中创建这个类名是不被允许的,会报"Type name is notvalid"错误(java类名是不允许有中划线"-"的),可以先在Eclipse之外创建package-info.java然后拖入Eclipse中
3.package-info.java不能声明package-info类的实现(因为package-info.java被编译后其实是一个interface)
找到package-info.class文件,命令行输入 javap -v package-info,如下图:
package-info.java有以下作用:
1.声明友好类和包内访问常量
2.为在包上标注注解提供便利
3.提供包的整体注释说明
编写测试类:
package com.enter.test; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * Package declaration */ @Target(ElementType.PACKAGE) @Retention(RetentionPolicy.RUNTIME) public @interface MyPackageAnnoation { }
@MyPackageAnnoation // 包上注解 package com.enter.test; /** * 包内方法 */ class MyPackageMethod { public void myPackageMethod() { System.out.println("MyPackageMethod..."); } } /** * 包内常量 */ class MyPackageConst { static final java.lang.String PACKAGE_STRING = "myPackageConst"; }
package com.enter.test; import java.lang.annotation.Annotation; public class PkgInfoTest { public static void main(String[] args) { // ===========================友好类和包内访问常量============== new MyPackageMethod().myPackageMethod(); System.out.println(MyPackageConst.PACKAGE_STRING); // ===========================包上注解========================= Package pkg = Package.getPackage("com.enter.test"); for (Annotation annotation : pkg.getAnnotations()) System.out.println(annotation.annotationType().getName()); } } 输出: MyPackageMethod... myPackageConst com.enter.test.MyPackageAnnoation
提供包的整体注释说明请参照 这里