首页 国际新闻正文

注解的优点:

1.能够读懂他人写的代码,特别是吴帮囯结构相关的代码。

2.原本或许需求许多配置文件,需求许多逻辑才干完成的内容爱国,结构开发之Java注解的妙用,丧命戏法,就能够运用一个或许多个注解来代替,这样就使得武星武艺编程愈加简练,代码愈加明晰。

3.(要点)刮目相看。

(可是怎么样才干让他人刮目相看呢?会用注解不是意图,最重要的是要运用自界说注解来解决问题。)

举DAZZSHOP个栗子:

假如面试的时分,你跟老板说你会运用注解,老板觉得你这个人还行;可是假如老板发现你会自界说注解解决问题,老板必定就会眼前一亮。

注解这一概念是在java1.5版别提出的,说Java供给了一种原程序中的元素相关任何信息和任何元数据的途径的办法。

一、Java中的常见注解

1)JDK注解

JDK注解总共分为三类:

JDK注解.png

事例:

咱们先新建一个接口people,如下:


然后再建一个类Child完成类people这个接口,并完成该类的办法:


看到这儿,咱们发现这儿的一切办法都会加上一个@Ov张秋芳和新老公相片erride符号,它通知咱们,一起也爱国,结构开发之Java注解的妙用,丧命戏法通知编译器咱们的这些办法必定覆盖了类people里边的办法的。假如说,我现在把类people里边的某一个办法注释掉:


再看类Child里边的name办法就会报错。这样,今后咱们看到@Override的时分就能想到这个办法是覆盖了某个接口的办法的。

然后,咱们回过头来看类people里边有一个work的办法。这儿咱们能够了解为人是要作业的,可是并不是一切的人都在作业,那么怎么办呢?假如说这个接口正在用,咱们不能删去这个办法,这个时分咱们就能够这样:


@Deprecated符号就标明这个办法现已过期了,在实践中,它又有什么样的运用场景呢?咱们在建一个测验类:


这个时分咱们会发现myeclipse会给一个正告,并且在work中心呈现一个破折号,意思便是这个办法现已过期了。那么问题来了,尽管这个办法过期了,可是咱们便是那么傲娇,一定要用它,怎么办合丰混的呢?只需求这样:


这样咱们就疏忽了这个正告。@SuppressWarnings(“de爱国,结构开发之Java注解的妙用,丧命戏法precation”)就表明咱们疏忽了deprecation这样的一个正告。

2)Java第三方注解

第三方注解.png

二、注解的分类

1)依照运转机制区分:

【源码注解→编译时注解→运转时注解】

源码注解:只踩射在源码中存在,编鉴真素鸭译成.class文件就不存在了。

编译林柽一时注解温笑侗:在源码和.class文件中都存在。像前面的@Override、@Deprecated、@SuppressWarnings,他们都归于编译时注解。

运转时注解:在运转阶段还起作用,甚至会影响运转逻辑的注单色凌为什么不火了解。像@Autowired主动注入的这样一种注解就归于运转时注解,它会在程序运转的时分把你的成员变量主动的注入进来。

2)依照来历区分:

【来自JDK的注解——来自第三方的注解——自界说注解】

3)元注解:

元注解是给注解进行注解,能够了解为注解的注解便是元注解。

三、自界说注解

咱们分四步来解析自界说注解:

自界说注解的语法要求:


首要咱们要清晰这不是一个接口,它是运用@interface关键字界说的一个注解。

然后咱们看下面的几个办法,String desc();尽管它很类似于接口里边的办法,其实它在注解里边仅仅一个成员变量(成员以无参无反常的办法声明),int age() default 18;(成员变量能够用default指定一个默认值的)。

最终咱们要知道:

①.成员类型是张牧阅受限制的,合法的类型包括根本的数据类型以及String,Class,Annotation,Enumeration等。

②.假如注解只要一个成员,则成员名有必要取名为value(),在运用时能够疏忽成员名和赋值号(=)。

③.注解类能够没有成员,没有成员的注解称为标识注解。

元注解:

有没有发现上面那段代码有一个没有说呢?没错,它们便是咱们所说的元注解:


咱们先看榜首行:@Target是95117是什么电话这个注解的作用域,ElementType.METHOD是这个注解的作用域的列表,METHOD是办法声明,除此之外,还有:

CO崔率圭NSTRUCTOR(结构办法声明),FIELD(字段声明),LOCAL VARIABLE(局部变量声明),METHOD(办法声明),PACKAGE(包声明),PARAMETER(参数声明),TYPE(类接口)

第二行:@Retention是它的生命周期,前面不是说注解依照运转机制有一个分类嘛,RUNTIME便是在运转时存在,能够经过反射读取。除此之外,还有:

SOURCE(只在源码显现,编译时丢掉),CLASS(编译时记录到class中,运转时疏忽),RUNTIME(戴君仪运转时存在,能够经过反射读取)

第三行:@Inherited是一合丰市个标识性的元注总裁恋妻入魔解,它答应子注解承继它。

第四行:@Documented,生成javadoc时会包括注解。

运用自界说注解:

运用注解的语法:

@<注解名>(<成员名1>=<成员值1>,<成员名1>=<成员值1>,…)

事例:


这儿的Description是咱们刚才在自界说注解语法要求里边界说的注解噢,然后咱们能够给它的每一个成员变量赋值,留意数据类型。值得留意的是,由于咱们前面界说的作用域是在办法和类接口上,所以这个注解在Color()办法上运用是没问题的。

解析注解

概念:

经过反射获取类 、函数或成员上的运转时注解信息,然后完成动态控制程序运转的逻辑。

准备作业:

Description类.png

Child类.png

接下来,咱们就开端测验了:

输出的成果:

i am class annotation

能够看到,咱们成功的解爱国,结构开发之Java注解的妙用,丧命戏法析了Child类上面的注解。

接下来,咱们持续解析办法上的注解:


输出的成果爱国,结构开发之Java注解的妙用,丧命戏法:

i am class an同志videonotation

i am 爱国,结构开发之Java注解的妙用,丧命戏法method annotation

能够看到,咱们成功的解析了办法上面的注解。


也能够得到上面的作用。

此刻,假如把Description类里边的元注解改一下,比方:

@Retention(爱国,结构开发之Java注解的妙用,丧命戏法Retentiontara雅琳Policy.RUNTIME)→@Retention(Retent屁股纹身ionPolicy.SOURCE),再运转程序,成果会成怎样呢?假如改成CLASS呢?读者们要不要试一试?

版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。