深入理解 Java注解及实例
程序员文章站
2024-03-02 08:48:22
java注解
什么是注解?
java中的注解就是java源代码的元数据,也就是说注解是用来描述java源代码的。 基本语法就是:@后面跟注解的名称。...
java注解
什么是注解?
java中的注解就是java源代码的元数据,也就是说注解是用来描述java源代码的。 基本语法就是:@后面跟注解的名称。
①override:标识某一个方法是否正确覆盖了它的父类的方法。
②deprecated:表示已经不建议使用这个类成员了。 它是一个标记注解。
③suppresswarnings:用来抑制警告信息 等等。
要更好的理解注解,我们可以自己写一个注解
@target : 用来限制注解可以用到那几个地方。比方可以用到类上,可以用到方法胜都可以用@target来限制
@retention:这个是用来控制注解编译在class中的状态的,默认是编译到class里去,但是不读出来,还有两种状态是 不编译到class里面去, 最后一种是编译过于,并且可以通过类反射读出来的
@documented : 可以利用网络来生成注解的
@inherited : 子类是否能继承注解
那么下面是我们自己写的注解类
package cn.hncu.annotation; import java.lang.annotation.documented; import java.lang.annotation.elementtype; import java.lang.annotation.inherited; import java.lang.annotation.retention; import java.lang.annotation.retentionpolicy; import java.lang.annotation.target; @inherited @documented @retention(retentionpolicy.runtime) @target({elementtype.type,elementtype.method}) //目标: 限制该注解能够用在哪些地方,如果没定义@target则不限制即无论哪里都可以用 public @interface myanno { public string schoolname() default "hncu"; //注解中的成员变量要这么定义 }
测试,学习使用
package cn.hncu.annotation; import java.util.arraylist; import java.util.collection; @myanno public class annotationhello { private string name="hncu"; public static void main(string[] args) { system.out.println("hello"); } @override public string tostring() { return super.tostring(); } @myanno(schoolname="大城院") @deprecated public void abc(){ system.out.println("abc..."); } @suppresswarnings({ "rawtypes", "unchecked" }) public void coldemo(){ collection col = new arraylist(); col.add("aa"); } //注解,只是给其它程序或代码读取信息的 @myanno(schoolname="湖南城市学院") public void demo(){ system.out.println("1111111"); } @myanno //因为该注解中的成员变量schoolname设置了默认值,因此这里可以不赋值。若没设置默认值,则必须要在这里赋值 public void demo2(){ system.out.println("1111111"); } //@myanno("abc") //如果注解中的变量名是value,则这里可以不给出变量名 public void demo3(){ system.out.println("33333333333"); } }
通过类反射读出来
package cn.hncu.annotation; import java.lang.reflect.method; public class usemyanno { public static void main(string[] args) { try { class c = class.forname("cn.hncu.annotation.annotationhello"); //判断类上面是否有该注解(@myanno) boolean boo = c.isannotationpresent(myanno.class); system.out.println("类上是否有该注解:"+boo); method ms[] = c.getdeclaredmethods(); for(method m: ms){ //判断方法上面是否有该注解(@myanno) if(m.isannotationpresent(myanno.class)){ system.out.println("有注解的方法:"+m.getname()); //演示读取注解中成员变量的值----从m对象中获取该注解,进而读取它的成员变量的值 myanno ma = (myanno)m.getannotation(myanno.class); system.out.println("学校名称:=="+ma.schoolname()); //获取到了这些数据过后,下面就可以开始你的处理了 } } } catch (classnotfoundexception e) { e.printstacktrace(); } } }
如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!