JDK5新特性---注解学习笔记(一)

1.注解(也被称为元数据):为我们在代码中添加信息提供了一种形式化的方法,使我们可以在稍后某个时刻非常方便的使用这些数据。

 

2.  javaSE内置了3种标准注解:

@Override       表示当前的方法定义将覆盖超类中的方法。如果你不小心拼写错误,或者方法签名对不上被覆盖的方法,编译器就会发出错误的提示。

@Deprecated   如果程序员使用了注解为它的元素,那么编译器会发出警告信息。

@SuppressWarnings   关闭不当的编译器警告信息。

        在我们覆盖父类中的方法时,最好使用@Override注解,这样会避免出现一些未知错误,否则当你方法名称或者方法签名出现问题时,程序会将其处理为一个新的方法,而用了此注解以后,如果不小心出现了上述的错误,那么编译器将会给予提示,帮助我们正确的编码。

        当我们使用了@Deprecated这一注解在我们所写的方法时,编译器将会发出警告,提示我们这个方法已经过时,样式为在方法的名称上出现横线。

        @SuppressWarnings这个注解可以被理解成为压制警告,当我们忘记使用泛型时,编译器会给予警告,告诉我们还没有确定类型,这个时候我们不想制定具体的泛型类型,也不想让编译器给予警告,那么我们可以采用该注解来压制警告,这个注解可以作用在方法级别上也可以做用在类级别上。

 

3.  注解元素:

     注解元素只可以作用在以下类型:

     (1)8大基本数据类型

     (2)String类型

     (3)Class类型

     (4)enum类型

     (5)Annotation类型

     (6)以上类型的一维数组类型

如果你使用了其它的类型--包括包装类型,那么编译器将会报错。

4.  注解定义及元素定义

     (1)注解MyAnno1

package com.ty.annotation;

public @interface MyAnno1 {
 String name() default "wht";
 int age();
 Class<Person> person();
 Gender gender();
 int[] array();
}

    (2)注解MyAnno2

package com.ty.annotation;

public @interface MyAnno2 {
 String  value() ;
}

    (3)枚举类型

package com.ty.annotation;

public enum Gender {
 MALE,FEMALE;
}

     (4)类类型

package com.ty.annotation;

public class Person {

}

    (5)测试使用注解

package com.ty.annotation;

public class Test {
 @MyAnno1(age=18,person=Person.class,gender=Gender.FEMALE,array={1,2,3})
 @MyAnno2("abc")

 public void testAnno(){
  
 }
}

注意的几个问题:

1.  当注解的元素没有默认值的时候,在使用的时候必须为其指定初始值

2.  如果注解元素有了初始值,那么在使用的时候可以为其赋新的值,否则将使用默认值

3.  一个较为特殊的情况:注解元素当且仅当其只有一个元素且名称为value时,在使用该注解的时候为其赋值时可以不用写属性(元素)名称

5.  元注解

     java内置了4种元注解,元注解负责注解其它的注解,可以理解成java中用来注解  Annotation的Annotation

    @Retention

       在描述这一属性之前,先来说一下jav a文件的三个时期:  源文件时期(**.java)----->编译器编译期(***.class)----->jvm运行时期

      只能用于修饰一个Annotation的定义,表示需要在什么域级别上保存该注解的信息。通俗的说就是该注解保留在的作用域,其RetentionPolicy的参数包括:

      SOURCE    表示该注解只作用于源代码时期,最终将被编译器所抛弃

      CLASS        表示该注解在class文件中可用,但是会被VM抛弃    --------->注解默认的作用域

      RUNTIME   表示该注解在VM运行时期也会被保留,因此可以通过反射机制来读取注解的信息。

    @target

        表示该注解可以作用在什么地方,可能的ElementType参数包括:

       CONSTRUCTOR:           构造器的声明

       FIELD:                               字段的声明(域声明--包括enum实例)

       LOCAL_VARIABLE         局部变量的声明

       MRTHOD                          方法声明

       PACKAGE                        包声明

       PARAMETER                   参数声明

       TYPE                                 类、接口(包括注解类型)、或enum声明

    @Documented

      表示该注解会被包含在javadoc中

    @Inherited

      表示该注解可以被继承。详细的说的就是一个注解@A在声明时使用了@Inherited,那么我们用@A作用于一个类的时候,当这个类被继承时,子类也默认的带有@A注解。

 

 

 

时间: 2024-08-12 19:17:57

JDK5新特性---注解学习笔记(一)的相关文章

01-java基础加强,eclipse工具使用,快捷键,断点调试,单元测试,jdk5新特性,增强for循环,集合map,list,可变参数,枚举,反射,泛型

