java注解知识要点

注解就是来帮助编程人员更好的完成程序的设计,也可以来规范代码,减少错误的发生
这个跟异常处理机制都差不多,都是很不错的一个功能
注解Annotation
是一种引用数据类型,编译也是生成xxx.class文件
怎么自定义注解?语法格式?
[修饰符列表] @interface 注解类型名{

}

注解可以出现在类上,属性上,方法上,变量上…
注解还可以出现在注解类型上。

//掌握
Deprecated 用 @Deprecated 注释的程序元素,不鼓励程序员使用这样的元素,通常是因为它很危险或存在更好的选择。
//掌握
Override 表示一个方法声明打算重写超类中的另一个方法声明。
//不需要掌握
SuppressWarnings 指示应该在注释元素(以及包含在该注释元素中的所有程序元素)中取@消显示指定的编译器警告。

常见的元注解
Target
是用来标注“注解类型”的注解,他标记的注解可以用在什么地方;如;Target标记了"注解a",那么Target就是说明"注解a"能"注解的地方有哪些"
@Target(ElementType.METHOD) 表示该注解只能在方法上用
.TYPE)表示是类
.FIELD) 表示是属性上
.CONSTRUCTOR)构造方法
Retention
他标注的注解保存在哪个地方
@Retention(RetentionPolicy.SOURCE):表示该注解只能保留在java文件中(就是说编译生成的class文件,不包含这个东西)
@Retention(RetentionPolicy.CLSASS): 表示该注解被保存在class文件中
@Retention(RetentionPolicy.RUNTIME):表示该注解被保存在class文件中,并且可以上反射机制读取到

===============================================================
@Override这个注解只能出现在方法上,如果没有进行重写父类,就会报错(只是编译器检查的),建议在重写方法时加上他
@Deprecated 这个注解的东西表示都是过时的(已过时)

-=-=–=-=-===============-------------------------------------------
自己定义的注解怎么用
package 注解;
//注解里的这些东西是属性
public @interface step_step {
String name();
int a();
String str() default “123”;
String value();
}

package 注解;

public class step {
//如果注解中的属性,在注解代码中已经使用default复制过了,那么就不需要再赋值了
//如果只有一个*属性的时候且名字是 value,那么在赋值的时候,就不需要在写属性的名字了(只限于value这个属性名字)
@step_step(name =“lisi” , a = 20,value = “123”)
public void doSome(){

}

}

注解内的属性可以是那些呢?
byte short int long float double boolean char String Class 枚举类型
上面这些以及他们的数组都可以
另外在对注解属性数组赋值的时候,如果数组只有一个值,大括号{}可以省略

关于自定义注解的代码-----》IDEA注解Annotation //代码如下
这个是自己创建的注解

package 注解;

import javax.lang.model.element.Element;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
//表示MyAnnotation注解,只能在方法和类上出现
@Target({ElementType.METHOD,ElementType.TYPE})
//表示注解可以保存在class文件中,可以通过反射机制获取到
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
    String value() default "王者荣耀";
}

使用自己创建的注解

package 注解;
@MyAnnotation(value = "cs:go") //虽然value已经有了默认值,但是也可以自己在赋值
public class MyAnnotationTast {

    public MyAnnotationTast(){

    }
    @MyAnnotation
    public void DoSome(){

    }
}

下面是通过反射机制来获取注解源代码
只需要找到一个使用该注解的类,通过该类,再找到注解这个类

package 注解;

public class ReflectAnnotation {
    public static void main(String[] args) {
        Class cs=MyAnnotationTast.class;//先获取类
        if(cs.isAnnotationPresent(MyAnnotation.class)){ //判断该类所用的注解是不是与要获取的注解,类型一样
            MyAnnotation myAnnotation=(MyAnnotation)cs.getAnnotation(MyAnnotation.class);//通过这个类所使用的注解,来获取注解的class文件,再强制转换类型,获取到对象
            String str=myAnnotation.value();//获取注解对象的属性  System.out.println(myAnnotation.value());//这个也可以获取到属性的值
            System.out.println(str);

        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值