Java学习笔记十(注解)

1.介绍

注解是JavaSE5.0開始提供的一项新特性,利用此特性能够通过特定的注解标签为程序提供一些描写叙述性信息。

这些描写叙述性信息能够在编译或执行时为编译器、执行环境提供附加的信息。从而简化开发。

 2.自己定义注解

1.声明自己的注解

@interface <注解名称>{<注解属性类型> <注解属性名称>[default<默认值>]}

<span style="font-family:SimSun;font-size:18px;">@interface myTest{
	//自己定义注解属性
	String msg();

}</span>

2.确定注解使用目标

目的不同,注解能够有不同的使用目标。

比如对方法注解,对构造器注解,对变量字段注解,对类或者接口注解等等

@Target(ElementType.<使用目标点>)

<span style="font-family:SimSun;font-size:18px;">//声明此注解仅仅能对类或者接口进行注解
@Target(ElementType.TYPE)
@interface myTest{
	//自己定义注解属性
	String msg();

}</span>

3.确定注解的使用时效

依据使用目的不同,注解能够有不同的使用时效。

Class:注解存在于雷文件里。但在执行时虚拟机不能够获取注解信心

SOURCE:注解仅仅存在于源码中。在编译时被去除

RUNTIME:注解存在于类文件里,并且在执行时虚拟机能够获取注解信息

@Retention(RetentionPolicy.<时效值>)

<span style="font-family:SimSun;font-size:18px;">//声明此注解仅仅能对类或者接口进行注解
@Target(ElementType.TYPE)
//声明此注解在执行时能够获得
@Retention(RetentionPolicy.RUNTIME)
@interface myTest{
	//自己定义注解属性
	String msg();

}</span>

4.使用反射获取注解

前几篇博客中谈到过反射,在这里也能够通过反射获取到注解的信息,方法与上述类似。

<span style="font-family:SimSun;font-size:18px;">package com.Annotation;

import java.lang.annotation.*;
import java.lang.reflect.*;

//声明使用目标为TYPE的注解
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@interface MyAnnotationForClass {
	java.lang.String msg();
}

// 声明使用目标为METHOD的注解
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@interface MyAnnotationForMethod {
	java.lang.String msgPart1();

	java.lang.String msgPart2();
}

