Java类加载机制(仅作记录)

下面声明类看看测试结果:

[java] view plain copy

  1. package com.shareniu;
  2. public class HelloA {
  3. {
  4. System.out.println("before class HelloA");
  5. }
  6. public HelloA() {
  7. System.out.println("HelloA");
  8. }
  9. static{
  10. System.out.println("static HelloA");
  11. }
  12. {
  13. System.out.println("after class HelloA");
  14. }
  15. }
  16. public class HelloB extends HelloA {
  17. private int i;
  18. public HelloB() {
  19. System.out.println("HelloB");
  20. }
  21. {
  22. System.out.println(i);
  23. System.out.println(" before class HelloB");
  24. }
  25. {
  26. System.out.println("after class HelloB");
  27. }
  28. static{
  29. System.out.println("static HelloB");
  30. }
  31. public static void main(String[] args) {
  32. new HelloB();
  33. System.out.println("shareniu");
  34. new HelloB();
  35. }

输出的结果是什么呢?

[java] view plain copy

  1. static HelloA
  2. static HelloB
  3. before class HelloA
  4. after class HelloA
  5. HelloA
  6. 0
  7. before class HelloB
  8. after class HelloB
  9. HelloB
  10. shareniu
  11. before class HelloA
  12. after class HelloA
  13. HelloA
  14. 0
  15. before class HelloB
  16. after class HelloB
  17. HelloB

1.1.1. 总结

1.实例化类对象的时候,先实例化父类的静态方法,再实例化子类的静态方法,而且只会执行一次。

2.静态块的代码的优先级是最高的。

3.先初始化父类的代码块,再执行父类的构造方法。继续初始化自己的代码块,再执行自己的构造方法。

4.代码块是优先于构造方法执行的。这里就是类对象初始化的2次构造机制造成的。先执行代码块初始化所有的变量信息,构造方法执行的时候,如果有变量的赋值,就去再次初始化已经修改的值的内存。

5.永远都是先加载父类,在加载子类。先加载static的,在加载类对象的变量信息。

6.代码块{}的执行顺序,从上而下执行。

时间: 2024-12-08 23:56:06

Java类加载机制(仅作记录)的相关文章

配置java服务器,仅作记录。

目的:搭建本机服务器,方便本地测试. 环境:unity5.5.3,Eclipse Jee Oxygen(4.7.0) 所需工具(软件): 1.MongoData配置文件 2.nginx-1.1.12. 3.studio-3t-x64. 4. mongodb-win32-x86_64-3.2.5-signed.msi 步骤: 1.安装mongodb软件(所需工具4) 2.配置mongodb文件,修改配置文件路径,改为本机绝对路径. 3.配置系统环境变量.将MongoDB的bin文件路径添加到系统环

一文读懂Java类加载机制

Java 类加载机制 Java 类加载机制详解. @pdai Java 类加载机制 类的生命周期 类的加载:查找并加载类的二进制数据 连接 验证:确保被加载的类的正确性 准备:为类的静态变量分配内存,并将其初始化为默认值 解析:把类中的符号引用转换为直接引用 初始化 使用 卸载 类加载器, JVM类加载机制 类加载器的层次 寻找类加载器 类的加载 JVM类加载机制 自定义类加载器 参考文章 类的生命周期 其中类加载的过程包括了加载.验证.准备.解析.初始化五个阶段.在这五个阶段中,加载.验证.准

Java类加载机制的深入研究

类加载机制 类加载是Java程序运行的首要步骤,研究类的加载有助于了解JVM执行过程,并指导开发者采取更有效的措施配合程序执行,同时让程序能动态的控制类加载,比如热部署等,提高程序的灵活性和适应性. 类加载过程 Java程序运行的场所是内存. 当在命令行执行java HelloWorld的时候,JVM会将HelloWorld.class加载到内存中,形成一个class对象:HelloWorld.class,具体过程如下: 1.找到jre目录,找到jvm.dll文件,并且初始化JVM 2.产生一个

深入理解和探究Java类加载机制-

深入理解和探究Java类加载机制---- 1.java.lang.ClassLoader类介绍 java.lang.ClassLoader类的基本职责就是根据一个指定的类的名称,找到或者生成其对应的字节代码,然后从这些字节代码中定义出一个Java 类,即 java.lang.Class类的一个实例. ClassLoader提供了一系列的方法,比较重要的方法如: 2.JVM中类加载器的树状层次结构 Java 中的类加载器大致可以分成两类,一类是系统提供的,另外一类则是由 Java 应用开发人员编写

两道面试题,带你透彻解析Java类加载机制

在许多Java面试中,我们经常会看到关于Java类加载机制的考察,例如下面这道题: class Grandpa { static { System.out.println("爷爷在静态代码块"); } } class Father extends Grandpa { static { System.out.println("爸爸在静态代码块"); } public static int factor = 25; public Father() { System.ou

用两道面试题带你详细了解 Java 类加载机制

在许多Java面试中,我们经常会看到关于Java类加载机制的考察,例如下面这道题: class Grandpa{static{System.out.println("爷爷在静态代码块");}} class Father extends Grandpa{static{System.out.println("爸爸在静态代码块");}public static int factor = 25;public Father(){System.out.println("

透彻解析Java类加载机制

目录 Java类加载机制的七个阶段 加载.验证.准备(重要).解析.初始化(重要).使用.卸载 在许多Java面试中,我们经常会看到关于Java类加载机制的考察,例如下面这道题: class Grandpa { static { System.out.println("爷爷在静态代码块"); } } class Father extends Grandpa { static { System.out.println("爸爸在静态代码块"); } public sta

java类加载机制及方法调用

类加载机制 概述 类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载(Loading).验证(Verification).准备(Preparation).解析(Resolution).初始化(Initialization).使用(Using)和卸载(Unloading)7个阶段.其中验证.准备.解析3个部分统称为连接(Linking) 于初始化阶段,虚拟机规范则是严格规定了有且只有5种情况必须立即对类进行"初始化"(而加载.验证.准备自然需要在此之前开始): 1

Java类加载机制与反射 jvm学习

同一个JVM的有线程.所有变量都处于同一个进程里,他们都使用JVM进程的内存区.当系统出现以下几种情况时JVM进程将被终止: 1.程序运行到最后正常结束 2.程序运行到使用System.exit()或Runtime.getRuntime().exit)代码处结束程序. 3.程序执行过程中遇到未捕获的异常或错误而结束. 4.程序所在平台强制结束了JVM进程 注意两次运行java程序,处于两个不同的JVM他们不共享内存. 类的加载 1.当程序主动使用某个类时,如果该类还未加载到内存中,则系统会通过加

深入研究Java类加载机制

类加载是Java程序运行的第一步,研究类的加载有助于了解JVM执行过程,并指导开发者采取更有效的措施配合程序执行. 研究类加载机制的第二个目的是让程序能动态的控制类加载,比如热部署等,提高程序的灵活性和适应性. 一.简单过程 Java程序运行的场所是内存,当在命令行下执行: java HelloWorld 命令的时候,JVM会将HelloWorld.class加载到内存中,并形成一个Class的对象HelloWorld.class. 其中的过程就是类加载过程: 1.寻找jre目录,寻找jvm.d