Java注解

网友投稿 509 2022-05-30

Java注解

好嘛,好嘛,又到了伤脑筋的时候啦!

讲真的,之前Java这三大高级特性,我一听名字就感觉到了一股杀气!哇,泛型,反射,注解,这都是什么高级词汇,一听就很难学! 后来学了后发现,嗯,没感觉错,确实是很难学!哈哈哈(笑啥笑,难学还挺开心)

今天我们的主角是注解。好家伙,注解。啥东西啊,看着就没思路。 不要慌,问题不大

我们先看看比较官方的解释:Java 注解用于为 Java 代码提供元数据。作为元数据,注解不直接影响你的代码执行,但也有一些类型的注解实际上可以用于这一目的。

看看官方解释,再结合字面意思,咦,貌似有点内个意思了哈。

上面清晰的写着,注解不直接影响你的代码执行,意味着什么,意味着我们从字面理解的意思,是差不多对的。 好,总结一下,注解就是:声明我们的代码中的方法,属性,类,接口等作用的,而且和注释不同的一个东西。

而且而且,貌似你可以这么理解,我给你一个注解,像不像我给你扣了一个大帽子。

比如说你初学Java,进了一个Java群,你刚好会了一个新知识,这时候有一个比较活跃的群友问了这个问题,你洋洋洒洒的说了出来,顿时这个人就给你套了个大佬的帽子,因为他是活跃群友,所有你一冒头他就喊你是大佬,这样你在别人眼里也就是大佬了。

而注解就相当于是我给代码套了个帽子,让别的程序员一下就能看出来他是干嘛的 。

1.常规注解

1.代码中的注解

Java代码中的注解就是这种形式的

在代码上面有个 : @Xxxx 的东西

应该见过,也可能没见过,不过就是这个东西,这是用法

2.创造注解

那么怎么创造一个注解呢

其实特别简单,格式如下:

@Interface Xxx{}

没了,就这么简单

那么我们就动动小手 创建一个我们能的注解吧

//定义一个 什么都没有的 注解 @interface Isthis{ }

这就定义好我们自己的注解了

3.使用注解

上面我们已经定义了一个注解,那么怎么使用呢

只需要将我们自己定义的注解(名词)放在我们需要注解(动词)的代码上面,就像这样

//定义一个 什么都没有的 注解 @interface Isthis{ } //使用你的注解 @Isthis class Good{ }

我们定义了一个空的注解,也定义了一个空的类,并将我们的注解用在了我们的类上面

当然,这样很不直观,那么我们就实例化一个对象来看看

public class Ex5_8 { public static void main(String[] args) { Good a = new Good(); System.out.println(a); } }

运行结果为:

在这里插入图片描述

然后再将注解去掉看看

public class Ex5_8 { public static void main(String[] args) { Good a = new Good(); System.out.println(a); } } class Good{ }

运行结果为:

在这里插入图片描述

是一样的,说明注释对我们的代码没有影响

2.元注解

什么是元注解?能给注解进行注解的注解。

哈哈哈,是不是有点套。没事,这样看:

元注解是能给注解(我们之前定义的)进行注解(注释解释)的注解(名词,注解)。

这就很清晰了吧。

我们的元注解有以下几种,下面我将带领大家看看。

Java注解

在这里插入图片描述

1. @Retention

Retention的意思是保留。根据见名知意的理解,其实这个元注解的作用其实就是注解的保留时间,也就是这个注解能保留到什么时候。

注解也有方法,我们来看看这个保留注解的方法

SOURCE

被这个属性注解的注解,只在源代码中能看到,起作用

用法是这样:

@Retention(RetentionPolicy.SOURCE) @Interface Text{}

CLASS

被这个属性注解的注解,在class文件中也可以看见,但是不会被我们的Java虚拟机加载

用法:

@Retention(RetentionPolicy.CLASS) @interface Text{ }

RUNTIME

会被Java虚拟机加载

@Retention(RetentionPolicy.RUNTIME) @interface Text{ }

2. @Documented

中文意思是:备有证明文件的。好吧,这个意思就不是那么清晰了

这个元注解的作用是将我们的注解加载到javadoc中,这个javadoc是我们的Java程序中所有的文档注释(/** */)产生的注视文档。

而这个元注解就是可以让我们的注解也进入这个文档。

3. @Target

中文意思是:目标。

作用是:告诉注解,你该用到哪里,就是说被这个注解的注解可以注解什么类型的数据

大白话:我告诉你,你只能给类进行注解,那你就只能给类注解,放别的地方就会报错。

具体使用如下:

可以给注解进行注解,是不是想到了元注解,没错,可以看看元注解的源码,都被这个注解过

@Target(ElementType.ANNOTATION_TYPE) @interface Text{ }

可以让注解给构造方法注解

@Target(ElementType.CONSTRUCTOR) @interface Text{ }

