什么是注解?
Java中的注解就是Java源代码的元数据,也就是说注解是用来描述Java源代码的。 基本语法就是:@后面跟注解的名称。
①Override:标识某一个方法是否正确覆盖了它的父类的方法。
②Deprecated:表示已经不建议使用这个类成员了。 它是一个标记注解。
③SuppressWarnings:用来抑制警告信息 等等。
要更好的理解注解,我们可以自己写一个注解
@Target : 用来限制注解可以用到那几个地方。比方可以用到类上,可以用到方法胜都可以用@Target来限制
@Retention:这个是用来控制注解编译在Class中的状态的,默认是编译到Class里去,但是不读出来,还有两种状态是 不编译到Class里面去, 最后一种是编译过于,并且可以通过类反射读出来的
@Documented : 可以利用网络来生成注解的
@Inherited : 子类是否能继承注解
那么下面是我们自己写的注解类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
package cn.hncu.annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Inherited
@Documented
@Retention (RetentionPolicy.RUNTIME)
@Target ({ElementType.TYPE,ElementType.METHOD}) //目标: 限制该注解能够用在哪些地方,如果没定义@Target则不限制即无论哪里都可以用
public @interface MyAnno {
public String schoolName() default "hncu" ; //注解中的成员变量要这么定义
}
|
测试,学习使用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
package cn.hncu.annotation;
import java.util.ArrayList;
import java.util.Collection;
@MyAnno
public class AnnotationHello {
private String name= "hncu" ;
public static void main(String[] args) {
System.out.println( "hello" );
}
@Override
public String toString() {
return super .toString();
}
@MyAnno (schoolName= "大城院" )
@Deprecated
public void abc(){
System.out.println( "abc..." );
}
@SuppressWarnings ({ "rawtypes" , "unchecked" })
public void colDemo(){
Collection col = new ArrayList();
col.add( "aa" );
}
//注解,只是给其它程序或代码读取信息的
@MyAnno (schoolName= "湖南城市学院" )
public void demo(){
System.out.println( "1111111" );
}
@MyAnno //因为该注解中的成员变量schoolName设置了默认值,因此这里可以不赋值。若没设置默认值,则必须要在这里赋值
public void demo2(){
System.out.println( "1111111" );
}
//@MyAnno("abc") //如果注解中的变量名是value,则这里可以不给出变量名
public void demo3(){
System.out.println( "33333333333" );
}
}
|
通过类反射读出来
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
package cn.hncu.annotation;
import java.lang.reflect.Method;
public class UseMyAnno {
public static void main(String[] args) {
try {
Class c = Class.forName( "cn.hncu.annotation.AnnotationHello" );
//判断类上面是否有该注解(@MyAnno)
boolean boo = c.isAnnotationPresent(MyAnno. class );
System.out.println( "类上是否有该注解:" +boo);
Method ms[] = c.getDeclaredMethods();
for (Method m: ms){
//判断方法上面是否有该注解(@MyAnno)
if (m.isAnnotationPresent(MyAnno. class )){
System.out.println( "有注解的方法:" +m.getName());
//演示读取注解中成员变量的值----从m对象中获取该注解,进而读取它的成员变量的值
MyAnno ma = (MyAnno)m.getAnnotation(MyAnno. class );
System.out.println( "学校名称:==" +ma.schoolName());
//获取到了这些数据过后,下面就可以开始你的处理了
}
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
|
如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
原文链接:http://blog.csdn.net/weixin_37720904/article/details/70244042