零基础学Java第二十四天之注解的理解与使用

注解

1、什么是注解

java.annotation包Annotation是从JDK1.5开始引入的新技术,注解即可以对程序员解释又可以对程序解释

2、注解与注释的区别

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

3、注解的所用

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

4、注解的格式

注解是以“@注释名”在代码中存在的,还可以添加一些参数例如:@SuppressWarnings(value=“unchecked”)

5、注解的应用

可以附加在package、class、method、field等上面,相当于给他们添加了额外的辅助信息,我们可以通过反射机制实现对这些数据的访问

6、内置注解

@Overrlde:定义在java.lang.Override中,此注解只适用于修饰方法,表示一个方法声明打算重写超类中的另一个方法声明

@Deprecated:定义在java.lang.Deprecated中.此注解可以用于修饰方法,属性,类。表示不鼓励使用这样的元素.通常是因为它很危险或者存在更好的选择

@SuppressWarnings:镇压警告,定义在java.lang.SuppressWarnings中用来抑制编译时的警告信息,与前两个注释有所不同.你需要添加参数才能正确使用。这些参数都是已经定义好了的.我们选择性的使用就好了

@SuppressWarnings(“all”)抑制所有类型的警告信息@SuppressWarnings(“unchecked”)抑制单类型的警告信息

@SuppressWarnings(value={“unchecked”,“deprecation”})抑制多类型的警告信息

7、元注解

元注解的作用:负责注解其他注解,Java定义了4个标准的meta-annotation类型,他们被用来提供对其他annotation类型作说明这些类型和它们所支持的类在java.lang.annotation包中可以找到

(@Target,@Retention,@Documented,@Inherited )

*@Target*:用于描述注解的使用范围(即:被描述的注解可以用在什么地方)

*@**Retention*:表示需要要在什么级别保存该注择信息,用于描述注解的生命周期 (SOURCE < CLASS < *RUNTIME*)

@Document:说明该注解将被包含在javadoc中@lnherited:说明子类可以继承父类中的该注解

8、自定义注解

1、内置注解

package com.xx.annotate;
import java.util.ArrayList;
/**

 * 内置注解
 * @override--重写父类方法
 * @SuppressWarnings("all")镇压警告
 * @deprecated--弃用的注解
 * */
   public class Test01 {
   //弃用的注解
   @Deprecated
   public void method(){}
   //镇压警告
   @SuppressWarnings("all")
   public void method01(){
   	ArrayList list = new ArrayList();
   	list.add(100);
   	list.add(123.1234);
   }
   //重写父类方法
   @Override
   public String toString() {
   	return super.toString();
   }
}

2、自定义注解的用法一

  1. @Target(ElementType.METHOD)

    • @Target:这个元注解用于指定被修饰的注解可以应用于哪些Java元素上。
    • ElementType.METHOD:这是ElementType枚举的一个值,表示被修饰的注解只能应用于方法上。

    因此,这个@Target(ElementType.METHOD)意味着紧随其后的注解只能被应用于方法上。

  2. @Retention(RetentionPolicy.RUNTIME)

    • @Retention:这个元注解用于指定被修饰的注解的生命周期。
    • RetentionPolicy.RUNTIME:这是RetentionPolicy枚举的一个值,表示被修饰的注解在运行时仍然可见,可以被JVM读取。

    在Java中,注解有三种保留策略(Retention Policies):

    • SOURCE:注解只保留在源码中,编译时会被丢弃。
    • CLASS:注解被保留在class文件中,但JVM加载class文件时会忽略它。
    • RUNTIME:注解被保留在class文件中,且可以在运行时通过反射机制被读取。

    因此,@Retention(RetentionPolicy.RUNTIME)意味着紧随其后的注解在运行时仍然可见,可以被JVM读取和使用。

1、注解
package com.xx.annotate02;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotaction {

}
2、使用
package com.xx.annotate02;

public class Test01 {
	/**
	 * 
	 * 自定义注解
	 * 
	 * */
	@MyAnnotaction
	public void method(){}
}

3、自定义注解的用法二

1、注解
package com.xx.annotate03;

//静态导入,ElementType也是一个枚举类
import static java.lang.annotation.ElementType.*;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
		//类,	属性,	构造方法,	  方法,	用于方法的参数
@Target({TYPE,FIELD,CONSTRUCTOR,METHOD,PARAMETER})
//用于指定被修饰的注解的生命周期。//运行时仍然可见
//RetentionPolicy枚举类
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotaction {
	String value();
}
2、使用
package com.xx.annotate03;
public class Test01 {
	/**
	 * 
	 * 自定义注解
	 * 根据我们写的注解可以应用在以下范围上
	 * 
	 * */
	@MyAnnotaction("aaa")
	//MyAnnotation 是一个注解,它有一个名为 value 的元素,该元素接受一个字符串值。
	//当您在 myMethod 方法上使用 @MyAnnotation("aaa") 时,
	//您正在为 value 元素提供字符串值 "aaa"。
	
	//写在方法上
	public void method(){
		
	}
	//写在无参构造上
	@MyAnnotaction("aaa")
	public Test01(){
		
	}
	//写在属性上
	@MyAnnotaction("aaa")
	String str;
	//写在参数上
	@MyAnnotaction("aaa")
	public void method02(@MyAnnotaction("aaa") int i) {
	}	
}