可以让注解给属性进行注解

@Target(ElementType.FIELD) @interface Text{ }

可以让注解给局部变量进行注解

@Target(ElementType.LOCAL_VARIABLE) @interface Text{ }

可以让注解给方法进行注解

@Target(ElementType.METHOD) @interface Text{ }

可以让注解给包进行注解

@Target(ElementType.PACKAGE) @interface Text{ }

可以让注解给方法变量进行注解

@Target(ElementType.PARAMETER) @interface Text{ }

4. @Inherited

中文意思:继承

被此元注解 注解(动词) 的注解(名词),如果注解了一个类A,类A被类B继承,那么,类B同样继承类A的注解。

@Inherited @interface Text{ } @Text class Good{ } class Good_son extends Good{}

这里的Good_son类虽然看起来没有被注解,但是因为Inherited元注解的存在,他也继承了Good的注解@Text.

3.标准注解

标准注解就是直接作用在别的数据上的 什么是数据?变量,方法,类,接口,枚举。。。

1. @Override

中文意思:重写

保证Override重写声明的正确性。

是不是很眼熟,没错就是了类里面的重写父类方法,这个注解的作用就是用在子类需要重写的时候。

如果父类没有你要重写的方法,就会出错误。这里我们故意出错看看错误

class Good{ void say(){} void speak(){} } class Good_son extends Good{ @Override void say(){} @Override void spea(){} }

idea的方便之处,会爆红:

在这里插入图片描述

会提示错误,并给出解决方法

在这里插入图片描述

意思就是,你的父类没这个方法,下面的上移就是讲这个方法在父类实现。

改正确,就不会爆红:

在这里插入图片描述

2. @Deprecated

中文意思:不宜用

就是这个方法已经不适合使用了

public class Ex5_8 { public static void main(String[] args) { Good a = new Good(); a.say(); } } class Good{ @Deprecated void say(){} void speak(){} }

这样看代码,不太直观,还是放idea的截图吧

say方法被@Deprecated注解,在实例化调用的时候,就会有删除线,意思就是,这个方法已经不适合使用了。

4.注解的属性

注解也有属性,和类一样。

用法是这样

@interface Text{ int id(); String value(); } @Text(id=1, value="s") class Good{ void say(){} void speak(){} }

定义注解属性的时候,类型 属性名();

属性可以有默认值,默认值需要用default关键字传递

类型 属性名 default 值

@interface Text{ int id() default 0; String value(); } @Text(id=1, value="s") class Good{ void say(){} void speak(){} }

Java注解

好嘛,好嘛,又到了伤脑筋的时候啦!

讲真的,之前Java这三大高级特性,我一听名字就感觉到了一股杀气!哇,泛型,反射,注解,这都是什么高级词汇,一听就很难学! 后来学了后发现,嗯,没感觉错,确实是很难学!哈哈哈(笑啥笑,难学还挺开心)

今天我们的主角是注解。好家伙,注解。啥东西啊,看着就没思路。 不要慌,问题不大

我们先看看比较官方的解释:Java 注解用于为 Java 代码提供元数据。作为元数据,注解不直接影响你的代码执行,但也有一些类型的注解实际上可以用于这一目的。

看看官方解释,再结合字面意思,咦,貌似有点内个意思了哈。

上面清晰的写着,注解不直接影响你的代码执行,意味着什么,意味着我们从字面理解的意思,是差不多对的。 好,总结一下,注解就是:声明我们的代码中的方法,属性,类,接口等作用的,而且和注释不同的一个东西。

而且而且,貌似你可以这么理解,我给你一个注解,像不像我给你扣了一个大帽子。

比如说你初学Java,进了一个Java群,你刚好会了一个新知识,这时候有一个比较活跃的群友问了这个问题,你洋洋洒洒的说了出来,顿时这个人就给你套了个大佬的帽子,因为他是活跃群友,所有你一冒头他就喊你是大佬,这样你在别人眼里也就是大佬了。

而注解就相当于是我给代码套了个帽子,让别的程序员一下就能看出来他是干嘛的 。

1.常规注解

Java代码中的注解就是这种形式的

在代码上面有个 : @Xxxx 的东西

应该见过,也可能没见过,不过就是这个东西,这是用法

那么怎么创造一个注解呢

其实特别简单,格式如下:

@Interface Xxx{}

没了,就这么简单

那么我们就动动小手 创建一个我们能的注解吧

//定义一个 什么都没有的 注解 @interface Isthis{ }

这就定义好我们自己的注解了

上面我们已经定义了一个注解,那么怎么使用呢

只需要将我们自己定义的注解(名词)放在我们需要注解(动词)的代码上面,就像这样

//定义一个 什么都没有的 注解 @interface Isthis{ } //使用你的注解 @Isthis class Good{ }

我们定义了一个空的注解,也定义了一个空的类,并将我们的注解用在了我们的类上面

