Java日志十七「注解」

**

注解

**
我们在一开始写代码的时候,就会在复杂的代码前加上注释,这是为了方便我们阅读。而注解是为了方便计算机阅读,也就是说注解是给电脑看的

**注解也叫元数据,是一种代码级别的说明。**是JDK1.5以后版本引入的一个特性,与类,接口,枚举在同一个层次分明。可以声明在包,类,字段,方法,局部变量,方法参数等的前面。

注解的作用:
1.编译检查:通过代码里标识的注解让编译器进行基本的编译检查
2.代码分析:通过代码里标识的注解对代码进行分析
3.编写文档:通过代码里标识的注解生成文档

下面我们看一些JDK中预定义的代码:

@Deprecated:该注解标注的内容表示已过时
@SuppressWarnings:压制警告
@Override:检测标注的方法是否继承自父类或接口

public class Annotation_practice {
	
	@Deprecated//method2方法是method1方法的升级版,建议使用method2,所以加上注解Deprecated
	public void method1()
	{
		
	}
	
	@SuppressWarnings("all")//不想看到黄色的警告,这个注解可以压制,加到方法前方法的警告消失,加到类前整个类警告消失
	public void method2()
	{
		int a;
	}

	@Override
	public String toString() 
	{
		return null;
	}
}

自定义的注解与元注解

通过反编译我们知道了注解就是一个接口,继承了java.lang.annotation.Annotation

自定义一个注解:
注解的属性就是其中定义的抽象方法

要求:
1.属性的返回值类型
2.定义了属性要给属性赋值(使用的时候)
使用了default关键字默认初始化在使用时可以不赋值,若只有一种属性且名字为value,那么直接写值就可以。

元注解:用于描述注解的注解
@Target:描述注解能够作用的位置
@Retention:描述注解被保留的阶段(对应java程序的三个阶段)
@Documented:描述注解是否被抽取到api文档中
@Inherited:描述注解是否被子类继承

下面是一个自定义的注解,使用了元注解来描述:

	@Target(value= {ElementType.TYPE,ElementType.METHOD})//被这个注解描述的注解可以加到类上面与方法上面。TYPE:作用到类上;METHOD:方法上;FIELD:成员变量上
	@Retention(RetentionPolicy.RUNTIME)//被这个注解描述的注解可以保留到Class文件,并且被JVM读取到
	@Documented//被这个注解描述的注解可以被抽取到javadoc文档中
	@Inherited//被这个注解描述的注解,如果加到了一个父类上面,那么它的子类就算不写这个注解也会隐式的继承这个注解
	
	public @interface MyAnno {
		int show01();
		String show02() default "xxx";
		Person show03();//返回值是一个枚举类型(Person是一个自定义的枚举类)
		MyAnno2 show04();//返回值是一个注解类型
		String[] show05();
}

现在我们来使用一下我们定义的注解

	@MyAnno(show01 = 0,show03 = Person.P1, show04 = @MyAnno2, show05 = { "" })
	public void test()
	{
		
	}

因为抽象方法show02有默认值(xxx),所以可以不赋值,其他没有默认值的属性要依次赋值。

这次就更新到这里,下次写两个简单的框架联系一下注解的使用

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值