zoukankan      html  css  js  c++  java
  • Java 注解

    原文地址:http://www.java3z.com/cwbwebhome/article/article8/83469.html?id=4418

    在JAVA中存在三个JAVA内建的注解@Deprecated @Override @SuppressWarnings

    @Deprecated表示不建议使用,可以用来为方法和类注解

    一、把方法注解

    package cn.yangtao.ceshi;

    public class Student{
     public static void main(){
      
      sayHello();
     }
     @Deprecated
     private static void sayHello() {
      // TODO Auto-generated method stub
      
     }
    }

    在主方法中使用sayHello()时,编译时会出现警告

    二、把类注解

    package cn.yangtao.ceshi;
    @Deprecated
    class People{
     public static void onClass(){
      System.out.println("在类上添加注解");
     }
     
    }

    public class Student{
     public static void main(){
      
      sayHello();
      People.onClass();
     }
     @Deprecated
     private static void sayHello() {
      // TODO Auto-generated method stub
      
     }
    }

    引用People时,开发工具就会用横线来提醒你出错

    @ Override用来标明是覆写

    package cn.yangtao.ceshi;

    class People{
     public void sayHello(){
      System.out.println("在类上添加注解");
     }
     
    }

    public class StudentDemo extends People{
     public static void main(String args[]){
      new StudentDemo().sayHello();
     }
     @ Override
     public void sayHello(){
      System.out.println("已经覆写");
     }
    }

    此时如果将sayHello()改为sayhello()就会出错,因为已经表明了该方法为覆写过的方法,所以方法名要一致

    @ SuppressWarnings 用来压制警告

    package cn.yangtao.ceshi;
    public class StudentDemo {
     @SuppressWarnings("deprecation")
     public static void main(String args[]){
      
      new StudentDemo().sayHello();
     }
     @ Deprecated
     public void sayHello(){
      System.out.println("已经覆写");
     }
    }

    以下介绍SuppressWarnings的一些参数

    1、deprecation 使用了不赞成使用的类或方法时的警告

    2、unchecked 执行了未检查的转换时警告

    3、fallthrough 当使用switch操作时case后未加入break操作,而导致程序继续执行其他case语句时出现的警告

    4、path 当设置一个错误的类路径、源文件路径时出现的警告

    5、serial 当在可序列化的类上缺少serialVersionUID定义时的警告

    6、fianally 任何finally子句不能正常完成时警告

    7、all 关于以上所有情况的警告

    我们也可以定义自己的Annotation

    package cn.yangtao.ceshi;

    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;
    @Retention(RetentionPolicy.CLASS)  ---------------------------->定义该注解的有效区域,还有SOURCE、RUNTIME
    public @interface MyAnnotationDemo01 {
     String key();----------------------------------------------->用来接收传递进去的值
     String value();
    }

    使用MyAnnotationDemo01

    package cn.yangtao.ceshi;
    public class StudentDemo {
     @SuppressWarnings("deprecation")
     @MyAnnotationDemo01(key="hello",value="hello world")            这行是最关键的,记住赋值的方式
     public static void main(String args[]){
      
      new StudentDemo().sayHello();
     }
     @ Deprecated
     public void sayHello(){
      System.out.println("已经覆写");
     }
    }
    对于赋值可以有一下几种情况

    1、数组型

    package cn.yangtao.ceshi;

    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;
    @Retention(RetentionPolicy.CLASS)
    public @interface MyAnnotationDemo01 {
     String[] key();
     
    }
    赋值方式

    package cn.yangtao.ceshi;
    public class StudentDemo {
     @SuppressWarnings("deprecation")
     @MyAnnotationDemo01(key={"hello","world"})
     public static void main(String args[]){
      
      new StudentDemo().sayHello();
     }
     @ Deprecated
     public void sayHello(){
      System.out.println("已经覆写");
     }
    }

    2、设置默认型

    package cn.yangtao.ceshi;

    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;
    @Retention(RetentionPolicy.CLASS)
    public @interface MyAnnotationDemo01 {
     String key() default "hello";
     
    }

    如果你使用该注解时没有给注解导入属性,则就会默认使用"hello"

    3、可以用枚举来限制取值范围

    定义枚举类

    package cn.yangtao.ceshi;

    public enum Color {
     Green,Red,Blue;
    }
    标明只能给注解传入枚举属性

    package cn.yangtao.ceshi;

    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;
    @Retention(RetentionPolicy.CLASS)
    public @interface MyAnnotationDemo01 {
     Color key() ;
     
    }
    使用注解

    package cn.yangtao.ceshi;
    public class StudentDemo {
     @SuppressWarnings("deprecation")
     @MyAnnotationDemo01(key=Color.Blue) 这个时候就只能取枚举中的对象,如果你有很高的控制欲这一招很好使
     public static void main(String args[]){
      
      new StudentDemo().sayHello();
     }
     @ Deprecated
     public void sayHello(){
      System.out.println("已经覆写");
     }
    }

    能够设置属性了,要怎么拿到和使用属性呢 ?

    答案:反射找到注解所在的方法(如果忘记去看反射)------------>找到该方法上的注解

    枚举

    package cn.yangtao.ceshi;

    public enum Color {
     Green,Red,Blue;
    }

    注解

    package cn.yangtao.ceshi;

    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;
    @Retention(RetentionPolicy.RUNTIME)     //  这个地方要设成运行时,否则在取属性的时候会出现空指向异常
    public @interface MyAnnotationDemo01 {
     Color key() ;
    }

    取出useAnnotation方法上注解的属性

    package cn.yangtao.ceshi;
    public class StudentDemo {
     @SuppressWarnings("deprecation")
     public static void main(String args[]) throws SecurityException, NoSuchMethodException{
      useAnnotation();
      MyAnnotationDemo01 mt=StudentDemo.class.getMethod("useAnnotation", null).
      getAnnotation(MyAnnotationDemo01.class);
      Color c=mt.key();                                                    取出属性的值
      System.out.println(c.name());                                  获得枚举的对象的姓名
     }
     @MyAnnotationDemo01(key=Color.Blue)                  设置该属性的内容
     public  static void useAnnotation() {
      // TODO Auto-generated method stub
      
     }
     
    }

    枚举中元注解

    概念:注解的注解就是元注解

    常用的有:

    @Target   声明被他标注的注解的作用区域比如 类、方法、属性、包等
    @Documented  表示该注解可以被写到文档里面
    @Inherited       声明该注解可以被继承

    路慢慢其休远羲,吾将上下而求所
  • 相关阅读:
    WPF 关于拖拽打开文件的注意事项
    asp.net core 3.1中对Mongodb BsonDocument的序列化和反序列化支持
    用百度webuploader分片上传大文件
    多线程学习笔记
    web.config数据库连接字符串加密
    Visual Studio 2010 常用快捷方式
    Team Foundation Server 2013 日常使用使用手册(四)分支与合并
    Team Foundation Server 2013 日常使用使用手册(三)上传新工程、创建任务、创建bug、设置预警
    Team Foundation Server 2013 日常使用使用手册(二)修改、签入、撤销、回滚、对比代码变更
    Team Foundation Server 2013 日常使用使用手册(一)-本地连接TFS、查看任务
  • 原文地址:https://www.cnblogs.com/garinzhang/p/2746406.html
Copyright © 2011-2022 走看看