一、理解注解
Annotation( 注解 ) 是 JDK5.0 及以后版本引入的一个特性 。 注解是(@interface) Java 的一个新的类型(与接口很相似 ) ,它与类(Class)、接口(interface)、枚举(enum)是在同一个层次。我们可以定义注解、声明注解、获得注解,并且根据获得的注解做相应的处理,许多框架都大量应用了注解,以后继续学习。
二、对于java.lang.Annotation的理解
所有定义的注解类型到会继承该Annotation接口,定义注解需要使用@interface。
以下为定义了一个注解AnnotationTest:
package com.hdjava.annotation;
public @interface AnnotationTest {
String param = “hello”
String[] value () ;
}
}
a. 注解可以定义final 静态属性,即使不写明关键字系统也会默认为final静态属性。当注解中的属性名为value时,在对其赋值时可以不指定属性的名称而直接写上属性即可;除了value意外的其他值都需要使用name=value这种复制方式,即明确指定给谁赋值 例如:@AnnotationTest(value=”hello”)或者@AnnotationTest(”hello”)
b. 注解可以定义公共抽象的方法
1. 方法前默认会加上 public abstract
2. 在声明方法时可以定义方法的默认返回值。
例如 : String value() default “hello” ;
3.方法返回值可以是 8 种基本类型, String 、 Class 、枚举、注解及这些类型的数组。
c.注解定义说明
1.当我们使用@interface关键字定义一个注解时,该注解隐含地继承了
java.lang.annotation.Annotation接口;
2.如果我们定义了一个接口,并且让该接口继承自Annotation,那么我们所定义的依然是接口而不是注解;
3.Annotation本身是接口而不是注解。可以与Enum类比。
三、三个Java基本注解
3.1、@Override
该注解用在方法前面,用来标识该方法是重写父类的某个方法。
package com.hdjava.annotation;
public class OverrideTest {
@Override
public String toString() {
return "this is OverrideTest toString";
}
}
3.2、@Deprecated
该注解的作用是标记某个过时的类或方法。
package com.hdjava.annotation;
public class DeprecatedTest {
@Deprecated
public static void doSomething(){
System.out.println("do nothing");
}
public static void main(String[] args) {
doSomething();
}
}
3.3、@SuppressWarnings
该注解的作用是阻止编译器发出某些警告信息。
它可以有以下参数 :
deprecation :过时的类或方法警告。例如:new Date().toLocal
unchecked :执行了未检查的转换时警告。例如 List list = new ArrayList
fallthrough :当 Switch 程序块直接通往下一种情况而没有 Break 时的警告。
path :在类路径、源文件路径等中有不存在的路径时的警告。
serial :当在可序列化的类上缺少 serialVersionUID 定义时的警告。
finally :任何 finally 子句不能完成时的警告。
all :关于以上所有情况的警告。
四、元注解
元注解就是用来对注解类进行注解的注解。
4.1 @Retention
它是被定义在一个注解类的前面,用来说明该注解的生命周期。
它有以下参数:
RetentionPolicy.SOURCE :指定注解只保留在一个源文件当中。
RetentionPolicy.CLASS :指定注解只保留在一个 class 文件中。
RetentionPolicy.RUNTIME :指定注解可以保留在程序运行期间。
4.2 RetentionPolicy
枚举类型:定义了Retention的类型
public enum RetentionPolicy {
SOURCE,
CLASS,
RUNTIME
}
4.3 @Target
它是被定义在一个注解类的前面,用来说明该注解可以被声明在哪些元素前。
它有以下参数:
ElementType.TYPE :说明该注解只能被声明在一个类前。
ElementType.FIELD :说明该注解只能被声明在一个类的字段前。
ElementType.METHOD :说明该注解只能被声明在一个类的方法前。
ElementType.PARAMETER :说明该注解只能被声明在一个方法参数前。
ElementType.CONSTRUCTOR :说明该注解只能声明在一个类的构造方法前 。
ElementType.LOCAL_VARIABLE :说明该注解只能声明在一个局部变量前。
ElementType.ANNOTATION_TYPE :说明该注解只能声明在一个注解类型前 。
ElementType.PACKAGE :说明该注解只能声明在一个包名前。
如果不加该注解表示可以声明在任何位置
4.4 ElementType
枚举类型:定义了Target的类型
public enum ElementType {
TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR,
LOCAL_VARIABLE, ANNOTATION_TYPE,PACKAGE
}
4.5 @Documented
如果类型声明是用 Documented 来注释的,则其注释将成为注释元素的公共 API 的一部分。
4.6 @Inherited
指示注释类型将被子类自动继承。
五、获取注解应用举例
新建注解TargetAnnotation 生命周期为RetentionPolicy.SOURCE
@Retention(RetentionPolicy.SOURCE)
@Target(ElementType.METHOD)
public @interface TargetAnnotation {
String str = "hello";
public abstract String value( );
}
新建注解RetentionAnnotation生命周期为RetentionPolicy.SOURCE
@Retention(RetentionPolicy.RUNTIME)
public @interface RetentionAnnotation {
String name() default "jason";
String desp();
}
使用注解的类AnnotationTest
public class AnnotationTest {
@TargetAnnotation("world")
@RetentionAnnotation(desp = "jinan")
@Deprecated
@SuppressWarnings("unchecked")
public void output(){
System.out.println("this is method output");
}
}
获取注解测试类
public class MyReflection {
@SuppressWarnings("unchecked")
public static void main(String[] args) throws Exception{
AnnotationTest test = new AnnotationTest();
Class cls = test.getClass();
Method method = cls.getMethod("output", new Class[]{});
RetentionAnnotation annotation = method.getAnnotation(RetentionAnnotation.class);
Annotation[]annotations = method.getAnnotations();
System.out.println(annotation.annotationType().getName());
System.out.println(annotation.name());
System.out.println(annotation.desp());
for(@SuppressWarnings("unused")
Annotation a :annotations){
System.out.println(a.annotationType().getName());
}
}
}
运行结果:
jason
jinan
com.hdjava.annotation.RetentionAnnotation
java.lang.Deprecated
分享到:
相关推荐
本篇“Android学习日记-4 JAVA注解总结”将深入探讨Java注解及其在Android中的应用。 一、Java注解概述 Java注解是一种类型安全的元数据机制,自Java 5引入以来,已经在各种框架和库中广泛应用。注解通过@符号开头...
总之,Java Spring框架和其注解机制极大地提高了开发效率,减少了代码量,并且提供了许多高级特性来应对复杂的业务需求。通过熟练掌握Spring框架,开发者能够构建出更加稳定、可维护的企业级应用。
### Eclipse Java注释模板知识点详解 #### 一、概述 在进行Java开发的过程中,良好的代码注释习惯不仅能帮助自己快速回顾代码逻辑,还能方便其他开发者理解代码意图,从而提高整个团队的工作效率。Eclipse作为一款...
"java基础总结资料"涵盖了Java语言的核心概念,是学习和复习Java基础知识的重要资源。以下是一些主要的知识点: 1. **Java语法基础**:包括变量声明、数据类型(基本类型和引用类型)、运算符、流程控制(如if语句...
超级好用的 java 注释模板,吐血总结,整理。吐血总结,整理。
### 一、Java注解概述 1. **定义**: 注解是一种声明式的编程元素,以`@`符号开头,后面跟着注解的名称。它们可以应用于类、接口、方法、变量等不同级别。 2. **预定义注解**: Java标准库提供了若干预定义注解,如`...
### Java的注释 在Java开发中,良好的注释习惯对于提高代码的可读性和可维护性至关重要。本文将详细介绍几种常见的Java注释方式及其用途,并通过实例展示如何设置Eclipse IDE中的注释模板,帮助开发者更好地管理和...
总结来说,"Java代码注释率检查器"是一个实用的工具,可以帮助Java开发者监控和提升代码的注释质量。通过分析代码中的注释数量,它可以帮助我们遵循最佳实践,使代码更易于理解和维护,从而提升整个项目的质量和效率...
总结一下,Java的自定义注解结合反射机制,为我们提供了强大的元数据功能,可以用来增强代码的可读性、可维护性,甚至实现一些动态的功能。在实际开发中,自定义注解常用于框架的实现、AOP切面编程、配置管理等领域...
总结,Java注解是现代Java编程中的重要组成部分,它们提高了代码的可读性,简化了元数据的处理。无论是使用预定义的注解还是自定义注解,都需要理解其工作原理和使用方式,以便更好地利用这一强大的工具。通过学习和...
总结,Java注解在Excel导入导出中的应用极大地提高了代码的可读性和维护性,减少了硬编码,使得数据的映射变得更加直观。通过结合Apache POI库,我们可以高效地处理Excel文件,满足各种业务需求。在实际开发中,还...
Java知识体系总结 Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems(现已被Oracle公司收购)于1995年推出。它以其“一次编写,到处运行”的特性闻名,适用于开发跨平台的应用程序,包括桌面应用、企业...
关于java注解的总结: 从入门介绍到项目使用的实际经验归纳总结得出! 从jdk5到jdk8!
总结起来,这个示例将演示如何利用Spring 4的Java注解配置,结合Redis缓存,构建一个现代化的、可扩展的应用程序。通过这种方式,你可以学习到如何有效地管理和组织代码,以及如何利用Spring提供的工具和服务来提升...
### Java注释规范详解 #### 一、引言 在软件开发过程中,代码注释扮演着极其重要的角色。良好的注释不仅可以帮助其他开发者快速理解代码的功能和用途,还能提高整个团队的工作效率。Java作为一种广泛使用的编程...
### Java视频学习总结知识点 #### 抽象方法与抽象类 在Java中,抽象方法是一种没有具体实现(方法体)的方法,它仅提供方法签名,而具体的实现留给子类完成。一个类如果包含一个或多个抽象方法,那么这个类必须被...
这篇“Java基础知识总结(经典)”涵盖了Java开发中的核心概念和重要知识点,旨在为初学者和有经验的开发者提供一个全面的回顾。以下是主要的学习点: 1. **Java环境配置**:在开始编程之前,必须安装Java ...
总结,Java注释模板是提高代码质量和团队协作效率的重要工具。通过合理使用和定制注释模板,可以有效地提升代码的可读性,同时降低维护成本。无论是在个人项目还是团队开发中,都应该养成良好的注释习惯。