首页IT科技注解是干嘛的(day30-注解)

注解是干嘛的(day30-注解)

时间2025-05-05 01:16:52分类IT科技浏览3201
导读:Java注解 1.注解的理解 注解(Annotation)也被称为元数据(Metadata),用于修饰解释 包、类、方法、属性、构造器、局部变量等数据信息 和注释一样,注解不影响程序逻辑,但注解可以被编译或者运行,相当于嵌入在代码中的补充信息 在JavaSE中,注解...

Java注解

1.注解的理解

注解(Annotation)也被称为元数据(Metadata)           ,用于修饰解释 包         、类                 、方法    、属性      、构造器                 、局部变量等数据信息 和注释一样             ,注解不影响程序逻辑      ,但注解可以被编译或者运行         ,相当于嵌入在代码中的补充信息 在JavaSE中             ,注解的使用目的比较简单        ,例如标记过时的功能      ,忽略警告等         。在JavaEE中注解占据了更重要的角色              ,例如用来配置应用程序的任何切面          ,代替JavaEE旧版中所遗留的繁冗代码和XML配置等                 。

基本的Annotation介绍:

使用Annotation时要在其前面添加@符号   ,并把该Annotation当成一个修饰符使用    。用于修饰它支持的程序元素

三个基本的Annotation:

@Override:限定某个方法               ,是重写父类方法            ,该注释只能用于方法

@Deprecated:用于表示某个程序元素(类       、方法等)已过时

@SuppressWarnings:抑制编译器警告

2.@Override注解

例子:

