以前不知道有package-info.java这个类,读javac源码在”输出符号表“的处理中碰到了它,于是简单研究一下
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,如下图:
[img]http://dl.iteye.com/upload/attachment/0069/5628/1bd5032e-f988-345a-9084-a58d5c398f26.gif[/img]
[b]package-info.java有以下作用:
1.声明友好类和包内访问常量
2.为在包上标注注解提供便利
3.提供包的整体注释说明[/b]
编写测试类:
[img]http://dl.iteye.com/upload/attachment/0069/5646/9ac9d100-c10e-3b52-bbf7-a4a878bf96e7.gif[/img]
提供包的整体注释说明请参照[url=http://strong-life-126-com.iteye.com/blog/806246]这里[/url]
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,如下图:
[img]http://dl.iteye.com/upload/attachment/0069/5628/1bd5032e-f988-345a-9084-a58d5c398f26.gif[/img]
[b]package-info.java有以下作用:
1.声明友好类和包内访问常量
2.为在包上标注注解提供便利
3.提供包的整体注释说明[/b]
编写测试类:
[img]http://dl.iteye.com/upload/attachment/0069/5646/9ac9d100-c10e-3b52-bbf7-a4a878bf96e7.gif[/img]
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
提供包的整体注释说明请参照[url=http://strong-life-126-com.iteye.com/blog/806246]这里[/url]