“@” Java中的特殊符号——注解(Java中’@‘符号是什么意思) 考幼师的题目出发点是什么意思呀
“@” Java中的特殊符号——注解(Java中’@‘符号是什么意思)
在Java中经常看到这样的字眼
1.@Override
2.@Deprecated
3.@SuppressWarnings
4.@SafeVarargs
5.@FunctionalInterface
很多小伙伴不知道什么意思,其实这是一种注解,注意是注解,不是“//”注释哦。
1.什么是注解(百度百科)注解,可以看作是对一个类/方法的一个扩展的模版,每个类/方法按照注解类中的规则,来为类/方法注解不同的参数,在用到的地方可以得到不同的类/方法中注解的各种参数与值
注解也就是Annotation,相信不少人也和我之前一样以为和注释和doc一样,是一段辅助性的文字,其实注解不是这样的。
从JDK5开始,java增加了对元数据(描述数据属性的信息)的支持。其实说白就是代码里的特殊标志,这些标志可以在编译,类加载,运行时被读取,并执行相应的处理,以便于其他工具补充信息或者进行部署。
2.基本的Annotationjava提供了5个基本的注解,分别是
1.@Override
2.@Deprecated
3.@SuppressWarnings
4.@SafeVarargs
5.@FunctionalInterface
1.限定父类重写方法:@Override当子类重写父类方法时,子类可以加上这个注解,那这有什么什么用?这可以确保子类确实重写了父类的方法,避免出现低级错误
2.标示已过时:@Deprecated这个注解用于表示某个程序元素类,方法等已过时,当其他程序使用已过时的类,方法时编译器会给出警告(删除线,这个见了不少了吧)。
3.抑制编译器警告:@SuppressWarnings被该注解修饰的元素以及该元素的所有子元素取消显示编译器警告,例如修饰一个类,那他的字段,方法都是显示警告
4.“堆污染”警告与@SafeVarargs想理解这个就要明白什么是堆污染,堆污染是什么?
其实很好理解,就是把不带泛型的对象赋给一个带泛型的对象,为什么不行?很简单,因为不带泛型的话,默认会给泛型设定为object,意思就是什么类型都可以往里面塞,那你一个不带泛型的怎么可能给一个带泛型塞呢。
例如运行如下代码:
Listlist=newArrayList()list.add(20)Listls=listSystem.out.println(ls.get(0))则会抛出堆污染异常Exceptioninthread"main"java.lang.ClassCastException:java.lang.Integercannotbecasttojava.lang.StringatTest.Test1.main(Test1.java:29)
注意:可变参数更容易引发堆污染异常,因为java不允许创建泛型数组,可变参数恰恰是数组。抑制这个警告的方法有三个:
1.@SafeVarargs修饰引发该警告的方法或构造器
2.使用@suppressWarnings("unchecked")
3.编译时使用-Xlint:varargs
5.函数式接口与@Functionallnterface什么是函数式?如果接口中只有一个抽象方法(可以包含多个默认方法或多个static方法)
接口体内只能声明常量字段和抽象方法,并且被隐式声明为public,static,final。
接口里面不能有私有的方法或变量。
这个注解有什么用?这个注解保证这个接口只有一个抽象方法,注意这个只能修饰接口
3.自定义注解定义注解非常的简单,如下
public@interfaceTest{}
然后这个注解就可以用在别的地方
例如:
@Test
publicclassMyClass{}
这个自定义注解可以修饰程序中的类、方法、变量、接口等。通常放在所有修饰符之前。
你还可以为自己的注解类添加成员变量
例如:
public@interfaceMyTag{
//注解中的成员变量以方法的方式来定义
Stringname()
intage
}
然后
publicclassTest{
//当使用自定义注解的时候,这个注解本身是不会生效的,必须由开发者工具提取出来并进行处理。
@MyTag(name="XX",age=6)
publicvoidinfo(){}
}
你甚至还可以为成员变量指定初始值
public@interfaceMyTag{
Stringname()default"yeeku"
intage()default32
}
当你指定完默认值的时候,你可以直接@MyTag使用不需要带参数。
4.JDK的元Annotation1.使用@Retention这个注解是用来修饰注解定义的,作用是被修饰的注解可以保存多久,这个注解需要使用参数。
这个参数的类型是RetentionPolicy,所以使用这个注解就要对value赋值。
value的值有且仅有三个:
->RetenionPolicy.CLASS编译器把该注解记录在class文件中。当运行java程序时,JVM不可获取注解信息。这是默认值!
->RetenionPolicy.RUNTIME编译器把该注解记录在class文件中。当运行java程序时,JVM可获取注解信息,程序可以通过反射获取该注解信息
->RetenionPolicy.SOURCE该注解只保存在源代码中,编译器直接丢弃该注解
例如:@Retention(value=RetenionPolicy.SOURCE)可简写为@Retention(RetenionPolicy.SOURCE)
2.使用@Target@Target也只能修饰一个注解定义,作用是指定被修饰的注解能用于修饰哪些程序单元,@Target也包含了一个value值,他的值只能是下面的:ElementType.
取值注解使用范围METHOD可用于方法上TYPE可用于类或者接口上ANNOTATION_TYPE可用于注解类型上(被@interface修饰的类型)CONSTRUCTOR可用于构造方法上FIELD可用于域上LOCAL_VARIABLE可用于局部变量上PACKAGE用于记录java文件的package信息PARAMETER可用于参数上例如:
@Target(ElementType.METHOD)(这是简写)
public@interfaceAction()
上面就是他的用法,不过有个比较容易混淆的地方就是@interface和interface不是同一个东西:
@interface不是interface,是注解类是jdk1.5之后加入的,java没有给它新的关键字
,所以就用@interface这么个东西表示了这个注解类,就是定义一个可用的注解
,包括这个注解用于什么地方,是类,还是方法,还是property,还是方法入参等等
,还有这个注解是否编译后进入class比如我们知道的用于javadoc的注解,是不进入class文件的。
然后在后面你就可以用这个注解写代码了。总的来说,这就是一个生成javadoc时用到的注释类
3.使用@Documented这个注解用于指定被修饰的注解类将被javadoc工具提取成文档,如果定义注解类时使用了这个注解修饰,则所有使用该注解修饰的程序员苏API文档将会包含该注解说明。
例如:@Documentedpublic@interfaceTestable{}
4.使用@Inherited这个注解指定被他修饰的注解将具有继承性——如果某个类使用了@Xxx,则其子类将自动被@Xxx修饰
5.使用@Result作用是在同一个程序元素前使用多个相同类型的注解在java8之前只能通过@Results配置,
java8简化了它的写法例如:
@test(age=5)@test(age=8)publicvoidresultTest(){}
6.使用类型注解创建类实例new@InternedMyObject()
类型映射myString=(@NonNullString)str
implements语句中classUnmodifiableListimplements@ReadonlyList{...}
throwexception声明voidmonitorTemperature()throws@CriticalTemperatureException{...}
等等地方都可以用类型注解
新增ElementType.TYPE_USE和ElementType.TYPE_PARAMETER(在Target上)新增的两个注释的程序元素类型ElementType.TYPE_USE和ElementType.TYPE_PARAMETER用来描述注解的新场合。ElementType.TYPE_PARAMETER表示该注解能写在类型变量的声明语句中。
ElementType.TYPE_USE表示该注解能写在使用类型的任何语句中(eg:声明语句、泛型和强制转换语句中的类型)。还是那句话,这些注解本身是没有意义的。要靠自己实现类型注解的检查框架,或者第三方,类型注解最大的意义在于,让编译器执行更严格的检查,保证代码更加的健壮。
一切写作的出发点是什么? A、边写边想 B、没有一以贯之的逻辑C、
一切写作的出发点是什么?A、边写边想B、没有一以贯之的逻辑C、丰富的一手资料D、想清楚再写
参考答案:D试题分类:论文写作初阶发布时间:2021-02-07(2年前)试题链接:https://shitidaquan.com/q/18Z0r460遇到学习难题或是写论文、写代码的困扰吗?不用担心,我们的AI智能学习顾问可以为你提供帮助!它可以轻松解答你的问题,让你更快地掌握知识。无论你需要论文结构、引用格式的指导,还是代码语法、调试技巧的建议,我们的AI顾问都能够为你提供高效且准确的解答。现在就来尝试吧,让学习变得更加轻松!请访问:http://mfgpt.xyzstarting是什么意思
startingpoint出发点;起始点
startingat起始于
startingmaterial起始物料,原始材料;原材料
startingup启动;开机
startingtimen.起始时间
startingline起跑线
startingtorque起动转矩,起动扭矩
startingcurrent起动电流
startingsalary起薪;入职薪酬
startingposition起动位置,起点;开始动作
startingsystem起动系统
startinglineup首发阵容
startingprice赛马或赛狗开始时生效的投注赔率
startingmotor起动马达,启动马达;起动机;起动电动机
enginestarting发动机启动
startingfromscratch白手起家;从零开始
startingvalue初值
startingmethod起动方法;启动方法;启动方向
startingperiod起动周期;起始时间
initialstarting起步
更多收起词组短语