package li.annotation; public class Override_ { public static void main(String[] args) { } } class Father{//父类 public void fly(){ System.out.println("Father fly ..."); } } class Son extends Father{//子类 //@Override 放在fly方法上,表示子类的fly方法重写了父类的fly方法 //即使这里没有写@Override             ,其实还是重写了父类方法 //但是如果写了@Override注解              ,编译器就会检查该方法是否整的重写了父类的方法      。 //如果的确重写了就编译通过   ,如果没有构成重写则编译错误 //它的意义就在于语法的校验 @Override public void fly(){ System.out.println("Son fly ..."); } }

@Override使用说明:

@Override表示指定重写父类的方法(从编译层面验证)           ,如果父类没有fly方法             ,则会报错 如果不写@Override注解      ,而父类仍有 public void fly(){}         ,仍然构成重写 @Override只能修饰方法             ,不能修饰其他类    、包                、属性等等 查看@Override注解源码为@Target(ElementType.METHOD)        ,说明只能修饰方法 @Target是修饰注解的注解      ,称为元注解

点击@Override进去可以看到Override的定义:

补充说明:@interface的说明

@interface不是接口              ,是注解类           ,在JDK1.5之后加入的

3.@Deprecated注解

Deprecated用于表示某个程序元素(类          、方法等)已经过时

例子:

package li.annotation; public class Deprecated_ { public static void main(String[] args) { AAA a = new AAA(); a.hi(); System.out.println(a.n1); } } // @Deprecated 修饰某个元素   ,表示该元素已经过时 // 即 不再推荐使用               ,但是仍然可以使用 @Deprecated class AAA{ @Deprecated public int n1 = 10; @Deprecated public void hi(){ } }

查看@Deprecated注解类的源码:

@Deprecated使用说明:

用于表示某个程序元素(类  、方法等)已过时 @Deprecated可以修饰CONSTRUCTOR(构造器), FIELD(属性), LOCAL_VARIABLE(局部变量), METHOD(方法), PACKAGE(包), PARAMETER(参数), TYPE(类型) @Deprecated的作用可以做到新旧版本的兼容和过渡

3.@SuppressWarnings注解

@SuppressWarnings属性介绍及属性说明:(部分)

属性 属性说明 all 抑制所有警告 boxing 抑制装箱               、拆箱操作时候的警告 cast 抑制映射相关的警告 dep-ann 抑制启用注释的警告 deprecation 抑制过期方法警告 fallthrough 抑制确在switch中缺失breaks的警告 finally 抑制finally模块没有返回的警告 hiding 抑制与隐藏变数的区域变数相关的警告 incomplete-switch 忽略没有完整的switch语句 nls 忽略非nls格式的字符 null 忽略对null的操作 rawtypes 忽略没有指定泛型的警告(传参时没有指定泛型的警告错误) restriction 抑制使用不建议或禁止参照相关的警告 serial 抑制与实现序列化的类遗漏serialVersionUID的的警告 static-access 抑制不正确的静态访问方式警告 synthetic-access 抑制子类没有按最优方法访问内部类的警告 unchecked 抑制没有进行类型检查操作的警告 unqualified-field-access 抑制没有权限访问的域的警告 unused 抑制没被使用过的代码的警告

例子:

package li.annotation; import java.util.ArrayList; import java.util.List; // 1.当我们不希望看到警告时,可以使用@SuppressWarnings注解来抑制警告信息 // 2.在{""}中            ,可以写入你希望抑制(不显示)的警告信息 // 3.@SuppressWarnings的作用范围和你放置的位置有关 // 比如 @SuppressWarnings放置在main方法,那么抑制警告的范围就是main方法 public class SuppressWarnings_ { @SuppressWarnings({"all"}) public static void main(String[] args) { List list = new ArrayList(); list.add("jack"); list.add("mary"); list.add("Bob"); System.out.println(list);//[jack, mary, Bob] } }

查看@SuppressWarnings源码:

@SuppressWarnings可以放置的位置有:TYPE(类型), FIELD(属性), METHOD(方法), PARAMETER(参数), CONSTRUCTOR(构造器), LOCAL_VARIABLE(局部变量)

该注解类有一个数组String[] value()             ,通过该数组可以在@SuppressWarnings({""})中设置多个属性              ,如@SuppressWarnings({"rawtypes","unchecked","unused"});

4.元注解

元注解的基本介绍:

JDK的元Annotation用于修饰其他Annotation

元注解的种类:

Retention:指定注解的作用范围   ,三种:SOURCE           ,CLASS             ,RUNTIME

Target:指定注解可以在哪些地方使用

Documented:指定该注解是否会在javadoc中体现

Inherited:子类会继承父类注解

4.1@Retention注解

说明:

只能用于修饰一个Annotation定义      ,用于指定该Annotation可以保留多长时间         ,@Rentention包含一个RetentionPolicy类型的成员变量             ,使用@Rentention时必须为该value成员变量指定值:

​ @Rentention的三种值:

RetentionPolicy.SOURCE:编译器使用后        ,直接丢弃这种策略的注解 RetentionPolicy.CLASS:编译器把注解记录在class文件中      ,当运行Java程序时              ,JVM不会保留注解                 。这是默认值 RetentionPolicy.RUNTIME:编译器把注解记录在class文件中          ,当运行Java程序时   ,JVM会保留注解       。程序可以通过反射来获取该注解

4.2@Target注解

基本说明:

用于修饰Annotation定义               ,用于指定 被修饰的Annotation可以用于修饰 哪些程序元素

@Target也包含一个名为value的成员变量

@Documented @Retention(RetentionPolicy.RUNTIME)//它的作用范围是RUNTIME @Target(ElementType.ANNOTATION_TYPE)//这里的ANNOTATION_TYPE 说明@Target只能修饰注解 public @interface Target {//注释类 /** * Returns an array of the kinds of elements an annotation type * can be applied to. * @return an array of the kinds of elements an annotation type * can be applied to */ ElementType[] value(); }

4.3@Documented注解

基本说明:

@Documented:用于指定被该元Annotation修饰的Annotation类将被 javadoc工具提取生成文档            ,即在生成文档时,可以看到该注解    。

PS:定义为@Documented的注解必须设置Retention值为RUNTIME

4.4@Inherited注解

被它修饰的Annotation将具有继承性             ,如果某个类使用了被@Inherited修饰的Annotation              ,则其子类将自动具有该注解

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
linux操作系统怎么学(Linux系统一些重要的学习方法及路线图详解) linux tar解压zip文件命令(Linux系统中tar压缩包怎么解压?)