Java学习总结——Annotation

贰拾壹——给编译器看的注解

Annotation( 注解 )功能建立在反射机制之上,通过这个功能可对程序进行注释操作。

一、Annotation 的含义

Annotation( 中文翻译为 “ 注解 ”,或 “ 注释 ” )实际上表示的是一种注释的语法,这种注释和代码的注释是不一样的,代码的注释( 如单行注释用双斜杠 “ // ”,多行注释用 “ /*...*/ 等 ” )是给程序员看的,其主要目的是增加代码的可读性,便于代码的后期维护。而 Annotation,主要是服务于编译器,属于一种配置信息。早期的 Java 程序提倡程序与配置文件相分离,代码是代码,注释是注释。但后来的实践发现,配置文件过多,以至于配置信息修改起来非常困难,所以将配置信息直接写入到程序之中的理念又重新得到应用。

而若想要在 Java 中完成这样的功能,就需要使用 Annotation。在流行的 SSH 框架( 即:Spring——开源的 Java/Java EE 全功能栈的情况及的应用程序框架,Struts2——用于开发 Java EE 网络应用程序的开源 Web 应用框架,Hibernate——Java 语言下的对象关系映射解决方案,它对 JDBC 进行了轻量级的对象封装,是一种数据库持久层框架 )等中大量使用了这个技术。

在本质上,Annotation 提供了一种与程序元素关联任何信息或者任何元数据( metadate )的方式。Annotation 可以像修饰符一样被使用,可以应用于任何程序元素( 如包、类型、构造方法、方法、成员变量、参数、本地变量 )的声明中。这些信息被存储在 Annotation 的 “ name = value ” 结构对中。事实上,Annotation 类型是一种接口,能够通过 Java 反射 API( 应用程序接口 )的方式提供对其信息的访问。

二、系统内建的 Annotation

在 JDK 1.5 之后的系统中,内建了 3 个 Annotation:@Override、@Deprecated、@SuppressWarnings。

1.@Override

如果要进行方法的覆写,那么要求是:方法名称、参数的类型及个数完全相同,而在开发之中有可能会由于手误等原因导致方法不能被正确地覆写。

举例:

//由于手误,导致覆写错误
class Message
{
	public String tostring()	//原本打算覆写toString()
	{
		return "Hello";
	}
}
public class OverrideError
{
	public static void main(String[] args)
	{
		System.out.println(new Message());
	}
}

原本打算覆写 toString() 方法,却由于手误导致覆写 “ 错误 ”——tostring(),其中的 S 字符被错误小写,而 Java 是区分大小写的,这时不会产生编译错误,因为 JDK 会认为 tostring() 是一个新的方法,可是从实际需求上来讲,这个方法应该是被覆写的。因此为了保证这种错误在程序编译的时候就可以被发现,可以在方法覆写时增加上 “ @Override ” 注解。@Override 用在方法之上,就是用来告诉编译器,这个方法是用来覆写来自父类的同名方法的,如果父类没有这个所谓的 “ 同名 ” 方法,就会发出警告信息。

//使用@Override Annotation
class Message
{
    @Override
	public String tostring()	//原本打算覆写toString()
	{
		return "Hello";
	}
}
public class OverrideError
{
	public static void main(String[] args)
	{
		System.out.println(new Message());
	}
}

这样就可以在编译时发生编译错误( 使用 Eclipse 会有错误提示 ),提示 :" 类型为 Message 的方法 tostring() 必须覆盖或实现超类型方法  "。这样添加了注解,就可以及时在编译时就发现错误,并提示用户早点改正错误,以防日后维护困难。

如果将注解提示的错误纠正过来,将 s 字符改为 S 字符,就完成了真正的覆写。

2.@Deprecated

在 API 中经常会看到某个方法下面有 “ Deprecated ” 这个单词,表示这个方法已经过时,不建议使用,如 Sring 类的构造方法中就有这样一个方法。

        String(byte[] ascii,int hibyte)

这个过时的方法并不能将多个字节准确地转换为字符,自从 JDK 1.1 起,完成该转换的首选方法是通过 String 构造方法,该方法接受一个字符集名称或使用平台的默认字符集。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值