为了是大家初步了解什么是注解(Annotation),我们先来看如下代码:
相关代码一:
public class AnnotationTest {
public static void main(String[] args) {
Date nowDate = new Date();
String strDate = nowDate.toLocaleString();
System.out.println(strDate);// 2009-12-27 16:44:09
}
}
上述代码在eclipse编辑器中会出现警告,内容为"The method toLocaleString() from the type Date is deprecated",它的意思是说toLocaleString()方法是个过时的方法;
为了更好的理解它的含义,我们在cmd窗口来编译它,如下
那么我们可以怎么把这个警告给去掉呢,这是就要使用到注解,我们在main方法之前加上这样一句"@SuppressWarnings("deprecation")",也可以用快捷方式加上,那么警告就会消失。
代码就变成了这样:
public class AnnotationTest {
@SuppressWarnings("deprecation")
public static void main(String[] args) {
Date nowDate = new Date();
String strDate = nowDate.toLocaleString();
System.out.println(strDate);// 2009-12-27 16:44:09
}
}
注意:每个注解就是一个类,我们在用注解时,就相当于创建了一个注解类的实例;
2.在写程序中,我们可能不希望某个方法之后不被再次调用,那么我们就可以把这个方法定义为过时的方法,过时的方法在调用时,会在方法名上打上删除线,告诉程序员该方法为过时方法,最后不要再用了。下面我们写一个自定义的过时方法:
相关代码二:
public class AnnotationTest {
@Deprecated
private static void sayHello() {
System.out.println("Hello word !");
}
public static void main(String[] args) {
AnnotationTest.sayHello();
}
}
注意:只需要在方法前加上:@Deprecated,那么该方法就会被eclipse编辑器打上删除线,来表明为过时方法.
3.JDK为我们提供了如下3中基本的注解Annotation:
.Deprecated:用@Deprecated 注释的程序元素,不鼓励程序员使用这样的元素,通常是因为它很危险或存在更好的选择。
.Override:用@Override表示一个方法声明打算重写超类中的另一个方法声明。
.SuppressWarnings:@SuppressWarnings("deprecation")指示应该在注释元素(以及包含在该注释元素中的所有程序元素)中取消显示指定的编译器警告。
4.注解相当于一种标记,在程序中加了注解就等于为程序打上了某种标记,没加,则等于没有某种标记,以后,java编译器,开发工具和其他程序可以用反射来了解你的类及各种元素上有无何种标记,看你有什么标记,就去干相应的事,标记可以加在包,类,字段,方法,方法的参数以及局部变量上。它位于java.lang.annotation中。
5.通常应用注解有如下三个步骤:
1).定义注解类,格式为:public @interface A{
}
2).应用注解类,如:
@A
class B{
}
3).对应用注解类的类进行反射操作(的类),如:
B.class.isAnnotationPresent(A.class);
A a = B.class.isAnnotationPresent(A.class);
6.下面我们来完成上述三步操作:
1).切换到java透视图上,点击新建一个注解:
代码如:
public @interface MyAnnotation {
}
2).创建一个类应用该注解:
@MyAnnotation
public class AnnotationTest {
public static void main(String[] args) {
}
}
3.对应用注解类的类进行反射操作:
public static void main(String[] args) {
if (AnnotationTest.class.isAnnotationPresent(MyAnnotation.class)) {
MyAnnotation myAnnotation = AnnotationTest.class.getAnnotation(MyAnnotation.class);
System.out.println(myAnnotation);
}
}
注:这是程序运行没有输出,明明有注解,怎么会没输出呢?这时我们在MyAnnotation注解类前面加上:@Retention(RetentionPolicy.RUNTIME),再次运行时,就会输出"MyAnnotation"
7.下面我们来解释下什么叫Retention,Retention本身也是一个注解,叫元注解,它后面跟一个值,这个值表示该注解保留到代码的那个阶段;
@Retention元注解,有三种取值,即有三种生命周期:
RetentionPolicy.SOURCE:对应java源文件
RetentionPolicy.CLASS:对应class文件
RetentionPolicy.RUNTIME:对应内存中的字节码
默然值就是RetentionPolicy.CLASS,在注解类上加的注解叫“元注解”,class文件本身不是字节码,只有class文件被类加载器被加载到内存中进行校检处理之后,才是二进制的字节码,他们的生命周期不是不同的。
注:如果我们把6中的RetentionPolicy.RUNTIME,改成其他两个中任何一个得话,也是无输出的,因外其他两个的注解生命周期不是运行期,即在内存中无法找到。
8.如果我们在MyAnnotation注解类前面再加上:@Target(ElementType.METHOD),那么AnnotationTest类前面就会有错误提示:"The annotation @MyAnnotation is disallowed for this location",即@MyAnnotation不能放在这个位置,为什么呢?因为刚才我们在MyAnnotation注解类前面再加上:@Target(ElementType.METHOD),它表示该注解只能用在方法上面,如果要想让该注解用的类上面,就可以不刚才那句修改成"@Target({ElementType.METHOD,ElementType.TYPE})",ElementType.TYPE它表示该注解可以应用的类,接口,枚举等类型上。
9.注解的高级应用-为注解增加属性,我们在刚才的MyAnnotation注解类增加一个属性,代码如下:
代码:
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD,ElementType.TYPE})
public @interface MyAnnotation {
String color();
}
那么此时,我们就会发现,AnnotationTest类的上面有错误提示“The annotation @MyAnnotation must define the attribute color”,即必定义color的属性,我们此时就可以把类上面的注解修改成:@MyAnnotation(color="red"),OK了!说明注解类有属性时,在我们调用时就必须提供属性值,除非注解类中的属性有默认值,
代码:
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD,ElementType.TYPE})
public @interface MyAnnotation {
String color() default "yellow";
}
调用的时候就可以直接:@MyAnnotation或@MyAnnotation();
再如代码:
public @interface MyAnnotation {
String color() default "yellow";
String style();
}
调用的时候就可以直接: @MyAnnotation(color="red",style="fashion")或@MyAnnotation(style="fashion");有默认值的时候,默认值可以省略。
但是通常我们有如下用法:
@SuppressWarnings("deprecation"),它怎么只提供属性值,而没有属性名呢?这就是value()属性的特殊用法,它可以放回任意类型;
再如代码:
public @interface MyAnnotation {
String color() default "yellow";
String style() default "fashion";
String value();
}
调用的时候就可以直接: @MyAnnotation(color="red",style="fashion",value="hello")
或@MyAnnotation("hello");
10.为注解增加高级属性,如数组,枚举,注解,具体就不再举例了,可以参考java语言规范中的实例。
相关推荐
以下是对Java自定义注解及其应用实例的详细讲解。 ### 一、Java注解概述 1. **定义**: 注解是一种声明式的编程元素,以`@`符号开头,后面跟着注解的名称。它们可以应用于类、接口、方法、变量等不同级别。 2. **...
Java 自定义注解的实例详解 Java 自定义注解是 Java 语言中的一种重要特性,它可以用于创建文档,跟踪代码中的依赖性,并且可以执行编译时期检查。自定义注解可以让开发者根据需要创建自己的注解,以满足特定的需求...
2. **注解教程**:Spring 3.0引入了大量的注解,如`@Controller`、`@RequestMapping`、`@Service`、`@Autowired`等,大大减少了XML配置文件的需求。`@Controller`用于标记控制层类,`@RequestMapping`用于映射HTTP...
在这个实例中,我们将探讨如何使用JavaConfig注解配置方式来设置Spring框架,同时结合Maven进行项目管理。 **Maven** Maven是一个项目管理工具,它帮助开发者构建、管理和部署Java项目。`pom.xml`是Maven项目的配置...
Java注解简单使用实例解析 Java注解简单使用实例解析是Java语言中的一种 元数据形式,用于提供补充信息给编译器、虚拟机或其他工具。在Java中,注解可以出现在各种语法元素上,如类、方法、字段、参数等。今天,...
"75个Java实例"提供了一系列的代码示例,旨在帮助初学者和有经验的开发者更好地理解和掌握Java语言的核心概念及实际应用。这些实例涵盖了从基础语法到高级特性的各种主题,包括但不限于: 1. **基础语法**:Java的...
在上述代码中,`validateUtil.validate(new User())`将检查`User`实例的属性,如果存在任何违反注解的约束,将会打印出相应的错误信息。 此外,还可以使用Spring框架的`@Validated`注解在控制器层进行注解校验,...
总的来说,虽然Java中的抽象类不能直接实例化,但我们可以通过继承并实现其抽象方法,或者利用字节码工具和注解处理器在运行时或编译时动态生成新的类来间接达到实例化抽象类的目的。这样的设计允许我们创建更加灵活...
"java教程.txt"和"java教程(1).txt"是文本格式的Java教程,它们可能详细解释了Java的基础知识,包括变量、运算符、流程控制、类和对象等,也可能涉及一些高级话题,如反射、注解、并发编程等。 总的来说,这个...
《Java实例精通》是一本专为Java初学者和进阶者设计的实战型图书,旨在通过丰富的实例帮助读者深入理解并掌握Java编程的核心概念和技术。书中涵盖了从基础语法到高级特性的广泛内容,旨在提高读者的编程技能和解决...
本篇文章将深入探讨如何使用Java注解的方式实现Excel的导入导出功能。 首先,我们要理解Java注解(Annotation)的作用。注解是Java语言提供的一种元数据,它允许我们在代码中嵌入额外的信息,这些信息可以被编译器...
《JAVA实例大全》是一本深度剖析Java编程的实用书籍,其内容丰富,涵盖了Java语言的各个方面,对于初学者和有经验的开发者来说都是一个宝贵的资源。这本书的重点在于通过实例来讲解Java技术,使得读者能够更好地理解...
"Java实例100个"这个资源集包含了100个Java编程的示例,旨在帮助初学者逐步深入理解Java语言的核心概念和常用技巧。下面我们将逐个探讨这些实例可能涵盖的知识点,并解释它们在Java学习中的重要性。 1. **基础语法*...
本教程将通过一个超市自动售卖机的例子来详细讲解如何在Java中实现自定义注解。 首先,我们需要了解注解的基本结构。在Java中,注解以`@`符号开头,后面跟着注解的名称。自定义注解的定义类似于接口,但使用`@...
《JAVA实例技术手册第二版》是一本全面且深入的Java编程指南,专为初学者和经验丰富的开发者设计。这本书以实例驱动的方式,帮助读者更好地理解和掌握Java编程语言的核心概念和高级特性。 首先,书中详细介绍了Java...
【标题】"Java实例一百例"提供了丰富的Java编程实践示例,涵盖了各种常见的编程场景和技术点,旨在帮助学习者深入理解和掌握Java语言的核心特性和应用。这个资源可能包含100个不同的Java程序,覆盖了从基础语法到...
"250个Java实例源代码"的压缩包文件显然旨在帮助学习者通过实践理解Java编程的各种概念和技术。这些实例涵盖了从基础语法到高级特性的各种主题,包括但不限于: 1. **基本语法**:如变量声明、数据类型(包括原始...
《Java实例精通》这本书,根据其ISBN 9787111259800,显然是一本专注于教授Java编程实践的教材,旨在帮助读者通过实际案例深入理解和掌握Java技术。 在学习Java的过程中,实例是非常重要的教学工具。通过实例,我们...
"JAVA教程,java 2 入门与实例教程,高手入门到精通"这个主题覆盖了从基础到高级的完整Java学习路径,特别适合对Java 2平台感兴趣的学习者。Java 2,也称为Java SE(标准版),是Java平台的核心版本,包含了开发和运行...