[JAVA学习1]注解

来源:互联网 发布:国家数据统计 编辑:程序博客网 时间:2024/06/04 00:55
一个多月没写了,app开发告一段落,已经提交到appstore,但还在审核。
昨天刚刚接触当今最热门的语言java。没办法,不想学这个,公司偏偏又用这个。不过2天下来,觉得还挺有意思的,好多语法都是没见过的。
今天简单练习了注解,不出意外,这个月都得折腾java了。


环境先说下:
MacBook Pro 版本10.11.6
java version "1.8.0_101"
Eclipse Java EE IDE for Web Developers.
Version: Luna Service Release 2 (4.4.2)
不知道是不是最新的,不管了,就它了。


第一步:新建自定义注解
/*
 * 测试注解
 * 1:@interface自定义注解,里面的是属性,不是接口的方法,但属性后面得加()
 * 2:所有的Annotation自动继承java.lang.annotation接口
 * 3:自定义注释的成员变量访问类型只能是public、default;
 */
package annotationTest;


import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.lang.annotation.Retention;


@Documented//出现在javadoc中
@Target({ElementType.METHOD,ElementType.TYPE})//方法和类的注解
@Retention(RetentionPolicy.RUNTIME)//能反射读取
public @interface sayHello {
   public String name() default "Hello";
}


第二步:解析自定义注解
package annotationTest;
import java.lang.reflect.Method;


import annotationTest.sayHello;
public class parseAnnotation {
//注意1:这里的参数里面的Class类型要大写,而且后面的类型不能省,否则警告
   public static void parseMethod(Class<? extends Object> C) {
for (Method  M: C.getDeclaredMethods()) {
if (M.isAnnotationPresent(sayHello.class)) {//如果有sayHello的注解
sayHello s = M.getAnnotation(sayHello.class);
System.out.println(s.name());//打印
}
}
   }
   public static void parseClass(Class<? extends Object> C) {
if (C.isAnnotationPresent(sayHello.class)) {//如果有sayHello的注解
sayHello s = C.getAnnotation(sayHello.class);
System.out.println(s.name());//打印
}
   }
}


第三步:测试自定义注解
/*相关说明
 * @Target:指定程序元定义的注释所使用的地方
 * public enum ElementType {  
     TYPE, // 指定适用点为 class, interface, enum  
     FIELD, // 指定适用点为 field  
     METHOD, // 指定适用点为 method  
     PARAMETER, // 指定适用点为 method 的 parameter  
     CONSTRUCTOR, // 指定适用点为 constructor  
     LOCAL_VARIABLE, // 指定使用点为 局部变量  
     ANNOTATION_TYPE, //指定适用点为 annotation 类型  
     PACKAGE // 指定适用点为 package  

 *@Retention
 *public enum RetentionPolicy {  
     SOURCE, // 编译器处理完Annotation后不存储在class中  
     CLASS, // 编译器把Annotation存储在class中,这是默认值  
     RUNTIME // 编译器把Annotation存储在class中,可以由虚拟机读取,反射需要  

 *@Documented:是一个标记注释,表示注释应该出现在类的javadoc中
 *@Inherited:如果一个方法使用了的注释用了@inherited,那么其子类的该方法同样继承了该注释
 */


package annotationTest;
import annotationTest.sayHello;
import annotationTest.parseAnnotation;


@sayHello(name="Class hello world")
public class TestAnnotation {
   @sayHello(name="Method hello world")
   public void showHello(){
   }
   public static void main(String[] args) {
  parseAnnotation.parseMethod(TestAnnotation.class);
  parseAnnotation.parseClass(TestAnnotation.class);
  }
}


正确输出:
Method hello world
Class hello world


我只是简单的写了下,有个大概印象,具体推荐:
http://blog.csdn.net/liuwenbo0920/article/details/7290586/
0 0
原创粉丝点击