如何更好地使用java注解
什么是注解?
注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。
我们可以把注解理解为代码里的特殊标记,这些标记可以在编译,类加载,运行时被读取,并执行相应的处理。通过注解,开发人员可以在不改变原有代码和逻辑的情况下,在源代码中嵌入补充信息。
1、注解的作用
编写文档:通过代码里标识的注解生成文档【生成文档doc文档】
代码分析:通过代码里标识的注解对代码进行分析【使用反射】
编译检查:通过代码里标识的注解让编译器能够实现基本的编译检查【@Override】
2、JDK中预定义的注解
@Override
检测被该注解标注的方法是否是继承自父类(接口)的。
@Deprecated
该注解标识的内容,表示已过时,使用的时候,会有一个横线。
SuppressWarnings
压制警告,一般传递参数all @SuppressWarnings(“all”)。
(视频教程推荐:java视频)
3、自定义注解
格式
public @interface 注解名称 { 属性列表; }
本质:注解本质上就是一个接口,该接口默认继承Annotation接口,可以通过javap 类名.class命令反编译class文件
public interface MyAnno extends java.lang.annotation.Annotation { }
属性:
注解中的属性,就是接口中的抽象方法。
要求:
属性的返回值类型只能是以下类型
基本数据类型
String
枚举
注解
以上类型的数组
public @interface MyAnno { int age(); String name(); //枚举类型 Person per(); //注解类型 MyAnno2 anno2(); //数组类型 String[] strs(); } //枚举类Person public enum Person { P1,P2; }
注意:
定义了属性,在使用时必须给属性赋值,多个属性之间用逗号隔开,所以,一般注解中方法名一般取成属性名;
如果定义属性时,使用default关键字给属性默认初始化值,则使用时,可以不用给属性赋值;
如果只有一个属性需要赋值,并且属性的名称是value,则value可以省略,直接定义属性值;
数组赋值时,值使用{}包裹。如果数组中只有一个值,则{}可以省略。
@MyAnno(age=20, name="zhangsan", per=Person.P1, anno2=@MyAnno2, strs={"zhangsan","lisi"}) public class Test { }
元注解:用于描述注解的注解
@Target
当前被描述的注解能够作用的位置,该注解只有一个属性是value,返回值是ElementType枚举类型的数组。
ElementType 的常用值:
TYPE:可以作用于类上
METHOD:可以作用于方法上
FIELD:可以作用于成员变量上
@Rentention
描述注解被保留的阶段,该注解只有一个属性value,返回值是RetentionPolicy枚举类型
RetentionPolicy 的值
SOURCE:当前被描述的注解,不会保留到class文件中
CLASS:当前被描述的注解,会保留到class字节码文件中,但是不会被JVM读取到
RUNTIME:当前被描述的注解,会保留到class字节码文件中,并被JVM读取到,自定义的值,一般都取这个值
@Documented
当前被描述的注解是否被抽取到api文档中
@Inherited
当前被描述的描述注解是否被子类继承
一般经常用到的是前两个元注解。
4、注解的使用
在程序中使用注解:获取这几中定义的属性值
// pro 注解 @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) public @interface pro { String className(); String methodName(); } //在程序中使用注解 @pro(className="anli.Demo1", methodName = "show1") public class UseAnno { public static void main(String[] args) throws Exception { //获取这个类的class对象 Class<UseAnno> useAnnoClass = UseAnno.class; //获取指定的注解类子类对象 pro proAnno = useAnnoClass.getAnnotation(pro.class); //执行注解中的方法,获取注解中属性的值 String className = proAnno.className(); String methodName = proAnno.methodName(); }
通过Class类中的getAnnotation()方法,获得的是注解类的实现类的对象,有了对象,就可以执行注解中的方法,返回值就是使用注解时设置的属性值。其实就是在内存中生成了一个该注解接口的子类实现对象
public class ProImpl implements Pro{ public String className(){ return "cn.itcast.annotation.Demo1"; } public String methodName(){ return "show"; } }
推荐教程:java开发入门
Atas ialah kandungan terperinci 如何更好地使用java注解. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Panduan untuk Square Root di Java. Di sini kita membincangkan cara Square Root berfungsi di Java dengan contoh dan pelaksanaan kodnya masing-masing.

Panduan Nombor Sempurna di Jawa. Di sini kita membincangkan Definisi, Bagaimana untuk menyemak nombor Perfect dalam Java?, contoh dengan pelaksanaan kod.

Panduan untuk Nombor Armstrong di Jawa. Di sini kita membincangkan pengenalan kepada nombor Armstrong di java bersama-sama dengan beberapa kod.

Panduan untuk Penjana Nombor Rawak di Jawa. Di sini kita membincangkan Fungsi dalam Java dengan contoh dan dua Penjana berbeza dengan contoh lain.

Panduan untuk Weka di Jawa. Di sini kita membincangkan Pengenalan, cara menggunakan weka java, jenis platform, dan kelebihan dengan contoh.

Panduan untuk Nombor Smith di Jawa. Di sini kita membincangkan Definisi, Bagaimana untuk menyemak nombor smith di Jawa? contoh dengan pelaksanaan kod.

Dalam artikel ini, kami telah menyimpan Soalan Temuduga Spring Java yang paling banyak ditanya dengan jawapan terperinci mereka. Supaya anda boleh memecahkan temuduga.

Java 8 memperkenalkan API Stream, menyediakan cara yang kuat dan ekspresif untuk memproses koleksi data. Walau bagaimanapun, soalan biasa apabila menggunakan aliran adalah: bagaimana untuk memecahkan atau kembali dari operasi foreach? Gelung tradisional membolehkan gangguan awal atau pulangan, tetapi kaedah Foreach Stream tidak menyokong secara langsung kaedah ini. Artikel ini akan menerangkan sebab -sebab dan meneroka kaedah alternatif untuk melaksanakan penamatan pramatang dalam sistem pemprosesan aliran. Bacaan Lanjut: Penambahbaikan API Java Stream Memahami aliran aliran Kaedah Foreach adalah operasi terminal yang melakukan satu operasi pada setiap elemen dalam aliran. Niat reka bentuknya adalah