4、自定义注解的用法三

1、注解
package com.xx.annotate04;


//静态导入,ElementType也是一个枚举类
import static java.lang.annotation.ElementType.*;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
		//可以应用于方法
@Target({METHOD})
//用于指定被修饰的注解的生命周期。//运行时仍然可见
//RetentionPolicy枚举类
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotaction {
	
	
	String value() default "abc";
}

2、使用
package com.xx.annotate04;

public class Test01 {
	/**
	 * 
	 * 自定义注解
	 * 根据我们写的注解可以应用在以下范围上
	 * 
	 * */
	//@MyAnnotaction("aaa")
	//MyAnnotation 是一个注解,它有一个名为 value 的元素,该元素接受一个字符串值。
	//当您在 myMethod 方法上使用 @MyAnnotation("aaa") 时,
	//您正在为 value 元素提供字符串值 "aaa"。
	
	//因为给了默认值,所以可以有以下写法
	//写在方法上
	//用value给值
	@MyAnnotaction(value="aaa")
	public void method02(){
		
	}	
	//给值
	@MyAnnotaction("aaa")
	public void method03(){
		
	}
	//不给值
	@MyAnnotaction()
	public void method04(){
		
	}
}

5、自定义注解的用法四

1、注解
package com.xx.annotate05;

//静态导入,ElementType也是一个枚举类
import static java.lang.annotation.ElementType.*;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
		//可以应用于方法
@Target({METHOD})
//用于指定被修饰的注解的生命周期。//运行时仍然可见
//RetentionPolicy枚举类
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotaction {
	
	//注解多个
	String[] value();
}

2、使用
package com.xx.annotate05;

public class Test01 {
	/**
	 * 
	 * 自定义注解
	 * 根据我们写的注解可以应用在以下范围上
	 * 
	 * */
	//@MyAnnotaction("aaa")
	//MyAnnotation 是一个注解,它有一个名为 value 的元素,该元素接受一个字符串值。
	//当您在 myMethod 方法上使用 @MyAnnotation("aaa") 时,
	//您正在为 value 元素提供字符串值 "aaa"。
	
	//因为给了默认值,所以可以有以下写法
	//写在方法上
	//用value给值
	@MyAnnotaction(value="aaa")
	public void method02(){
		
	}	
	//给多个值,简易版
	@MyAnnotaction({"aaa","bbb","ccc"})
	public void method03(){
		
	}
	//给多个值,复杂版
	@MyAnnotaction(value={"aaa","bbb","ccc"})
	public void method04(){
		
	}
}

6、自定义注解的用法五

注解 MyAnnotaction 定义了一个名为 name 的元素,这个元素是一个字符串数组(String[])。这意味着当您使用这个注解时,需要为 name 元素提供一个或多个字符串值。

1、注解
package com.xx.annotate06;


//静态导入,ElementType也是一个枚举类
import static java.lang.annotation.ElementType.*;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
		//可以应用于方法
@Target({METHOD})
//用于指定被修饰的注解的生命周期。//运行时仍然可见
//RetentionPolicy枚举类
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotaction {
	
	//用name注解多个
	String[] name();
}

2、使用
package com.xx.annotate06;

public class Test01 {
	/**
	 * 
	 * 自定义注解
	 * 根据我们写的注解可以应用在以下范围上
	 * 
	 * */
	//@MyAnnotaction("aaa")
	//MyAnnotation 是一个注解,它有一个名为 value 的元素,该元素接受一个字符串值。
	//当您在 myMethod 方法上使用 @MyAnnotation("aaa") 时,
	//您正在为 value 元素提供字符串值 "aaa"。
	
	//因为给了默认值,所以可以有以下写法
	//写在方法上
	//用value给值
	@MyAnnotaction(name="aaa")
	public void method02(){
		
	}	
	//给多个值
	@MyAnnotaction(name={"aaa","bbb","ccc"})
	public void method04(){
		
	}
}

7、自定义注解的用法六

1、注解
package com.xx.annotate07;


//静态导入,ElementType也是一个枚举类
import static java.lang.annotation.ElementType.*;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
		//可以应用于方法
@Target({METHOD})
//用于指定被修饰的注解的生命周期。//运行时仍然可见
//RetentionPolicy枚举类
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotaction {
	
	//用name注解,用info注释多个,并设置默认值
	String name();
	String[] info() default "xxx";
}

2、使用
package com.xx.annotate07;

public class Test01 {
	/**
	 * 
	 * 自定义注解
	 * 根据我们写的注解可以应用在以下范围上
	 * 
	 * */
	//@MyAnnotaction("aaa")
	//MyAnnotation 是一个注解,它有一个名为 value 的元素,该元素接受一个字符串值。
	//当您在 myMethod 方法上使用 @MyAnnotation("aaa") 时,
	//您正在为 value 元素提供字符串值 "aaa"。
	
	//因为给了默认值,所以可以有以下写法
	//写在方法上
	//用name和info给值
	@MyAnnotaction(name = "aaa",info="xxx")
	public void method01() {
	}
	//name赋值,info使用默认
	@MyAnnotaction(name = "aaa")
	public void method02() {
	}
}

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值