深入理解 Java注解及实例

网友投稿 263 2023-04-01


深入理解 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对象中获取该注解,http://进而读取它的成员变量的值

MyAnno ma = (MyAnno)m.getAnnotation(MyAnno.class);

System.out.println("学校名称:=="+ma.schoolName());

//获取到了这些数据过后,下面就可以开始你的处理了

}

}

} catch (ClassNotFoundException e) {

e.printStackTrace();

}

}

}

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java之Spring注解配置bean实例代码解析
下一篇:react router 4.0以上的路由应用详解
相关文章

 发表评论

暂时没有评论,来抢沙发吧~