Java注解学习笔记(一)

本文参考自《Java高级程序设计》清华大学出版社,侵删

Java常用注解:

1.@Override 表示当前定义的方法将覆盖父类的同名、同参数方法

2.@SuppressWarnings 关闭无须关心的警告信息,可用于整个类上或用于方法上

3.@Deprecated 声明方法或类已过时,不建议使用

 

注解的使用方法:

1.在类上使用注解,作用于整个类

@Deprecated
public abstract class Person {
}

该注释表示该类已过时,不建议使用该类

可以看出,注解的使用像修饰符一样

2.在方法上使用注解,只对目标方法起作用

public class Person {
    @Deprecated
    public void speak(String message) {
    }
    @Override
    public String toString() {
        return "This is a person!";
    }
}

该例中 @Deprecated 表示 speak方法 已过时,不建议使用

@Override 表示 toString方法 覆盖了 Object类的toString方法

3.在属性上使用注解

public class Person {
    @Deprecated
    public String name;
}

该例中 @Deprecated 表示该属性已过时,不建议使用该属性,如果使用了该属性,编译器将抛出警告信息

4.为注解设置参数

public class Person {
    @SuppressWarnings(value="unused")
    private String name;

    public void speak(String message) {
        @SuppressWarnings({"unchecked","unused"})
        List list = new ArrayList();
        System.out.println("Speak:"+message);
    }

}

这个例子为了演示注解的功能,所以添加了很多注解,一般情况下无须这样使用。

第一个注解使用了参数value,并为其赋值“unused”,表示这个属性上 无须 抛出未使用警告。

第二个注解表示 局部变量list 无须进行 抛出检测警告和未使用警告。

自定义注解:

元注解:元注解是Java定义的用于创建注解的工具,它们本身也是注解。

Java中的元注解包括以下4个:

1.@Target 表明了自定义注解的作用域

可能的作用域被定义在一个枚举类型中:ElementType

2.Retention 用于声明注解信息的保留策略,可选的级别被存放在枚举RetentionPolicy中。

3.@Documented 表明制作Javadoc是,是否将注解信息加入文档。

如果注解在声明时使用了@Documented,则在制作Javadoc时注解信息会加入Javadoc。

4.@Inherited 表明注解是否会被子类继承,默认情况是不继承的。

如果注解在声明时使用了@Inherited ,则该注解会被使用了该注解的类的子类所继承。

定义注解:

自定义注解是在上述介绍的Java元注解继承上构建的。

注解的定义与接口很相似,而且注解类型编译后也会产生一个Class文件,这与接口和类相同。

下面的例子定义了一个简单的注解Test。

package org.ddd.section4.example4_5;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Test {
}

这个注解上使用了两个元注解,

其中,@Target 表示 @Test 的作用范围,此处声明为ElementType.METHOD,表明这是一个作用在方法上的注解。

@Retention 表明 @Test 的保留策略,此处声明为RetentionPolicy.RUNTIME,表明这些注解信息将被保留到运行时。

为注解声明参数:

package org.ddd.section4.example4_6;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;


@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface Entity {
	public int type() default -1;
	public String name();
}

该例定义了一个注解 @Entity

它的作用域是ElementType.TYPE,表明它可以作用在类、接口或枚举上。

它的保留策略是RetentionPolicy.RUNTIME,表明@Entity的信息将会保留到运行时。

这个注解定义了两个参数 type 和 name,

第一个参数type类型为int,默认值为-1;

第二个参数name类型为String,没有默认值,也没有指明默认值的参数,在使用时必须指明具体的值。

 

如何使用自定义的注解:

package org.ddd.section4.example4_7;


@Entity(name = "Person")
public class Person {
	@Test
	public void speak(String message){}
}

这个例子中使用了例4-5和例4-6中定义的注解。

 

注解参数说明:

编译器对注解的参数要求很高,所以在声明参数时必须满足以下条件。

1.参数类型必须使用指定参数类型(所有基本类型)

2.注解参数的赋值要求:不能是不确定值

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值