java之反射机制和注解(更新中......)

Reflect在文档中的位置:

java之反射机制和注解(更新中......)_第1张图片
文档链接:https://docs.oracle.com/javase/8/docs/api/index.html
用于获取类或对象的反射信息。

常用的反射机制重要的类:

java.lang.Class:整个字节码,代表一个类型。包含了以下三块内容;
java.lang.reflect.Nethod:method的字节码;
java.lang.reflect.Constructor:构造方法的字节码;
java.lang.reflect.Field:属性相关的字节码。注意与local_variable的区分。

  • 作用:
    可以通过反射机制,实现OCP开闭原则,即对扩展开发,对修改关闭。框架中常用,让程序更加灵活
  • 获取Class的三种方法
    静态方法:
    java之反射机制和注解(更新中......)_第2张图片

forName()的执行,会加载该类。即该类的静态代码块会执行一次。

比如,获取String的字节码(异常处理,ClassNotFoundException):

Class strCls = Class.forName("java.lang.String");

另外两种获取Class的方法:

// 通过实例方法getClass()获取(getClass是Object的方法)
Class strCls = "abc".getClass();
// 通过静态熟悉获取
Class strCls = String.classClass intCls = int.class;
Class dateCls = Date.class;
Class doubleCls = double.class;
// ...

Class常用方法:

methods describe
newInstance 创建一个该类型的实例对象(Creates a new instance of the class represented by this Class object.)
getFields 获取该类中所有public的属性
getDeclaredFields 获取该类中所有的属性
getDeclaredMethods 获取类的方法:实例方法、静态方法等
getDeclaredMethod 获取类的指定方法
getDeclaredConstructors 获取构造方法
getDeclaredConstructor 获取指定参数的构造方法

Field常用方法:

methods describe
getModifiers 获取当前属性的修饰符类型的int值
getType 获取当前属性的类型
getName 获取当前属性的key
set(obj, attrStr) 设置当前类实例属性的值。eg,obj为当前类的实例对象
get(obj) 获取当前类实例属性的值

Modifier常用方法:

methods describe
toString 把修饰符类型的int值转换为字符串。default-0、public-1、private-2、protected-4、static-8、final-16

Method常用方法:

methods describe
invoke(obj, args) 执行当前的方法,返回值等同于被反射的调用方法的返回值

invoke在被调用时,要注意剩余参数的匹配。paramterType[] -> new Type[] {xxx, yyy}

Constructor常用方法:

methods describe
newInstance(Object… params) 执行指定的构造方法,创建对象
  • 注解Annotation
    一种引用类型,和普通的类相似,也是生成xxx.class文件,并且可以互相引用。比如注解也可以作用于注解上。一般用于校验等,具体用法待后续补充

元注解:Target、Retention

Target:注解作用于那些类型上
Retention:注解作用在那个阶段上。源码、Class、Class + 反射机制发现

JDK内置注解:

Deprecated:表示当时被注解的目标已过时
Override: 只能用在方法上,编译阶段,和运行阶段无关. 重写父类的方法。标识性注解

你可能感兴趣的:(初识java,java,jvm)