java回顾之反射和注解

Posted springcode

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java回顾之反射和注解相关的知识,希望对你有一定的参考价值。

java回顾之反射和注解

1.类加载

1.类的加载

当一个类第一次被使用的时候,会被加载到方法区,且一个类只会加载一次。

一个类在内存中只有唯一的一个字节码对象(.class对象)

2.类的加载时机

  1. 创建类的实例。

  2. 调用类的静态变量,或者为静态变量赋值。

  3. 调用类的静态方法。

  4. 使用反射方式来强制创建某个类或接口对应的java.lang.Class对象。

  5. 初始化某个类的子类。

  6. 直接使用java.exe命令来运行某个主类。

3.类加载器

类加载器的功能就是完成类的加载。

  • 启动类加载器(Bootstrap ClassLoader)

  • 扩展类加载器(Extension ClassLoader) 在JDK9以后更名为平台类加载器(Platform ClassLoader)

  • 应用程序类加载器(Application ClassLoader)

  • idea获取类加载器

2.反射

1.反射的概念

反射是一种机制,可以在程序运行期间,去调用类中的各种成员。(构造方法,变量,方法),可以不创建对象,就是用里面的方法

2.获取字节码对象的三种方式

  • 使用类名调用class属性

  • 使用对象调用getClass()方法

  • 使用Class类的静态方法forName()

3.反射操作构造方法

反射获取构造方法

  Class类可以调用: 

getConstructor(Class... c) 可以获取某一个构造方法(公共的)
getConstructors() 可以获取所有的构造方法(公共的)

 

反射执行构造方法

  Constructor类可以调用:

      newInstance(Object... obj) : 执行当前构造方法创建对象。

4.反射操作成员方法

  • 反射获取成员方法

    • Class类中的方法:

      getMethod(String name, Class... c) :获取一个成员方法(公共的)
      getMethods() : 获取类中的所有方法(公共的)
  • 反射执行成员方法  
    • Method类可以调用:
        • Object  invoke(Object obj , Object... o)  :让方法执行

5.暴力反射

在一个类中有些成员因为权限的问题无法访问,暴力反射的作用就是跳过权限的限制,可以访问私有成员。

暴力反射写法:在之前的方法中间加Declared

在执行之前: .setAccessable(true);//设置成可访问

暴力反射技术一般不用, 因为他打破java的规范。

 

3.注解

1.概述

注解就是@

注解是类的一个组成部分,可以给类添加一些额外的内容,注解相当于是一个标记。

2.注解的作用

  • 生成帮助信息

    @author   作者
    @param   参数介绍
  • 编译检查

    @Override    检查方法是一个重写方法
    @FunctionalInterface 检查接口是一个函数式接口
  • 有功能性质

    @Test       单元测试
    @After

3、自定义注解

格式【记住】
public @interface 注解{

}
属性
  格式
    数据类型 属性名();
数据类型
  基本数据类型
    String
    Class
    枚举
    注解
以上类型的数据形式
注意事项:【记住】
  1.如果属性有默认值,在使用时可以不赋值
  2.如果只有一个属性且名字叫value,在使用是可以省略value=
  3.数组类型的属性如果只有一个元素,可以省略大括号{}

元注解
  @Target
  定义注解的使用位置
  @Retention
  定义注解的生命周期

总结:

反射【重点】
概念
反射是一种机制,能够在成员运行期间,获取类中的各种成员

//如果你之前见过快速创建对象的方式,你可以去用,但是那个东西已经过时了。

获取构造方法【重点】
  getConstructors() :获取所有的构造方法
  getConstructor() :获取某一个构造方法

执行构造方法:
  newInstance() :执行

获取成员方法【重点中的重点】
  getMethods() :获取所有的成员方法
  getMethod() :获取某一个成员方法

执行成员方法:
  invoke() :执行

暴力反射
  在上面获取的方法中间加上Declared
  获取之后设置访问权限:setAccessable(true);

 

 

 



































以上是关于java回顾之反射和注解的主要内容,如果未能解决你的问题,请参考以下文章

Java中的注解和反射

回顾一下Java注解

java注解和反射

Java语法之反射

Java之枚举注解反射

[记录] java反射+注解