临平建设局网站,wordpress评论滑动,厦门网页设计工作室,金华大企业网站建设有哪些原标题#xff1a;由经典面试题看java中类的加载机制1.概述类加载是Java程序运行的第一步#xff0c;研究类的加载有助于了解JVM执行过程#xff0c;并指导开发者采取更有效的措施配合程序执行#xff0c;对理解java虚拟机的连接模型和java语言的动态性都有很大帮助。由于J…原标题由经典面试题看java中类的加载机制1.概述类加载是Java程序运行的第一步研究类的加载有助于了解JVM执行过程并指导开发者采取更有效的措施配合程序执行对理解java虚拟机的连接模型和java语言的动态性都有很大帮助。由于Java的跨平台性经过编译的Java源程序并不是一个可执行程序而是一个或多个类文件。当Java程序需要使用某个类时JVM会确保这个类已经被加载、连接(验证、准备和解析)和初始化。JVM中类的装载是由类加载器(ClassLoader)和它的子类来实现的Java中的类加载器是一个重要的Java运行时系统组件它负责在运行时查找和装入类文件中的类。 2.类加载器类的加载是由类加载器完成的类加载器包括根加载器(BootStrap)、扩展加载器(Extension)、系统加载器(System)和用户自定义类加载器(java.lang.ClassLoader的子类)。Bootstrap一般用本地代码实现负责加载JVM基础核心类库(rt.jar)Extension从java.ext.dirs系统属性所指定的目录中加载类库它的父加载器是BootstrapSystem又叫应用类加载器其父类是Extension。它是应用最广泛的类加载器。它从环境变量classpath或者系统属性java.class.path所指定的目录中记载类是用户自定义加载器的默认父加载器。 3.类加载的过程下图是我总结的一个java类被jvm加载的过程。 4.子类和父类加载顺序 那么问题来了如果有一个java类继承了另一个java类这两个类的内部具体的执行过程是什么呢比如下面的面试题 public class Tests{ Test public void test(){ A a newA(); a.aDisplay(); } } 执行结果 Class B1:static blocks2 Class B2:static blocks3 Class A1:static blocks1 Class A2:static blocks2 Class B:common blocksi4,j3 constructorB: i5,j4 Class A:common blocksi3,j2 constructorA: i4,j3 Class A:static void a Display(): i5,j3可能这里面最迷惑人的就是两个成员变量了一个静态的一个非静态的。其实他们出现在这是貌似没啥太大意义父类和子类虽然拥有着同名的成员变量但是这些变量都独自存在于各自的类中并有各自的只。言归正传由上面的面试题我们可以得出下面的规律责任编辑