Java注解(内置注解、元注解、自定义注解)

 

注解:

注解:给程序员和程序解释代码信息。

作用:可以作用于包、类、方法、属性上,给他们添加额外的信息。

tips:

  1. 不是程序本身,可以对程序作出解释(与注释(comment)类似)。
  2. 可以被其他程序(编译器)读取。

注解 和 注释 区别:
        注释:向程序员解释代码信息。
       注解:向程序员和程序解释代码信息

 
 

内置注解:

内置注解:Java给我们提供给我们的一个注解。

	//@Override表示该方法是重写父类的方法
	@Override
	public String toString() {
		return super.toString();
	}
	
	//@Deprecated表示该方法已过时
	@Deprecated
	public void method01(){
	}
	
	//@SuppressWarnings表示镇压警告的注解
	@SuppressWarnings("all")
	public void method02(){
		
		ArrayList list = new ArrayList();
		list.add(100);
		list.add(123.123);
		list.add("今天天气真好!");
	}
  1. @Override表示该方法是重写父类的方法。
  2. @Deprecated表示该方法已过时。
  3. @SuppressWarnings表示镇压警告的注解。

 

@SuppressWarnings:镇压警告,定义在java.lang.SuppressWarnings中用来抑制编译时的警告信息,需要添加参数才能正确使用。

​        @SuppressWarnings(“all”)抑制所有类型的警告信息。
​        @SuppressWarnings(“unchecked”)抑制单类型的警告信息。
​        @SuppressWarnings(value={“unchecked”,“deprecation”})抑制多类型的警告信息。

 
 

元注解:

       元注解:负责解释(注解)其他注解。Java定义了4个标准的meta-annotation类型,他们被用来提供对其他annotation类型作说明。

 

元注解有:@Target,@Retention,@Documented,@Inherited
 
​        @Target:用于描述注解的使用范围(即:被描述的注解可以用在什么地方,方法,类,参数等等)。
​        @Retention:表示需要要在什么级别保存该注择信息,用于描述注解的生命周期
(SOURCE(源码阶段[.java阶段])< CLASS([.class阶段])< RUNTIME(运行阶段))
​        @Document:说明该注解将被包含在javadoc中。
​        @lnherited:说明子类可以继承父类中的该注解。

//设置自定义注解使用范围为方法上。
@Target(ElementType.METHOD)
//设置自定义注解在运行阶段起作用。
@Retention(RetentionPolicy.RUNTIME)
//@interface不是定义接口,而是注解。
public @interface MyAnnotaction {
}

 

元注解中使用参数:

//静态导入
import static java.lang.annotation.ElementType.*;
//@Target(value={ElementType.TYPE,ElementType.FIELD,ElementType.METHOD,ElementType.PARAMETER,ElementType.LOCAL_VARIABLE,ElementType.TYPE_PARAMETER})

//@Target({ElementType.TYPE,ElementType.FIELD,ElementType.METHOD,ElementType.PARAMETER,ElementType.LOCAL_VARIABLE,ElementType.TYPE_PARAMETER})

//静态导入java.lang.annotation.ElementType,可以把ElementType去掉。
@Target({TYPE,FIELD,METHOD,PARAMETER,LOCAL_VARIABLE,TYPE_PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotaction {
}

注解的使用范围:

  1. ElementType.TYPE 类上
  2. ElementType.FIELD 属性上
  3. ElementType.METHOD 方法上
  4. ElementType.PARAMETER 参数上
  5. ElementType.LOCAL_VARIABLE 局部变量上
  6. ElementType.TYPE_PARAMETER 泛型上
@MyAnnotaction
public class Test01<@MyAnnotaction T> {

	public static void main(String[] args) {
		
	}
	
	@MyAnnotaction
	String attr;

	@MyAnnotaction
	public static void method(@MyAnnotaction String str){
		
		@MyAnnotaction
		int i = 100;
		System.out.println(i);
	}
}

 
 

自定义注解:

//设置自定义注解使用范围为方法上。
@Target(ElementType.METHOD)
//设置自定义注解在运行阶段起作用。
@Retention(RetentionPolicy.RUNTIME)
//@interface不是定义接口,而是注解。
public @interface MyAnnotaction {
}
public class Test01 {
	public static void main(String[] args) {
		
	}
    
    //使用自定义注解
	@MyAnnotaction
	public static void method(){
	}
}

  
 

注解使用范围:

//静态导入
import static java.lang.annotation.ElementType.*;

//静态导入java.lang.annotation.ElementType,可以把ElementType去掉。
@Target({TYPE,FIELD,METHOD,PARAMETER,LOCAL_VARIABLE,TYPE_PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotaction {
}

@MyAnnotaction
public class Test01<@MyAnnotaction T> {

	public static void main(String[] args) {
		
	}
	
	@MyAnnotaction
	String attr;

	@MyAnnotaction
	public static void method(@MyAnnotaction String str){
		
		@MyAnnotaction
		int i = 100;
		System.out.println(i);
	}
}

 
 

注解使用参数:

 

一个参数:

注解中定义变量后面要加小括号。

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotaction {
	//注解中定义变量后面要加小括号。
	String value();
}
public class Test01 {
	
	@MyAnnotaction(value="aaa")
	public void method01(){
	}
	
    //自定义注解里面只有一个参数的情况,且这个参数是value,才可以把参数名省略。
	@MyAnnotaction("bbb")
	public void method02(){
	}
}

 
 

参数为数组类型:
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotaction {
	
	String[] value() ;
	
}
public class Test01 {
	
	@MyAnnotaction("aaa")
	public void method01(){
	}
	
	@MyAnnotaction(value="bbb")
	public void method02(){
	}
	
	@MyAnnotaction(value={"aaa","bbb"})
	public void method03(){
	}
	
}

 
 

参数默认值:
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotaction {
	
	String[] value() default "xyz";
	
}

public class Test01 {
	//自定义注解有参数,且有默认值,则在注解使用中可以不写实参。
	@MyAnnotaction()
	public void method04(){
	}
	
    //自定义注解有参数,且有默认值,则在注解使用中,注解的小括号可以省略。
	@MyAnnotaction
	public void method05(){
	}
}

  1. 自定义注解有参数,且有默认值,则在注解使用中可以不写实参。

  2. 自定义注解有参数,且有默认值,则在注解使用中,注解的小括号可以省略。

 
 

多个参数:
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotaction {
	
	String str1();
	String str2();
	String[] value() default {"xxx","yyy"};
	
}

public class Test01 {
	
	@MyAnnotaction(str1="aaa",str2="bbb",value="ccc")
	public void method01(){
	}
	
	@MyAnnotaction(str1="aaa",str2="bbb",value={"xxx","yyy","zzz"})
	public void method02(){
	}
	
    //value参数有默认值,在注解使用中,value参数可以省略不写。
	@MyAnnotaction(str1="aaa",str2="bbb")
	public void method03(){
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值