黑马程序员——学习笔记18.Java注解
来源:互联网 发布:中国金融发展知乎 编辑:程序博客网 时间:2024/05/23 15:55
----------------------ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
注解(Annotation)
基本了解:
注解也是JDK1.5的新特性。注解就是一种标记,在程序中增加了注解就相当给程序增加了某种标记。注解是java的一个的类型(与接口很相似),它与类、接口、枚举是在同一个层次,它们都称作为 java 的一个类型(TYPE)。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。它的作用非常的多。例如:进行编译检查、生成说明文档、代码分析等。
自定义注解:
1.格式:@interface注解名{
public static final 属性名 = 属性值;
public abstract 方法名();
}
代码演示:自定义一个注解
package MyTest;@Retention(value=RetentionPolicy.RUNTIME)@Target({ElementType.METHOD,ElementType.TYPE})public @interface AnnotationTest {//定义注解的成员变量,默认是public final static类型的public final int a = 1;//定义注解的抽象方法,默认修饰符是public abstract,也必须有返回值类型。 8种基本类型,String,Class,枚举,注解和这些类型的数组public abstract String value()//default "黑马"; ;}
通过javap命令可以看到注解就是一种特殊的接口,跟接口一样都有成员属性和成员方法。
注意:
1.自定义注解时先声明注解的生命周期,就是使用@Retention 元注解。如果没有声明@Retention,就默认保留在源文件中。@Retention包含3中策略:
RetentionPolicy.SOURCE:指定注解只保留在源文件当中。
RetentionPolicy.CLASS:指定注解只保留在class 文件中。
RetentionPolicy.RUNTIME:指定注解可以保留在程序运行期间(二进制文件中)。
2.再声明注解的功能使用范围,使用@Target元注解。如果没有声明@Target,就默认可以在任意类型的元素上都可以调用这个注解。@Target限定了8种元素类型:
ElementType.ANNOTATION_TYPE:说明该注解只能声明在一个注解类型前。
ElementType.CONSTRUCTOR:说明该注解只能声明在一个类的构造方法前。
ElementType.FIELD:说明该注解只能被声明在一个类的字段前。
ElementType.LOCAL_VARIABLE:说明该注解只能声明在一个局部变量前。
ElementType.METHOD:说明该注解只能被声明在一个类的方法前。
ElementType.PACKAGE:说明该注解只能声明在一个包名前。
ElementType.PARAMETER:说明该注解只能被声明在一个方法参数前。
ElementType.TYPE:说明该注解只能被声明在一个类、接口(包括注释类型)或枚举前。
3.final静态成员属性默认是public static final修饰的,抽象的成员方法默认是pubic abstract修饰的。成员方法必须有返回值,返回值类型可以是:byte,short,char,int,long,boolean,float,double8种基本数据类型,还包括String,Class,枚举,注解类型以及上述类型的数组。
4.java.lang.annotation.Annotation是所有注解继承的公共接口,但在自定义注解时不需要声明出来,声明了extends Annotation会编译失败,同时Annotation是一个接口类型,不是一个注解类型。
注解的使用:
在可以声明的程序元素类型上直接调用。
格式:@注解名(方法名1=返回值,方法名2=返回值....)
以上述自定义注解AnnotationTest为例,可以直接在本注解上再调用自己。
代码:
@AnnotationTest(value = "黑马")
public @interface AnnotationTest{ 省略了代码... }
在这个注解中,只定义了一个成员方法并且返回值类型是String类型,在调用时可以省略value方法名,如下:
@AnnotationTest("黑马")
如果这个注解中的方法后有缺省的默认值,如下:
public abstract String value() default "黑马";
那么在调用注解时可以不用声明成员方法的返回值,如下:
@AnnotationTest
如果方法的返回值是个数组,而且数组的元素只有一个,可以去掉{}
代码演示:通过反射获取注解对象。
@AnnotationTest(value = "传智播客")public class AnnotationTestDemo {@AnnotationTest(value = "黑马")public static void main(String[] args) throws Exception {if(AnnotationTestDemo.class.isAnnotationPresent(AnnotationTest.class)){//获取类上的注解对象AnnotationTest an = AnnotationTestDemo.class.getAnnotation(AnnotationTest.class);//调用注解的成员方法。System.out.println(an.value());}Method methodMain =AnnotationTestDemo.class.getMethod("main", String[].class);if(methodMain.isAnnotationPresent(AnnotationTest.class)){//获取方法上的注解对象AnnotationTest an = methodMain.getAnnotation(AnnotationTest.class);//调用注解的成员方法。System.out.println(an.value());}}}
----------------------ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
详细请查看:http://edu.csdn.net
- 黑马程序员——学习笔记18.Java注解
- 黑马程序员 java学习笔记——注解
- 黑马程序员-java学习笔记-注解
- 【黑马程序员】 学习笔记 - Java新技术 - 注解
- 黑马程序员—JAVA注解
- 黑马程序员——Java注解(Annotation)
- 黑马程序员java高新技术——注解
- 黑马程序员——Java中的注解
- 黑马程序员——Java中的注解
- 黑马程序员——简析java注解
- 黑马程序员—注解
- 黑马程序员_JAVA注解学习笔记
- 黑马程序员_Java注解学习笔记
- 黑马程序员 JAVA学习笔记——java基础01
- 黑马程序员 JAVA学习笔记——java基础02
- 黑马程序员 JAVA学习笔记——java基础 继承
- 黑马程序员——Java学习笔记--java基础
- 黑马程序员—Java 学习笔记1 Java概述
- 看一眼哈佛 你就会明白自己到底缺什么?
- 开篇记录
- 《大话设计模式》-- 9.模板方法模式
- 画图解释SQL联合语句
- Oracle之Chr函数返回
- 黑马程序员——学习笔记18.Java注解
- 在Windows下编译OpenSSL
- 《大话设计模式》-- 10.迪米特法则
- 几个 CGRect 函数例子
- struts2+spring+mybatis入门教程六之配置json
- C++中extern “C”含义深层探索
- 希腊人7
- 《大话设计模式》-- 11.外观模式
- [C/C++]#ifndef,#define用法