JavaSE类加载 反射 动态代理

类加载

file

加载:将class文件读入方法区内存,并为之创建一个Class对象。

验证:检查class文件的字节流中包含的信息是否符合当前虚拟机的要求。

准备:给类变量分配内存,给静态变量赋初始值,给静态常量赋定值。

解析:将常量池的符号引用换成直接引用。

初始化:给静态变量赋定值。

 

jvm三种类加载器:

启动类加载器 扩展类加载器  应用类加载器

 

类的加载:

把类的.class文件中读入到内存中,并创建一个对应的Class对象。然后连接(验证、准备、解析),最后JVM对类进行初始化。

包括:如果类存在直接的父类并且这个类还没有被初始化,那么就先初始化父类;如果类中存在初始化语句,就依次执行这些初始化语句。

类的加载是由类加载器完成的。

 

类什么时候被初始化?

1.创建类的实例(new 的方式)。访问类的静态变量,调用类的静态方法
2.使用反射的方法对类进行反射调用的时候。
3.当初始化一个类的时候,如果发现其父类还没有进行初始化,则需先触发其父类的初始化。
4.当虚拟机启动时,用户需指定一个要加载的主类(包含 main() 方法的那个类),虚拟机会先初始化这个主类。
5.当使用 JDK 1.7 的动态语言支持时,如果一个 java.lang.invoke.MethodHandle 实例最后的解析结果 REF_getStatic、REF_putStatic、REF_invokeStatic 的方法句柄,并且这个方法句柄所对应的类没有进行过初始化,则需先触发其初始化。



 

JVM的类加载机制是什么?

双亲委派机制,类加载器会先让自己的父类来加载,父类无法加载的话,才会自己来加载。

双亲委派机制可以打破吗?为什么

可以打破,比如JDBC使用线程上下文加载器打破了双亲委派机制。原因是JDBC只提供了接口,并没有提供实现。

 

反射

什么是反射机制?

在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;
这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

 

获得反射的方式?

类名.class,例如:Person.class;
创建对象.getClass(),例如:new Person().getClass();
Class.forName(),例如:Class.forName(“java.lang.String”);

 

2020年面试经常问到的Java反射面试题

Field类:提供有关类的属性信息,以及对它的动态访问权限。它是一个封装反射类的属性的类。
Constructor类:提供有关类的构造方法的信息,以及对它的动态访问权限。它是一个封装反射类的构造方法的类。
Method类:提供关于类的方法的信息,包括抽象方法。它是用来封装反射类方法的一个类。
Class类:表示正在运行的Java应用程序中的类的实例。
Object类:Object是所有Java类的父类。所有对象都默认实现了Object类的方法。

 

 

 

动态代理

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值