JavaSE_注解和反射

注解

元注解:注解其他注解

  • @Target:描述注解适用范围
  • @Retention:需要什么级别保存该注解信息,用于描述注解生命周期(SOURCE < CLASS < RUNTIME )
  • @Document:说明该注解被包含在Javadoc中
  • @Inherited:说明子类可以继承父类的该注解

自定义注解

  • @interface
  • 声明一个配置参数
  • 用default声明参数默认值
  • 如果只有一个参数成员,参数名为value
  • 注解元素必须要有值

反射

获得反射对象

Class c = Class.getName("...");
System.out.println(a);

Class类

  • Class本身是一个类
  • 一个加载的类在JVM中只会有一个Class实例
  • 一个Class对象对应的是一个加载到JVM中的一个class文件
  • Class类是Reflection根源,针对任何你想动态加载、运行的类,需要先获得相应的Class对象

Java内存分析

  • 堆: 存放new的对象和数组,可以被所有线程共享,不会存放别的对象引用
  • 栈:存放基本变量类型,引用对象的变量
  • 方法区:可以被所有线程共享,包含所有的class和static变量

类加载的过程:类的加载 -> 类的链接 -> 类的初始化

  • 类的加载:将class文件字节码内容加载到内存中,将这些静态数据转换成方法区的运行时数据结构,生成代表这个类的java.lang.Class对象
  • 类的链接:将java类的二进制代码合并到JVM运行状态中
  • 类的初始化:
  1. 执行构造器()方法,将所有类变量赋值动作和静态代码块中的语句合并
  2. 当初始化一个类的时候,发现其父类还没有初始化,先触发其父类初始化

类初始化

  • 类的主动引用一定发生类的初始化
    main、new一个对象、调用静态成员和静态方法、使用reflect、初始化一个类初始化其父类

  • 类的被动引用不会发生初始化
    子类访问父类静态变量、数组定义类引用、引用常量

类加载器

源程序(.java) -> java编译器 -> 字节码文件(.class) -> 类装载器 -> 字节码校验器 -> 解释器

  • 引导类加载器: Java核心库(rt.jar)
  • 扩展类加载器
  • 系统类加载器
原文地址:https://www.cnblogs.com/Hot-machine/p/13192960.html