注解和反射

目录标题

注解

所有的框架底层实现原理就是注解和反射
例如 mybatis和Springboot
注解:可以给人看 也能给程序看


在这里插入图片描述
在这里插入图片描述

什么是内置注解

注解一定要用@开头

在这里插入图片描述

注解@Override


在这里插入图片描述
注解@Deprecated
不推荐程序员使用 但是可以使用 或者存在更好的方式


在这里插入图片描述

@SuppressWarnings 镇压警告


在这里插入图片描述

元注解

元注解的作业就是负责注解其他注解

在这里插入图片描述

自定义注解

在这里插入图片描述

重点:自定义注解 一定要有 @ 符号
如果只有 interface 就不是注解 这就是一个接口


在这里插入图片描述

反射机制

反射机制非常重要

在这里插入图片描述

动态语言:通俗来讲就是在运行时代码可以根据某些条件改变自身结构
静态语言:与动态语言相对的 运行时结构不可变的语言就是静态语言



Java不是动态语言,但Java可以称之为“准动态语言”因为Java有一定的动态性,
我们可以利用反射机制获得类似动态语言的特性。Java的动态性让编程的时候更加灵活!
所以这是很强大的 但是也增加了 不安全性


在这里插入图片描述
Reflection (反射)是Java被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法。



在这里插入图片描述

获得反射对象

在这里插入图片描述

一个类在内存中只有一个Class对象
一个类被加载后 类的整个结构都会被封装到CLass对象中


在这里插入图片描述

得到Class类的几种方式

重点:
一个加载的类在 JVM 中只会有一个Class示例
每个类的实例都会记得自己是由哪个Class实例所生成
Class类是Reflection的根源, 针对任何你想动态加载,运行的类 ,
唯有先获得相应的Class对象



在这里插入图片描述

所有类型的Class对象

只要元素类型与维度一样 就是同一个Class
int [] a=new int[10];
int [] b=new int[100];
System.out.println(a.getClass().hashCode());
System.out.println(b.getClass().hashCode());



在这里插入图片描述

Java类内存分析

在这里插入图片描述

加载:将class文件字节码内容加载到内存中,并将这些静态数据转换成方法区的运行时数据结构,然后生成一个代表这个类的java.lang.Class对象.



在这里插入图片描述

类的加载过程

重点 类的加载过程


在这里插入图片描述

类加载步骤解释:
1 先加载到内存堆里面 会产生一个类对应的Class对象
2 再后来 进行链接到 栈区 , 在栈区main方法中结束 会得到m=0
3 再后来 进行初始化方法clinit方法 寻找 A类的对象
如下得到 m值为100 再返回到 栈区中赋值给m



在这里插入图片描述

分析类初始化

重点!!!
类的主动引用(一 定会发生类的初始化)
包括以下几类:
当虚拟机启动,先初始化main方法所在的类
new 一个类的对象
调用类的静态成员(除了final常量)和静态方法
使用java.lang.reflect包的方法对类进行反射调用
当初始化 一个类,如果其父类没有被初始化,则先会初始化它的父类



类的被动引用(不会发生类的初始化)
包括以下几类:
当访问一个静态城时,只有真正声明这个域的类才会被初始化。如:当通过子类引用父类的静态变量,不会导致子类初始化
通过数组定义类引用,不会触发此类的初始化
引用常量不会触发此类的初始化(常量在链接阶段就存入调用类的常量池中了)



在这里插入图片描述

产生类的引用的方法的输出结果为下面的第二张图
而不会产生类的引用的方法的输出结果 我放在了图中的注释中!!!



在这里插入图片描述

类加载器(面试会问)

在这里插入图片描述

创建运行时类的对象

获取类的运行时结构

在这里插入图片描述

通过反射 Class对象来获取它的包名和类名



在这里插入图片描述

有了Class对象 能做什么

动态的创建对象 通过反射


在这里插入图片描述

性能对比分析

在这里插入图片描述

所以可以看出 如果反射调用比较多的时候可以关闭这个检测



获取泛型信息

generic 泛型
Paramnter 参数



在这里插入图片描述

获取注解信息

在这里插入图片描述

总结

首先讲解 注解


在这里插入图片描述

接下来讲解反射机制


在这里插入图片描述

在这里插入图片描述

再接下来


在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值