// 声明使用注解的类
@MyAnnotationForClass(msg = "这是对类的注解")
class MyClass {
	@MyAnnotationForMethod(msgPart1 = "方法的第一部分注解", msgPart2 = "方法的第二部分注解")
	public void sayHello() {
		System.out.println("恭喜您成功地调用了sayHello方法!

!

!");
	}
}

// 主类
public class Sample34_10 {
	public static void main(String[] args) throws NoSuchMethodException {
		// 获取使用了注解的类MyClass相应的Class对象
		Class ac = MyClass.class;
		// 获取MyClass类的注解
		MyAnnotationForClass mafc = (MyAnnotationForClass) ac
				.getAnnotation(MyAnnotationForClass.class);
		// 打印类的注解信息
		System.out.println("MyClass类的注解信息为:“" + mafc.msg() + "”。

");
		// 获取指定方法相应的Method对象
		Method method = ac.getMethod("sayHello", new Class[0]);
		// 获取方法相应的注解
		MyAnnotationForMethod mafm = (MyAnnotationForMethod) method
				.getAnnotation(MyAnnotationForMethod.class);
		// 打印方法相应的注解信息
		System.out.println("sayHello方法的第一部分注解信息为:“" + mafm.msgPart1() + "”。

");
		System.out.println("sayHello方法的第二部分注解信息为:“" + mafm.msgPart2() + "”。");
	}
}
</span>

上述实例中分别定义了两种注解信息。一种应用于类或者接口上。一种应用于方法上面;紧接着通过反射机制获取到对应的注解类,然后就能够操纵注解信息

时间: 2024-12-10 03:56:00

Java学习笔记十(注解)的相关文章

黑马程序员——JAVA学习笔记十二(高新技术一)

 1,    静态导入: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 package com.solaire.enhance; import static java.lang.Math.max;  //import   语句可以导入一个类或某个包中的所有类 //import static  静态导入 JDK5以后才有.语句导入一个类中的某个静态方法或所有静态方法 //无名包和有包名中的类在一起,没有package,则为无名包. //一个类

黑马程序员——JAVA学习笔记十(IO)

1,    可以从其中读入一个字节序列的对象成为输入流,可以向其中写入一个字节序列的对象就做输出流.这些字节序列的来源地可以是文件,也可以是网络连接或者内存块.抽象类InputStream和OutputStream构成了I/O层次的基础.因为字节流不便于处理以Unicode存储的信息,所以有了Writer和Reader抽象类,这些从其中继承的类都是读入和写入基于2个字节的Unicode码元,而不是单个字节.   2,    InputStream 与OutputStream: abstract

黑马程序员——JAVA学习笔记十四(高新技术三)

10 代理模式 代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委托类,以及事后处理消息等.代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,来提供定的服务. 按照代理的创建时期,代理类可以分为两种. 静态代理:由程序员创建或特定工具自动生成源代码,再对其编译.在程序运行前,代理类的.class文件就已经存在了. 动态代

【Java学习笔记之二十六】深入理解Java匿名内部类

在[Java学习笔记之二十五]初步认知Java内部类中对匿名内部类做了一个简单的介绍,但是内部类还存在很多其他细节问题,所以就衍生出这篇博客.在这篇博客中你可以了解到匿名内部类的使用.匿名内部类要注意的事项.如何初始化匿名内部类.匿名内部类使用的形参为何要为final. 一.使用匿名内部类内部类 匿名内部类由于没有名字,所以它的创建方式有点儿奇怪.创建格式如下: new 父类构造器(参数列表)|实现接口() { //匿名内部类的类体部分 } 在这里我们看到使用匿名内部类我们必须要继承一个父类或者

java学习笔记3——java关键字

java学习笔记3——java关键字 虽然老师说不用刻意的去记忆,但是我还是在网上找到了非常详细的注解,再次收藏 关键字的类型表: 各个关键字的详细注解和实例,按首字母排序: 1.abstract abstract 关键字可以修改类或方法. abstract 类可以扩展(增加子类),但不能直接实例化. abstract 方法不在声明它的类中实现,但必须在某个子类中重写. -示例- public abstract class MyClass{ } public abstract String my

非专业码农 JAVA学习笔记 6java工具类和算法-string

续<非专业码农 JAVA学习笔记 5 java工具类和算法> 五.字符串string 字符串和字符的差别:字符串双引号括起来”n”,字符用单引号括起来,表示一种符号’\n’ 1.string的主要方法和属性 类 方法或者属性 备注 定义string Stirng s=new string(“值”),string s=”值” 属性 string.length:string的长度为字节 方法startswith,endswith s.startwith(“值”)-以值为开头,s.endswith(

java学习笔记 第二篇 核心技术(二)

第十四章 集合类 集合类用来存放对象的引用.继承关系如下图: 14.1 Collection 接口 是层次结构中的根接口,构成Collection的单位称为元素.Collection接口不能直接使用,但该接口提供了添加元素.删除元素.管理数据的方法. Collection接口常用方法: 14.2 List 集合 包括List接口以及List集合的所有实现类.List集合中的元素允许重复,各元素循序就是对象插入的顺序 1.List接口,两个重要方法: get(int index): 获取指定索引位

《Hibernate学习笔记十》:多对多关联关系详解

<Hibernate学习笔记十>:多对多关联关系 前面介绍了一对一.多对一和一对多的关联关系在Hibernate应如何实现,这篇博文就来介绍下最后一种关联关系:多对多.多对多关联关系在我们现实生活中的例子实在是太多太多,最典型的就是老师和学生的例子:一个老师可以教多个学生,而一个学生又可以被多个老师来教. 了解一点数据库的我们都知道,在数据库中表示多对多的关联关系,是借助于中间表来解决的. 如下: 还是和以往的思路一样,每一种关联关系都分为单向关联和双向关联,我们每种都会进行介绍,对于单向和双

Java学习笔记3-操作符

Java基本操作符:+.-.*./.%.=.==.!=.+=.-=. 优先级:先乘除后加减,如果是连接符+号会优先往前匹配,比如 a+++++b,会被解释称 a++ ++ +b,所以会报错,需要自行使用括号隔离为 (a++) + (++b). 对象的引用如果赋值给了对象的引用后,2 个对象将指向同一个引用,有一个对象的引用重新赋值后将同时影响到另一个对象,比如 ClassName classA = new ClassName(); ClassName classB = new ClassName