当然,这样很不直观,那么我们就实例化一个对象来看看

public class Ex5_8 { public static void main(String[] args) { Good a = new Good(); System.out.println(a); } }

运行结果为:

然后再将注解去掉看看

public class Ex5_8 { public static void main(String[] args) { Good a = new Good(); System.out.println(a); } } class Good{ }

运行结果为:

是一样的,说明注释对我们的代码没有影响

2.元注解

什么是元注解?能给注解进行注解的注解。

哈哈哈,是不是有点套。没事,这样看:

元注解是能给注解(我们之前定义的)进行注解(注释解释)的注解(名词,注解)。

这就很清晰了吧。

我们的元注解有以下几种,下面我将带领大家看看。

Retention的意思是保留。根据见名知意的理解,其实这个元注解的作用其实就是注解的保留时间,也就是这个注解能保留到什么时候。

注解也有方法,我们来看看这个保留注解的方法

SOURCE

被这个属性注解的注解,只在源代码中能看到,起作用

用法是这样:

@Retention(RetentionPolicy.SOURCE) @Interface Text{}

CLASS

被这个属性注解的注解,在class文件中也可以看见,但是不会被我们的Java虚拟机加载

用法:

@Retention(RetentionPolicy.CLASS) @interface Text{ }

RUNTIME

会被Java虚拟机加载

@Retention(RetentionPolicy.RUNTIME) @interface Text{ }

中文意思是:备有证明文件的。好吧,这个意思就不是那么清晰了

这个元注解的作用是将我们的注解加载到javadoc中,这个javadoc是我们的Java程序中所有的文档注释(/** */)产生的注视文档。

而这个元注解就是可以让我们的注解也进入这个文档。

中文意思是:目标。

作用是:告诉注解,你该用到哪里,就是说被这个注解的注解可以注解什么类型的数据

大白话:我告诉你,你只能给类进行注解,那你就只能给类注解,放别的地方就会报错。

具体使用如下:

可以给注解进行注解,是不是想到了元注解,没错,可以看看元注解的源码,都被这个注解过

@Target(ElementType.ANNOTATION_TYPE) @interface Text{ }

可以让注解给构造方法注解

@Target(ElementType.CONSTRUCTOR) @interface Text{ }

可以让注解给属性进行注解

@Target(ElementType.FIELD) @interface Text{ }

可以让注解给局部变量进行注解

@Target(ElementType.LOCAL_VARIABLE) @interface Text{ }

可以让注解给方法进行注解

@Target(ElementType.METHOD) @interface Text{ }

可以让注解给包进行注解

@Target(ElementType.PACKAGE) @interface Text{ }

可以让注解给方法变量进行注解

@Target(ElementType.PARAMETER) @interface Text{ }

中文意思:继承

被此元注解 注解(动词) 的注解(名词),如果注解了一个类A,类A被类B继承,那么,类B同样继承类A的注解。

@Inherited @interface Text{ } @Text class Good{ } class Good_son extends Good{}

这里的Good_son类虽然看起来没有被注解,但是因为Inherited元注解的存在,他也继承了Good的注解@Text.

3.标准注解

标准注解就是直接作用在别的数据上的 什么是数据?变量,方法,类,接口,枚举。。。

中文意思:重写

保证Override重写声明的正确性。

是不是很眼熟,没错就是了类里面的重写父类方法,这个注解的作用就是用在子类需要重写的时候。

如果父类没有你要重写的方法,就会出错误。这里我们故意出错看看错误

class Good{ void say(){} void speak(){} } class Good_son extends Good{ @Override void say(){} @Override void spea(){} }

idea的方便之处,会爆红:

会提示错误,并给出解决方法

意思就是,你的父类没这个方法,下面的上移就是讲这个方法在父类实现。

改正确,就不会爆红:

中文意思:不宜用

就是这个方法已经不适合使用了

public class Ex5_8 { public static void main(String[] args) { Good a = new Good(); a.say(); } } class Good{ @Deprecated void say(){} void speak(){} }

这样看代码,不太直观,还是放idea的截图吧

say方法被@Deprecated注解,在实例化调用的时候,就会有删除线,意思就是,这个方法已经不适合使用了。

4.注解的属性

注解也有属性,和类一样。

用法是这样

@interface Text{ int id(); String value(); } @Text(id=1, value="s") class Good{ void say(){} void speak(){} }

定义注解属性的时候,类型 属性名();

属性可以有默认值,默认值需要用default关键字传递

类型 属性名 default 值

@interface Text{ int id() default 0; String value(); } @Text(id=1, value="s") class Good{ void say(){} void speak(){} }

Java

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Spring Cloud【Finchley】-13 Eureka Server HA高可用 2个/3个节点的搭建及服务注册调用
下一篇:知识图谱术语定义搜集与斟酌
相关文章