一.eclipse工具的使用 1. java代码的位置        1) 选择工作空间 workspace  选择一个文件夹存放程序(代码) 不要用中文和空格        2) 新建一个java 工程(Project)        3) 建包建类   2. 快捷键        alt + / :代码自动补齐,需要配置的               打开preferences(首选项), 搜keys,打开快捷键配置面板               搜 alt+/ ,取消绑定        

JDK5新特性之新的格式化输出

JDK5.0允许象C语言那样直接用printf()方法来格式化输出,并且提供了许多参数来格式化输入,调用也很简单: System.out.format("Pi is approximately %f", Math.Pi); System.out.printf("Pi is approximately %f", Math.Pi); printf()和 format() 方法具有相同的功能. System.out 是 java.io.PrintStream的实例. Pr

结合C++11新特性来学习C++中lambda表达式的用法_C 语言

在 C++ 11 中,lambda 表达式(通常称为 "lambda")是一种在被调用的位置或作为参数传递给函数的位置定义匿名函数对象的简便方法. Lambda 通常用于封装传递给算法或异步方法的少量代码行. 本文定义了 lambda 是什么,将 lambda 与其他编程技术进行比较,描述其优点,并提供一个基本示例.Lambda 表达式的各部分ISO C++ 标准展示了作为第三个参数传递给 std::sort() 函数的简单 lambda: #include <algorithm

JDK5新特性:格式化输出

DK5.0允许象C语言那样直接用printf()方法来格式化输出,并且提供了许多参数来格式化输入,调用也很简单: System.out.format("Pi is approximately  %f", Math.Pi);    System.out.printf("Pi is approximately  %f", Math.Pi);  printf()和 format() 方法具有相同的功能. System.out 是 java.io.PrintStream的实

VSTO学习笔记(二)Excel对象模型

原文:VSTO学习笔记(二)Excel对象模型 上一次主要学习了VSTO的发展历史及其历代版本的新特性,概述了VSTO对开发人员的帮助和效率提升.从这次开始,将从VSTO 4.0开始,逐一探讨VSTO开发中方方面面,本人接触VSTO时间不长,也是一次尝试.鉴于Excel在整个Office家族中的重要地位,故先从Excel开始介绍,后续内容会陆续介绍Word.PowerPoint.Outlook.InfoPath等.由于VSTO 4.0建立在Office 2010基础之上,先介绍一下Office

开发者所需要知道的iOS7 SDK新特性

春风又绿加州岸,物是人非又一年.WWDC 2013 keynote落下帷幕,新的iOS开发旅程也由此开启.在iOS7界面重大变革的背后,开发者们需要知道的又有哪些呢.同去年一样,我会先简单纵览地介绍iOS7中我个人认为开发者需要着重关注和学习的内容,之后再陆续对自己感兴趣章节进行探索.计划继承类似WWDC2012的笔记的形式,希望对国内开发者有所帮助. 相关笔记整理如下: 总览 开发者所需要知道的iOS7 SDK新特性 工具 WWDC2013笔记 Xcode5和ObjC新特性 UIKit动力学 

Spring4.1新特性——Spring MVC增强

Spring 4.1对Spring MVC部分做的增强是最多的,提供了一些视图解析器的mvc标签实现简化配置.提供了GroovyWebApplicationContext用于Groovy web集成.提供了Gson.protobuf的HttpMessageConverter.提供了对groovy-templates模板的支持.JSONP的支持.对Jackson的@JsonView的支持等.   1.GroovyWebApplicationContext  在Spring 4.1之前没有提供Web

spring学习笔记(10)@AspectJ研磨分析[1]入门、注解基本介绍

@AspectJ准备 AspectJ是一个面向切面的框架,它扩展了Java语言.AspectJ定义了AOP语法所以它有一个专门的编译器用来生成遵守Java字节编码规范的Class文件. 在使用AspectJ之前,我们需要导入aspectJ相应的jar包,可到我的资源页http://download.csdn.net/detail/qwe6112071/9468329 中下载,而如果使用maven则可直接在pom.xml中加入如下代码: <dependency> <groupId>o

可能是最早的学习Android N新特性的文章

可能是最早的学习Android N新特性的文章 Google在今天放出了Android N开发者预览版.Android N支持Nexus6及以上的设备.5太子Nexus5不再得到更新. Android N相比于Android 6.0增加了哪些新的功能呢,开发者要关心哪些API呢,通过本篇文章,将一一得到答案. Android N的新特性 分屏多窗口(Multi-Window Support) 还在为看美剧的时候,收到微信消息而在两个应用间来回切换而烦恼吗.在Android N上,再也不用烦恼这个