注解与反射基础回顾

1、注解

1 . 内置注解

  • @Override,定义在lang.Override中,只用于修饰方法,表明表明一个方法声明打算重写超类中另一个声明。

  • @Depracated,定义在lang.Depracated中,修饰方法,属性,类,表明不鼓励使用,很危险或有更好的存在。

  • @Suppress Warnings,定义在lang.Suppress Warnings中,用来抑制编译时的警告信息 , 需要参数。

2 . 元注解

负责注解其他注解,java定义了4个标准的meta-annotation类型,用来提供对其他annotation类型作说明。

这些类型和他们支持的类在lang.annotation包中可以找到

  • @Target,用于描述注解的使用范围,即注解可以用在哪些地方。

  • @Retention,表示需要在什么级别保存该注释信息,用于描述注解的生命周期(SOURCE<CLASS<RUNTIME(一般情况))

  • @Document,说明该注解将被包含在javadoc中。

  • Inherited,说明子类可以继承父类中的该注解。

3 . 自定义注解

//自定义一个注解
//注解的作用域Target,TYPE类,Method方法
@Target({ElementType.TYPE,ElementType.METHOD})
//注解的生命周期,默认都用RUNTIME运行时
@Retention(RetentionPolicy.RUNTIME)
//@interface自定义注解后加注解名
@interface Myannotation{
   //注解参数表示为 :参数类型 + 参数名();
   //使用时为@Myannotation(name = "名字")
   String name() default "a";//默认值为a,不必须传参
   int age();//无默认值,使用该注解时必须传入该参数
   int id() default -1;//默认值为-1,代表不存在

   //当注解中无上述参数,只有一个时参数名可设置为value,传参时候不需要参数名
   String value();
}

2、反射

Java Reflection(反射)是java被视为动态语言的关键,反射机制允许程序在执行期借助Reflction API去的任何类的内部信息并能直接操作任何对象的内部属性以及方法。

Class c = Class.forName("java.lang.String")

 注解与反射基础回顾

 

 

  • 优点:动态创建对象和编译,体现灵活性。

  • 缺点:对性能有影响,反射属于解释操作,慢于直接操作。

通过反射获取类实例方式

        //新建一个类人类,类学生继承人类
       class Person{}
       class Student extends Person{}
       //创建一个学生对象
       Person person = new Student();

       //方式1:通过对象获得学生类
       Class c1 = person.getClass();
       //方式2:forname获得学生类
       Class c2 = Class.forName("src.biji.Student");
       //方式3:通过类名.class获得学生类
       Class c3 = Student.class;
       //方式4:通过父类类型,获取学生的父类人类
       Class c4 = c1.getSuperclass();
       //方式5:基本内置类型的包装类有一个Type属性,获取int类型
       Class c5 = Integer.TYPE;
上一篇:23种设计模式之工厂模式学习笔记


下一篇:2021-09-18