mapengpeng1999@163.com java之注解

注解

一、注解介绍

注解是JDK1.5之后,Java增加了对元数据(metadata)的支持,也就是注解(Annotation),其实就是代码里面的特殊标记,这些标记可以在程序编译、加载、运行的时候被读取,并且执行相应的处理,通过使用Annotation注解,程序员可以在不改变原有程序逻辑的情况下,在原程序中嵌入一些补充信息,Annotation可以像修饰符一样被使用,可以由于修饰类、包、接口、方法、构造方法、全局变量、参数、局部变量等等,这些信息被保存在Annotation的name=value对中。对于我们目前来说,我对自定义注解的要求不高,但是我们重点是要学习后面JDK,JavaEE,Spring,SpringMVC,MyBatis,SpringBoot,SpringCloud中提供的注解的用法。在涉及到框架开发的话,几乎都使用注解的方式。

二、JDK提供的三个注解

使用Annotation时要在其前面加上@符号,并把该Annotation当成一个修饰符来使用,用于修饰它支持的程序的元素。JDK提供的三个基本的注解:

  • @Override : 限定方法为复写父类的方法,或者是实现接口的方法
  • @Deprecated:限定类或者方法已经过时了
  • @SuppressWarnings:拟制编译器警告,如果程序中有警告,又不希望警告出现,可以使用这个注解进行抑制。

注解1:@Override

package com.wanbangee.annotationdemo;
public class SalerEmployee extends Employee{
	private double lastSale;
	//...省略属性和构造器 还有 getter和setter方法
	/**
	 * @Override 表示子类复写的父类的方法,或者实现类实现的接口的方法
	 * 	如果子类复写的方法上不加上@Override 注解
	 */
	@Override
	public void sayHello() {
		System.out.println("复写了父类的方法");
	}
	public void sayGoodBye() {
	}
	@Override
	public void walk() {
	}
}

注解二:@Deprecated注解,可以注解在类声明处和方法声明处,表示此类或者此方法已经过时

package com.wanbangee.annotationdemo;
public class TestDeprecated {
	public static void main(String[] args) {
		Person person = new Person();
		person.age = 20;
		person.name = "紫霞仙子";
		person.printPerson();
	}
}

@Deprecated
class Person{
	int age;
	String name;
	
	@Deprecated
	public void printPerson() {
		System.out.println(this.name + "====" + this.age);
	}
}

注解3:@SuppressWarnings,抑制编译器警告

package com.wanbangee.annotationdemo;
import java.util.ArrayList;
import java.util.List;
public class ListDemo01 {
	//抑制编译器警告
	 @SuppressWarnings({ "rawtypes", "unchecked" })
	public static void main(String[] args) {
		List list = new ArrayList();
		list.add("白骨精");
		list.add("蜘蛛精");
		list.add("老鼠精");
	}
}

三、自定义注解类型

在开发中很少去使用,如果是编写自己的框架时,会使用的。

  • 定义新的注解需要使用@interface关键字声明
  • Annotation的成员变量在Annotation定义中以无参数方法的形式来申明
  • 可以给声明的成员变量指定初始值,指定初始值使用default关键字
  • 没有成员定义的Annotation称为标记,包含成员变量的Annotation称为元数据的Annotation
package com.wanbangee.annotationdemo;
/**
 * 	自定义注解
 * @author Administrator
 *
 */
public @interface MyAnnotation {
}

四、元注解

所谓元注解,就是给自定义注解上面标注的注解。在JDK1.5之后专门提供了在注解上面进行注解的注解类型,分别是:

  • @Retention :只能用于修饰一个Annotation定义,用于指定该Annotation可以保留多长的时间,@Retention包含一个RetentionPolicy类型的成员变量,使用@Retention注解时候必须为改成员变量指定值:
  • RetentionPolicy.SOURCE:表示编译器直接丢弃这种策略的注解
  • RetentionPolicy.CLASS:编译器会将这种注解策略记录在class文件中,当运行java程序的时候,JVM不会保留这个注解,这是默认值
  • RetentionPolicy.RUNTIME:在程序编译、运行的各个环境,都会保留这种注解,程序可以通过反射获得该注解。
  • @Target : 用于定义注解可以标注的位置
  • TYPE:表示可以标注在类上
  • FIELD:表示标注在属性上
  • METHOD:表示可以标注在方法上
  • PARAMETER : 表示可以标注在参数上
  • CONSTRUCTOR:表示可以声明在构造方法上
  • LOCAK_VARIABLE : 表示可以声明在成员变量上
  • @Documented:用于定义注解是否可以在使用javadoc指令的时候,一同生成帮助文档
  • @Inherited:用于定义注解是否具有继承性,如果某个类使用被 @Inherited修饰的注解,则其子类自动具有该注解,实际开发中,此注解使用比较少
package com.wanbangee.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 // 如果使用@Inherited修饰,那么MyAnnotation注解将具有继承性,表示如果某个类使用MyAnnotation注解,那么其子类就自动的有这个注解了
@Documented //表示在使用javadoc指令的时候,会生成帮助文档
//表示MyAnnotation可以声明在类和方法上
@Target({ElementType.TYPE,ElementType.METHOD}) 
//value=RetentionPolicy.RUNTIME : 表示使用MyAnnotation注解的程序在编写,编译,运行的时候都会保留这个注解
//value=RetentionPolicy.CLASS : 这是默认的策略,表示使用MyAnnotation注解的程序在编写是保留注解,但是在编译的时候不保留这个注解
//value=RetentionPolicy.RUNTIME : 表示使用MyAnnotation注解的程序在编写,编译,运行时都保留这个注解
@Retention(RetentionPolicy.RUNTIME) 
public @interface MyAnnotation {	
}

总结:
1.要熟悉JDK提供的三个注解
2.在进行自定注解的时候,要了解元注解的使用,即每个元注解的作用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值