Java的注解
1)注解(Annotation)也被称为元数据(Metadata),用于修饰解释 包,类,方法,属性,构造器,局部变量等信息
2)和注释一样,注解不影响程序逻辑,但注解可以被编译或运行,相当于嵌入在代码中的补充信息
3)在JavaSE中,注解的使用目的比较简单,例如标记过时的功能,忽略警告等.在JavaEE中注解占据了更重要的角色,例如用来配置应用程序的任何切面,代替JavaEE旧版中所一流的繁冗代码和XML配置等
基本的Annotation介绍:
使用Annotation时要在其前面增加@符号,并把该Annotation当成一个修饰符使用,用于修饰它支持的程序元素
三个基本的Annotation:
1)@Override:限定某个方法,是重写父类方法,该注解只能用于方法
2)@Deprecated:用于表示某个程序元素(类,方法等)已过时
3)@SuppressWarnings:抑制编译器警告
一.@Override:限定某个方法,是重写父类方法,该注解只能用于方法
package com.annotation;public class Override_ {public static void main(String[] args) {}
}
class Father{public void fly(){System.out.println("你爸在飞.....");}
}
class Son extends Father{//1.@Override放在fly方法上,表示子类的fly方法是重写了父类的//2.这里如果没有写@Override注解,它还是重写了父类的fly(),编译器会判断语法是否属于重写//3.如果写了@Override注解,编译器就会去检查该方法是否真的重写了父类的某个方法// 如果的确重写了,则通过.如果没有构成重写,则编译错误.它的价值就在于判断你语法是否错误@Overridepublic void fly() {System.out.println("你鹅子在飞.....");}
}
/*
@Override源码:
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Override {
}
如果发现@interface,则表示它是一个注解类*/@Override使用说明:
1.@Override表示指定重写父类的方法(从编译层面验证),如果父类没有fly方法,则会报错
2.如果不写@Override注解,而父类仍有public void fly(){},仍然构成重写
3.@Override只能修饰方法,不能修饰其他类,包,属性等
4.查看@Override注解源码为
@Target(ElementType.METHOD)
说明只能修饰方法
5.@Target是修饰注解的注解,称为元注解
二.@Deprecated:用于表示某个程序元素(类,方法等)已过时
package com.annotation;public class Deprecated_ {public static void main(String[] args) {A a = new A();a.hi();System.out.println(a.n1);}
}//1.@Deprecated 修饰某个元素,表示该元素已过时
//2.即该元素不推荐使用,但仍然可以使用
@Deprecated
class A{@Deprecatedpublic int n1 = 10;@Deprecatedpublic void hi(){System.out.println("泥嚎");}
}@Deprecated说明:
1.用于表示某个程序元素(类,方法等)已过时
2.可以修饰方法,类,字段,包,参数等等
3.@Target可以使用的地方:
@Target(value={CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, PARAMETER, TYPE})(构造器,字段(属性),局部变量,方法,包,参数,类型(类))
4.@Deprecated的作用可以做到新旧版本的兼容和过渡
三.@SuppressWarnings:抑制编译器警告
package com.annotation;import java.util.ArrayList;
import java.util.List;public class SuppressWarnings {//1.当我们不希望看到右上角黄色警告的时候,可以使用@SuppressWarings来抑制警告信息//2.在大括号中,可以写入你希望抑制(不显示)的警告信息--csdn博客中有记录//3.关于@SuppressWarnings的作用范围是和放置的位置相关// 比如@SuppressWarnings放置在main方法,那么抑制警告的范围就是main方法中// 如果放在类上就是全部代码生效@java.lang.SuppressWarnings({"rawtypes","unchecked","unused"})//直接写all能抑制所有警告public static void main(String[] args) {List list = new ArrayList();list.add("jack");list.add("tom");list.add("mary");int i;System.out.println(list.get(1));}
}@SuppressWarning源码分析:
@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE})
@Retention(RetentionPolicy.SOURCE)
public @interface SuppressWarnings {String[] value();
}(1)通过源码可知,@SuppressWarning能够放置的位置:(类型(类),字段(属性),方法,参数,构造器,局部变量)
(2)该注解类有数组String[] value();,使用时可以在( ) 内填入一个数组比如{"rawtypes","unchecked","unused"}
@SuppressWarning 中的属性介绍以及属性说明
all,抑制所有警告
boxing,抑制与封装/拆装作业相关的警告
cast,抑制与强制转型作业相关的警告
dep-ann,抑制与淘汰注释相关的警告
deprecation,抑制与淘汰的相关警告
fallthrough,抑制与switch陈述式中遗漏break相关的警告
finally,抑制与未传回finally区块相关的警告
hiding,抑制与隐藏变数的区域变数相关的警告
incomplete-switch,抑制与switch陈述式(enum case)中遗漏项目相关的警告
javadoc,抑制与javadoc相关的警告
nls,抑制与非nls字串文字相关的警告
null,抑制与空值分析相关的警告
rawtypes,抑制与使用raw类型相关的警告
resource,抑制与使用Closeable类型的资源相关的警告
restriction,抑制与使用不建议或禁止参照相关的警告
serial,抑制与可序列化的类别遗漏serialVersionUID栏位相关的警告
static-access,抑制与静态存取不正确相关的警告
static-method,抑制与可能宣告为static的方法相关的警告
super,抑制与置换方法相关但不含super呼叫的警告
synthetic-access,抑制与内部类别的存取未最佳化相关的警告
sync-override,抑制因为置换同步方法而遗漏同步化的警告
unchecked,抑制与未检查的作业相关的警告
unqualified-field-access,抑制与栏位存取不合格相关的警告
unused,抑制与未用的程式码及停用的程式码相关的警告
