java什么是annotation(java annotation有什么作用)
大家好,关于java什么是annotation很多朋友都还不太明白,今天小编就来为大家分享关于java annotation有什么作用的知识,希望对各位有所帮助!
java怎么查看annotation 实现
深入理解Java:注解(Annotation)自定义注解入门
要深入学习注解,我们就必须能定义自己的注解,并使用注解,在定义自己的注解之前,我们就必须要了解Java为我们提供的元注解和相关定义注解的语法。
元注解:
元注解的作用就是负责注解其他注解。Java5.0定义了4个标准的meta-annotation类型,它们被用来提供对其它 annotation类型作说明。Java5.0定义的元注解:
1.@Target,
2.@Retention,
3.@Documented,
4.@Inherited
这些类型和它们所支持的类在java.lang.annotation包中可以找到。下面我们看一下每个元注解的作用和相应分参数的使用说明。
@Target:
@Target说明了Annotation所修饰的对象范围:Annotation可被用于 packages、types(类、接口、枚举、Annotation类型)、类型成员(方法、构造方法、成员变量、枚举值)、方法参数和本地变量(如循环变量、catch参数)。在Annotation类型的声明中使用了target可更加明晰其修饰的目标。
作用:用于描述注解的使用范围(即:被描述的注解可以用在什么地方)
取值(ElementType)有:
1.CONSTRUCTOR:用于描述构造器
2.FIELD:用于描述域
3.LOCAL_VARIABLE:用于描述局部变量
4.METHOD:用于描述方法
5.PACKAGE:用于描述包
6.PARAMETER:用于描述参数
7.TYPE:用于描述类、接口(包括注解类型)或enum声明
使用实例:
@Target(ElementType.TYPE)
public@interface Table{
/**
*数据表名称注解,默认值为类名称
*@return
*/
public String tableName() default"className";
}
@Target(ElementType.FIELD)
public@interface NoDBColumn{
}
注解Table可以用于注解类、接口(包括注解类型)或enum声明,而注解NoDBColumn仅可用于注解类的成员变量。
@Retention:
@Retention定义了该Annotation被保留的时间长短:某些Annotation仅出现在源代码中,而被编译器丢弃;而另一些却被编译在class文件中;编译在class文件中的Annotation可能会被虚拟机忽略,而另一些在class被装载时将被读取(请注意并不影响class的执行,因为Annotation与class在使用上是被分离的)。使用这个meta-Annotation可以对 Annotation的“生命周期”限制。
作用:表示需要在什么级别保存该注释信息,用于描述注解的生命周期(即:被描述的注解在什么范围内有效)
取值(RetentionPoicy)有:
1.SOURCE:在源文件中有效(即源文件保留)
2.CLASS:在class文件中有效(即class保留)
3.RUNTIME:在运行时有效(即运行时保留)
Retention meta-annotation类型有唯一的value作为成员,它的取值来自java.lang.annotation.RetentionPolicy的枚举类型值。具体实例如下:
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public@interface Column{
public String name() default"fieldName";
public String setFuncName() default"setField";
public String getFuncName() default"getField";
public boolean defaultDBValue() default false;
}
Column注解的的RetentionPolicy的属性值是RUTIME,这样注解处理器可以通过反射,获取到该注解的属性值,从而去做一些运行时的逻辑处理
@Documented:
@Documented用于描述其它类型的annotation应该被作为被标注的程序成员的公共API,因此可以被例如javadoc此类的工具文档化。Documented是一个标记注解,没有成员。
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public@interface Column{
public String name() default"fieldName";
public String setFuncName() default"setField";
public String getFuncName() default"getField";
public boolean defaultDBValue() default false;
}
@Inherited:
@Inherited元注解是一个标记注解,@Inherited阐述了某个被标注的类型是被继承的。如果一个使用了@Inherited修饰的annotation类型被用于一个class,则这个annotation将被用于该class的子类。
注意:@Inherited annotation类型是被标注过的class的子类所继承。类并不从它所实现的接口继承annotation,方法并不从它所重载的方法继承annotation。
当@Inherited annotation类型标注的annotation的Retention是RetentionPolicy.RUNTIME,则反射API增强了这种继承性。如果我们使用java.lang.reflect去查询一个@Inherited annotation类型的annotation时,反射代码检查将展开工作:检查class和其父类,直到发现指定的annotation类型被发现,或者到达类继承结构的顶层。
java中的@是什么
Java
是Sun公司推出的一种新的编程语言。
这一新一代的程序设计语言在1995年
5
月推出后,
立即风行
Internet世界,成为一种
Internet上的世界语。
Java
是一种解释执行的语言,语法规则和
C++类似,能够用来开发在不同类型的计算机、电子设备和操作系统上运行的软件,时至今日,
Java
能轻易完成的"跨平台"对许多编程语言来说,依然难以做到,所谓的"一次编写,到处运行"就是对其技术特性最直接的描述。也即是说,
Java
可以在任何一种操作系统下工作,不管是Windows
9x、WindowsNT,还是SunSolaris、Linux、MacOS以及其他的平台,都可以使用相同的程序代码。用
Java
语言编写的程序叫做“Applet”(小应用程序),用编译器将它编译成类文件后,将它存在
WWW页面中,并在
HTML
文档上作好相应标记,用户端只要装上
Java
的客户软件就可以在网上直接运行“Applet”。
Java
采用了一种高级多线程技术来实现并发及实时的响应,这是先进的多媒体应用所必需的。
Java
非常适合于企业网络和Internet环境,现在已成为Internet世界中最受欢迎、最有影响的编程语言。
Java
有许多值得称道的优点,如简单、面向对象、分布式、解释性、可靠、安全、结构中立性、可移植性、高性能、多线程、动态性等。
Java
摈弃了C++中各种弊大于利的功能和许多很少用到的功能。
Java
可以运行与任何微处理器,用
Java
开发的程序可以在网络上传输,并运行于任何客户机上。现状Sun获利未饱和,但Sun公司也不否认,目前从
Java
这一开放的技术平台上,Sun还没有获得太多的利润。例如国内众多手机制造商只推出了6款
Java
手机,应用
Java
的力度远远不够。
据了解,Sun与联通结盟后,TCL已成为新的Ja-va特许制造商,负责为这一联盟提供新的
Java
手机。
而北京振戎融通通信技术有限公司也表示,他们已与Sun达成意向,由振戎融通公司出资,为向中国联通CDMA1x网提供手机的国内厂商集中采购
Java
-JTW1许可证。
报告显示,未来市场上无线
Java
手机的数量预计每年将翻一番,到2006年将从2001年的1910万部增长到5.53亿部。到2006年,无线
Java
手机预计将占全球手机出货量的83%
java.lang.annotation 是哪个包
1、先看一下annotation包下的类,作者的jdk是1.6版本。
Annotation是接口,the common interface extended by all annotation types,意思就就是说Annotation是所有注解类型的父类型,个人感觉就像是注解’界‘的Object,Annotation有四个方法,但是自定义的注解是不可以重写Annotation这四个方法的。这与Object中的不同之处。
2、@interface Retention
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public@interface Retention{
RetentionPolicy value();
}
Retention:“保留,拘留”的意思。在注解中用于标识注解被保留多久(由于注解的保留的属性不同,在jvm中驻留的时间也不同)如果在注解上没加@Retention注解,则默认的保留策略是ClASS。该注解作用范围就是在注解上,用于属性和方法是不起作用的。
3、RetentionPolicy
接上面的策略说:
public enum RetentionPolicy{
/**
* Annotations are to be discarded by the compiler.
*/
SOURCE,
/**
* Annotations are to be recorded in the class file by the compiler
* but need not be retained by the VM at run time. This is the default
* behavior.
*/
CLASS,
/**
* Annotations are to be recorded in the class file by the compiler and
* retained by the VM at run time, so they may be read reflectively.
*
*@see java.lang.reflect.AnnotatedElement
*/
RUNTIME
}
SOURCE:注解将在编译的时候被忽略;
ClASS:编译之后注解将被保留在字节码文件中,但是在不会在vm运行时保留。默认策略;
RUNTIME:注解会保留在字节码文件中,同时在vm运行时始终存在,而且可以通过反射获取相对应的信息。
java annotation有什么作用
Annontation是Java5开始引入的新特征。中文名称一般叫注解。它提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metadata)与程序元素(类、方法、成员变量等)进行关联。
annotation一般作为一种辅助途径,应用在软件框架或工具中,在这些工具类中根据不同的 annontation注解信息采取不同的处理过程或改变相应程序元素(类、方法及成员变量等)的行为。
例如:Junit、Struts、Spring等流行工具框架中均广泛使用了annontion。使代码的灵活性大提高。
从java5版本开始,自带了三种标准annontation类型,
(1)、Override
java.lang.Override是一个marker annotation类型,它被用作标注方法。它说明了被标注的方法重载了父类的方法,起到了断言的作用。如果我们使用了这种annotation在一个没有覆盖父类方法的方法时,java编译器将以一个编译错误来警示。
这个annotaton常常在我们试图覆盖父类方法而确又写错了方法名时加一个保障性的校验过程。
(2)、Deprecated
Deprecated也是一种marker annotation。当一个类型或者类型成员使用@Deprecated修饰的话,编译器将不鼓励使用这个被标注的程序元素。所以使用这种修饰具有一定的“延续性”:如果我们在代码中通过继承或者覆盖的方式使用了这个过时的类型或者成员,虽然继承或者覆盖后的类型或者成员并不是被声明为@Deprecated,但编译器仍然要报警。
注意:@Deprecated这个annotation类型和javadoc中的@deprecated这个tag是有区别的:前者是java编译器识别的,而后者是被javadoc工具所识别用来生成文档(包含程序成员为什么已经过时、它应当如何被禁止或者替代的描述)。
(3)、SuppressWarnings
此注解能告诉Java编译器关闭对类、方法及成员变量的警告。
有时编译时会提出一些警告,对于这些警告有的隐藏着Bug,有的是无法避免的,对于某些不想看到的警告信息,可以通过这个注解来屏蔽。
SuppressWarning不是一个marker annotation。它有一个类型为String[]的成员,这个成员的值为被禁止的警告名。对于javac编译器来讲,被-Xlint选项有效的警告名也同样对@SuppressWarings有效,同时编译器忽略掉无法识别的警告名。
好了,文章到这里就结束啦,如果本次分享的java什么是annotation和java annotation有什么作用问题对您有所帮助,还望关注下本站哦!