`
maybe723
  • 浏览: 46009 次
  • 来自: ...
最近访客 更多访客>>
社区版块
存档分类
最新评论

类的加载过程

阅读更多

 Java中一个类的信息编译之后是存放在字节码文件中的(.class),运行的时候,如果虚拟机用到了这个类,它就会通过ClassPath找到这个字节码的文件,通过一个输入流,把其中的内容读入到虚拟机的内存中,从而获得这个类的信息,称为类加载

   类的加栽只会进行一次,第一次用到这个类的时候

   静态初始代码块在类加载的时候运行

   类加载的时机:能不加载就不加载

1.     第一次new对象的时候,加载

2.     第一次访问static成员的时候,加载

3.     声明引用的时候,不会加载类

4.     加载字类会先加载父类

5.     如果通过子类访问父类的静态成员,只加载父类

6.     如果访问的是类的公开的静态常量,那么如果编译器在编译的时候能确定这个常量的值的时候,那么就不会加载,反之,编译器不能确定值的时候,就加载

 

Code:

class A

{

static int i=20;

static final int j=50;

    static double x=Math.random()*1000;

   A()

   {

    System.out.println("A的构造函数");

   }

    

   {

     System.out.println("class A的初始化块");

   }

    static{

   System.out.println("classA被加载"); 

 }

 

}

 

class B extends A

{

  B()

  {

   System.out.println("B的构造函数");

  }

  static

  {

   System.out.println("class b 被加载"); 

   }

 

  {

    System.out.println("class b的初始化块");

   }

   

}

class TestClassLoader

{

   public static void main(String[] args)

   {

    

     A a; //声明一个引用的时候不加载类

    a=new B(); //new 一个对象的时候被加载,先加载父类,后再加载子类

    System.out.println(A.i); //当使用静态的成员变量的时候被加载

System.out.println(B.i); //通过子类去访问父类的静态成员的 时候,只加载父类

 System.out.println(A.h); //由于是可确定的值,所以不加载类

System.out.println(A.x); //由于编译的时候不确定具体的值,所以会加载类

   }

}

 

分享到:
评论

相关推荐

    weblogic类加载过程简述

    下面我们将详细探讨WebLogic的类加载过程。 1. **类加载器层次结构** WebLogic的类加载器体系遵循“父类加载器优先”原则,这意味着当一个类加载请求发生时,首先由父类加载器尝试加载,只有在其无法找到相应类时...

    第23讲请介绍类加载过程,什么是双亲委派模型1

    Java 类加载过程是Java程序运行时的关键环节,它涉及到如何将类的字节码加载到JVM中并准备执行。整个过程可以分为五个主要步骤:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)和...

    JVM类加载过程.pptx

    JVM类加载过程 JVM(Java Virtual Machine)是Java语言的核心组件之一,它是Java语言的可移植性和跨平台性的基础。JVM主要组成部分包括类加载子系统、执行引擎、本地方法接口和运行时数据区。 类加载子系统是JVM的...

    Java类加载流程(双亲委派)流程图.zip

    流程图通常会清晰地展示出类加载的整个过程。在“Java类加载流程(双亲委派)流程图.jpg”中,我们可以期待看到以下内容: 1. **启动类加载器(Bootstrap ClassLoader)**:这是最顶层的加载器,负责加载JDK的核心库...

    JVM(三):类加载机制(类加载过程和类加载器)1

    类加载器在类加载过程中扮演重要角色,它负责找到类的字节流并将其转换为运行时可用的形式。系统提供了几个内置类加载器,如Bootstrap ClassLoader(引导类加载器)、Extension ClassLoader(扩展类加载器)和...

    SpringBoot 类加载过程,源码分析

    SpringBoot 类加载过程详解 在深入探讨Spring Boot的类加载过程之前,让我们先理解一下类加载的基本概念。Java中的类加载是由JVM(Java虚拟机)执行的,它负责将类的字节码加载到内存中,进行校验、解析,并准备类...

    java类加载过程详解.doc

    Java 类加载过程是Java虚拟机(JVM)在运行时动态加载类的机制,它涉及类的生命周期中的几个关键步骤,包括装载、连接、初始化和卸载。下面将详细阐述这些过程。 1. 装载 装载阶段是类加载的起始点,主要分为三个...

    java类加载器

    #### 二、类加载过程 类加载过程主要包括三个步骤: 1. **加载**:通过类的全限定名找到该类的二进制字节流。 2. **连接**: - **验证**:确保加载的类文件符合JVM规范,包括字节流文件的格式正确性、元数据的...

    深入研究Java类加载机制 深入研究Java类加载机制

    类加载过程涉及到类的加载、链接(验证、准备、解析)、初始化等阶段,并且这一过程是由类加载器系统完成的。 #### 二、类加载器系统 Java中的类加载器系统主要包括以下几种类型的类加载器: 1. **Bootstrap ...

    自定义类加载器实现自定义加载

    - 类加载过程分为三个阶段:加载、验证、准备、解析和初始化。在加载阶段,类加载器寻找并加载类的二进制数据。 - Java中的类加载器采用双亲委派模型,即一个类首先由启动类加载器Bootstrap ClassLoader尝试加载,...

    Android-Android热修复框架基于类加载机制的代码修复

    - 类加载过程包括加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)和初始化(Initialization)五个阶段。 - Android系统使用双亲委派模型进行类加载,即先由父加载器尝试加载,...

    类加载的工具

    类加载工具则是辅助开发者理解和分析类加载过程的实用程序。这些工具可以帮助我们定位类的来源,查看加载顺序,以及优化应用的性能。 标题中的“类加载的工具”可能指的是用于监控和分析类加载过程的各种工具。在...

    Java虚拟机----类的加载过程.docx

    Java虚拟机(JVM)的类加载过程是Java程序运行的基础,它涉及到类加载器、类的生命周期和一系列复杂的步骤。在这个过程中,类加载器主要任务是根据类的全限定名加载二进制字节流并转化为`java.lang.Class`对象。整个...

    Java类加载器原理

    Java 类加载器原理 Java 类加载器是Java虚拟机...类加载器的机制保证了Java的类加载过程是有序且安全的,同时也支持了Java的动态加载和模块化特性。在自定义类加载器时,需要遵循这些规则,以便正确地扩展JVM的功能。

    Java类加载原理解析

    当遇到`java.lang.ClassNotFoundException`异常时,通常是因为类加载过程出现了问题。了解类加载机制对于解决这类问题至关重要,同时也有助于深入理解Java虚拟机(JVM)的工作原理。 Java 类加载机制主要由类加载器...

    Java类加载内幕详细讲解

    #### 五、类加载过程详解 类加载的过程主要分为三个阶段:加载(Loading)、连接(Linking)和初始化(Initialization)。 1. **加载**(Loading): - 类加载器查找并加载类的二进制流。 - 创建`java.lang....

    自定义类加载器

    自定义类加载器是Java平台灵活性的体现,它允许开发者对类加载过程进行扩展和定制,满足特殊需求。理解类加载器的工作原理和如何创建自定义类加载器对于优化应用程序和实现高级功能至关重要。在实际开发中,根据项目...

    JVM类加载机制详细讲解

    类加载过程中可能会遇到一些问题,如类冲突、类循环依赖等。类冲突通常发生在不同加载器加载了相同包名下的类,导致版本不一致。类循环依赖则可能引发无限递归,使得类加载失败。解决这些问题通常需要对类加载器的...

    类加载器加载过程.rar

    类加载过程包括三个主要阶段:加载、验证、准备、解析和初始化。 1. 加载:类加载器读取类的二进制数据,这些数据通常来自.class文件,也可能来自网络、数据库或其他数据源。 2. 验证:确保加载的类数据符合Java...

Global site tag (gtag.js) - Google Analytics