1.Annotation定义

注解是放在Java源码的类、方法、字段、参数前的一种标签。如下

package com.reflection;

import org.apache.logging.log4j.core.tools.picocli.CommandLine;

import javax.annotation.PostConstruct;
import javax.annotation.Resource;
@Resource("Main")//带参数的注解
public class Main{
@Inject
int n; @PostConstruct
public void hello(@Param String name){
System.out.println(name);
} @Override
public String toString(){
return "hello";
}
}

2.注解的作用:

  • 注解本身对代码逻辑没有任何影响
  • 如何使用注解由工具(如编译器)决定。写了注解,编译器会帮我们检查问题。否则不会检查。

3.使用注意事项

3.1编译器可以使用的注解:

  • @Override: 让编译器检查该方法是否正确的实现了覆写
  • @Deprecated: 告诉编译器该方法已经被标记作废,在其他地方引用将会出现变异警告。
  • @SuppressWarnings: 如果方法内部出现了编译警告,就忽略这些警告。

3.2注解可以定义配置参数:

  • 配置参数有注解类型定义
  • 配置参数可以包括:

    * 所有基本类型

    * String

    * 枚举类型

    * 数组(基本类型、String、枚举类型的数组)
public class Main{
int n = 100;
@Test(timeout=100)
public void test(){
System.out.println("test");
}
}
  • 配置参数必须是常量

    * 缺少某个配置参数将使用默认值

    * 如果只写常量,相当于省略了value参数

    * 如果只写注释,相当于全部使用默认值
package com.reflection;

public class Main{
@Check(min=0,max=100,value=55)
public int n; @Check(value=99)//缺少某个配置参数将使用默认值
public int p; @Check(99)//如果参数名称是value,可以省略参数名称
public int x; @Check//如果只写注释,相当于全部使用默认值
public int y;
}

4.总结

  • 注解是Java语言用于工具处理的标注
  • 注解可以配置参数,没有指定配置的参数使用默认值
  • 如果参数名称是value,可以省略参数名称

廖雪峰Java4反射与泛型-2注解-1使用注解的更多相关文章

  1. 廖雪峰Java4反射与泛型-2注解-3处理注解

    1.处理注解 注解本身对对代码逻辑没有任何影响 SOURCE类型的注解在编译期就被丢掉了 CLASS类型的注解仅保存在class文件中 RUNTIME类型的注解在运行期可以被读取 如何使用注解由工具决 ...

  2. 廖雪峰Java4反射与泛型-2注解-2定义注解

    1.定义注解 使用@interface定义注解Annotation 注解的参数类似无参数方法 可以设定一个默认值(推荐) 把最常用的参数命名为value(推荐) 2.元注解 2.1Target使用方式 ...

  3. 廖雪峰Java4反射与泛型-3泛型-7泛型和反射

    1.部分反射API是泛型 1.1获取反射API的泛型 部分反射API是泛型,如Class<T>是泛型 //如果使用Class,不带泛型,出现compile warning编译警告 Clas ...

  4. 廖雪峰Java4反射与泛型-3范型-4擦拭法

    1.擦拭法是Java泛型的实现方式. 编译器把类型视为Object. * 泛型代码编译的时候,编译器实际上把所有的泛型类型T统一视为Object类型.换句话说,虚拟机对泛型一无所知,所有的工作都是编译 ...

  5. 廖雪峰Java4反射与泛型-3范型-6super通配符

    1.super通配符 1.1super通配符第一种用法 泛型的继承关系 Pair<Integer>不是Pair<Number>的子类,如 static void set(Pai ...

  6. 廖雪峰Java4反射与泛型-3范型-5extends通配符

    1.泛型的继承关系: Pair<Integer>不是Pair<Number>的子类 add()不接受Pair<Integer> Pair.java package ...

  7. 廖雪峰Java4反射与泛型-3范型-3编写泛型

    编写泛型类比普通的类要麻烦,而且很少编写泛型类. 1.编写一个泛型类: 按照某种类型(例如String)编写类 标记所有的特定类型例如String 把特定类型替换为T,并申明 Pair.java pa ...

  8. 廖雪峰Java4反射与泛型-1反射-2访问字段Field和3调用方法Method

    2.字段Field 2.1.通过Class实例获取字段field信息: getField(name): 获取某个public的field,包括父类 getDeclaredField(name): 获取 ...

  9. 廖雪峰Java4反射与泛型-1反射-1Class类

    1.Class类与反射定义 Class类本身是一种数据类型(Type),class/interface的数据类型是Class,JVM为每个加载的class创建了唯一的Class实例. Class实例包 ...

随机推荐

  1. C++学习(二十一)(C语言部分)之 函数2

    复习 函数名 函数名称 调用时需要函数名加上相应的参数函数类型 void 返回值(根据函数的需要)参数函数体  用来写函数的一个定义 函数怎样实现都现在其中函数声明 函数定义 定义如果放在调用的后面, ...

  2. 《DSP using MATLAB》Problem 5.30

    代码: %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ %% Output In ...

  3. js判断输入的字符是否是汉字

    <script type="text/javascript"> var c=prompt("请输入一个字符"); var isNumber = c& ...

  4. java小知识,驼峰规则

    单词之间不以空格.连接号或者底线连结(例如不应写成:camel case.camel-case或camel_case形式).共有两种格式: 1.小驼峰式命名法(lower camel case): 第 ...

  5. 续drone 1.0 新界面调整

    接以前的内容,drone 最新发布的版本又有界面信息的调整了,更方便了. 环境准备 docker-compose 文件 version: '3' services: drone-server: ima ...

  6. JSON字符串转C#实体Class类

    在项目开发过程中,经常需要和不同部门或者不同的组员一起协同工作,但对方写的json返回的结果集,我们需要用,那么如何来生成对应的类代码和实体对象呢?于是参考了网上的做法,做一个简单的字符串转实体类的功 ...

  7. java_oop_类与对象

    类与对象包方法 ========================================= 对象的概念类与对象的关系    万物皆对象        属性(名词)            对象的 ...

  8. redis 学习资料

    redis 学习资料 网址 Redis 教程(菜鸟教程) http://www.runoob.com/redis/redis-tutorial.html Redis 命令参考 http://redis ...

  9. 在外网访问家里面的电脑 和 DMZ

    方法1:使用 MDZ (  demilitarized zone), 中文意思 非武装的区域.我们的家用电脑一般都在 路由器所在的 C类内网(192.X.X.X 的 ip).外网是不能直接访问内网的. ...

  10. Maven项目main和test文件夹说明

    需要自己来手动调整项目目录, Maven项目通常划分为 main 和 test 两部分,main 中存放实际项目资源,test 存放测试项目资源,二者内部同时又划分为 source 和 resourc ...