JAVA注解与反射

注解Annotation

元注解————————java主要有四个meta-Annotation:@Target @Retetion @Document @Inherited 

  1. @Target:注解的生效范围------可以放在什么位置
  2. @Retetion:注解生效的等级--------source class runtime 
  3. @Document:表示注解是否生成在javadoc中
  4. @Inherited :表示子类可以继承父类的注解

注解创建:

@interface  自动继承Annotation

格式为 @interface 注解名称{

        注解的参数        

}        

注解的参数: 参数类型+参数名+()

还可以在注解参数后加默认值 default  默认值

反射Reflection

1.获取反射对象

1.Class clazz = Class.forName("包名.类名")

说明:一个类在内存中只有一个Class对象,一个类被加载后,整个内部结构都会被封在class对象中

2.Object中有getClass()方法

class c1 = 对象名.getclass();

3.具体类可以直接.class

Class clazz =类名.class

2.java内存分析

类的初始化:

类的加载:加载到内存中,创建为一个Class文件,将文件的静态数据(静态变量,静态方法,代码,常量池)转换到方法区的运行时的数据结构然后在生成一个Class对象

类的链接:将二进制代码合并到jvm运行状态中的过程 ---------验证 、 准备(正式为static变量何止默认值) 、 解析;

类的初始化:将所有静态方法以及静态赋值动作合并成类构造器<clinit>,初始化时如果父类没有初始化就先初始化父类;

问题:什么时候会进行类的初始化

主动引用的时候会发生,被动引用不会发生

  1. 虚拟机运行时,main方法所在的类会被初始化
  2. new一个类的对象会进行初始化
  3. 调用类的静态变量或者方法的时候会被初始化
  4. 使用java.lang.reflect下的方法对类进行反射调用的时候
  5. 子类初始化时,发现父类未初始化,会进行父类的初始化

  • 13
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值