`
longgangbai
  • 浏览: 7330780 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

关于java 类的生命周期 深入了解

阅读更多

package com.easyway.commons.ispace.dev.oop.classloaders;
/**
 * 类的生命周期从类被加载,连接和初始化开始,到被卸载结束。只有当类处于生命周期中时,
 * 程序才能使用这个类:如访问它的静态成员,创建它的实例。
 * 加载过程负责把类的二进制数据读入到java虚拟机的方法区,并且在堆区内创建一个描述
 * 这个类的class对象。连接过程负责验证类的二进制数据,为静态变量分配内存并且初始化
 * 默认值,把字节码流中的符号引用替换为直接引用。初始化过程负责执行类的初始化语句,
 * 为静态变量赋予初始值。
 * 关于类的生命周期:
 * java 虚拟机初始化一个类:
 *   (1) 如果这个类没被加载和连接,那就进行加载和连接。
 *   (2)  如果累存在直接的父类,并且这个父类还没有被初始化,那就先初始化直接的父类。
 *   (3) 如果类存在初始化语句,那就一次执行这些初始化语句。
 *   备注:如果这个类的父类,有相关的父类,也执行上面的步骤。
 * @author longgangbai
 * @date 2010-5-7
 * @version 1.0
 * @since JDK6.0
 */
class Base{
 static int a=1;
 static{
  System.out.println("init base  static ");
 }
}
class Sub extends Base{
 static int b=1;
 
 static{
  System.out.println("init Sub  static");
 }
}
public class ClassLifeLine {
 /**
  * 静态变量的初始化:
  * (1)在静态变量的声明处进行初始化
  * (2)在静态代码块中进行初始化
  */
 private static final int a=1;
 private static final int b=(4*10)/10; 
 
 private static final long c;
 private static long d;  //静态变量没有显示初始化,它将保持默认值0
 
 public ClassLifeLine(){
  System.out.println("类的构造中》...");
 }
 /**
  * 静态变量的声明语句,以及静态代码块都被看作类的初始化语句。
  * java 虚拟机会按照初始化语句在类文件中的先后顺序依次执行他们。
  */
 static{
  c=3;
  System.out.println(" ClassLifeLine ,这是一个static 的语句块");
 }
 /**
  * main 方法执行过程如下:
  *   java 虚拟机首先初始化启动ClassLifeLine ,
  *   然后执行它的main方法,当访问Sub.b 时,先依次初始化Base 类和 Sub类
  *  
  * @param args
  */
 public static void main(String[] args) {
   
  //=======================仅仅执行下面代码结果如下:==========================//
  //=======================ClassLifeLine ,这是一个static 的语句块============//
  //======================= init base  static ============================//
  //======================= init Sub  static==============================//
  //=======================Sub.b = 1 =====================================//
  //=======================ClassLifeLine d =0 ============================//
  //=======================ClassLifeLine b =3=============================//
  //=======================ClassLifeLine b =4=============================//
/*  
  System.out.println("Sub.b = "+Sub.b);
  System.out.println(" ClassLifeLine d ="+d);
  System.out.println(" ClassLifeLine c ="+c);
  System.out.println(" ClassLifeLine b ="+b);*/
  
  
  
  
  /**
   * 单独执行如下代码打印结果如下::
   * after defining base   说明:仅仅声明是不会初始化
   * init base  static    说明:在初始化时开始加载初始化语句(静态语句块,静态声明语句)
   * after create an object of base  
         * a =1
   * init Sub  static   说明:在父类存在的情况下,如果父类没有加载连接,那么加载连接。
    * b = 1
   *
   */
  Base base;
  System.out.println("after defining base ");
  base=new Base();
  System.out.println("after create an object of base  ");
  System.out.println("a ="+base.a);
  System.out.println(" b = "+Sub.b);
  
  
  
  
 }

}

分享到:
评论

相关推荐

    Java中类的生命周期

    在深入了解Java中类的生命周期之前,我们首先需要了解Java虚拟机(JVM)及其生命周期的概念。 **1. Java虚拟机启动** 当我们通过`java`命令运行一个Java程序时,会启动一个Java虚拟机进程。这个进程从启动到终止的...

    详解java类的生命周期.doc

    在深入讨论Java类的生命周期之前,有必要先了解Java虚拟机中的一些重要内存区域,它们在整个生命周期中扮演着至关重要的角色。 - **方法区**:这是JVM中专门用于存储已加载类的信息、常量、静态变量及方法代码的...

    Java中类的生命周期.doc

    理解类的生命周期对于深入掌握Java内存管理和程序运行机制至关重要。 #### 二、Java虚拟机及程序的生命周期 当通过`java`命令运行Java程序时,会启动一个Java虚拟机进程。这个进程从启动到终止的整个过程被称为...

    深入java虚拟机(三)——类的生命周期(下)类的初始化1

    【深入Java虚拟机(三)——类的生命周期(下)类的初始化1】 类的生命周期在Java中是一个关键的概念,它涵盖了从加载到卸载的整个过程。在类的生命周期中,初始化阶段是非常重要的,因为它涉及到类的静态变量的赋值...

    深入java虚拟机(二)——类的生命周期(上)类的加载和连接1

    了解类的生命周期对于优化Java应用性能、理解和解决类加载问题至关重要。例如,理解类加载机制可以帮助开发者避免类冲突,设计更高效的类加载策略,以及处理动态加载和热部署等问题。因此,深入理解JVM的工作原理,...

    详解java类命周期.doc

    理解Java类的生命周期对于深入掌握Java编程语言至关重要。从加载、连接到初始化、使用再到最终卸载,每个阶段都有其特定的任务和目的。通过深入了解这些阶段,开发者可以更好地管理内存资源,提高程序性能。此外,...

    深入理解java7

    第二部分是7-13章,对JVM、Java源代码和字节代码操作、类加载器、对象生命周期、多线程、并发编程、泛型、安全等Java平台的核心技术进行了深入解析,掌握这部分内容有助于深入理解Java的底层原理;第三部分为第14章...

    Java对象生命周期管理.pdf

    Java对象生命周期管理是Java开发中不可或缺的一个重要环节。在Java编程中,对象的创建、使用和销毁是由垃圾收集器自动管理的。理解这一过程对于优化应用程序性能至关重要,因为不恰当的对象管理可能导致内存泄漏,...

    Java对象的生命周期[参照].pdf

    在这个过程中,理解JVM(Java虚拟机)的角色至关重要,因为它是对象生命周期的主要管理者。 首先,让我们了解一下JVM的结构。JVM是Java虚拟机的缩写,它的主要任务是执行符合Java字节码规范的.class文件。JRE(Java...

    Servclet 生命周期

    ### Servlet 生命周期详解 #### 一、概述 ...综上所述,Servlet 的生命周期是理解 Java Web 开发的重要组成部分。通过对各个阶段的理解,开发者可以更好地控制 Servlet 的行为,从而提高应用的性能和可靠性。

    深入Java虚拟机(原书第2版).pdf【附光盘内容】

     作者以易于理解的方式深入揭示了java虚拟机的内部工作原理,深入理解这些内容,将对读者更快速地编写更高效的程序大有裨益!  本书共分20章,第1-4章解释了java虚拟机的体系结构,包括java栈、堆、方法区、执行...

    java-jvm虚拟机原理.ppt

    本篇文章将深入探讨JVM的生命周期、体系结构、类加载机制、内存区域以及垃圾收集。 首先,JVM的生命周期与Java程序紧密关联。每当运行一个Java程序时,就会创建一个JVM实例。这个实例在程序执行期间存在,直到程序...

    深入理解Java类加载.docx

    首先,类的生命周期包括加载、验证、准备、解析和初始化五个阶段。加载阶段,JVM通过全限定类名获取二进制字节流,将其转换为方法区的运行时数据结构,并创建一个代表该类的Class对象。验证阶段则确保字节流符合JVM...

    深入java虚拟机 高清pdf 高清高清高清

    书中讲解了类加载器的工作流程,包括加载、验证、准备、解析和初始化等阶段,以及双亲委托模型,有助于理解类的生命周期和类加载异常。 5. **字节码与指令集**:Java源代码经过编译后生成字节码,这些字节码在JVM...

    java虚拟机深入了解

    - 内存优化:合理设置堆大小,避免内存溢出,理解对象生命周期。 - GC优化:选择合适的垃圾收集器组合,调整GC参数以降低暂停时间。 - JIT编译器:即时编译优化热点代码,提升执行效率。 7. **JVM调优工具** ...

    java从入门到深入

    - **Servlet**:学习Servlet的生命周期,处理HTTP请求和响应。 - **JSP**:使用JSP动态生成HTML页面,理解EL和JSTL。 以上就是“Java从入门到深入”课程的主要内容,覆盖了Java语言的基础到高级特性,还包括了...

    Java中类与对象的生命周期

    Java中的类与对象的生命周期是理解Java运行机制的关键部分,涉及到类加载、连接、初始化、使用和卸载等环节。让我们深入探讨这些概念。 首先,类的生命周期始于.java源文件被编译成.class字节码文件。Java虚拟机...

    Maven的生命周期和插件

    Maven是Java开发中广泛使用的项目管理和综合工具,它通过定义一套标准的生命周期和构建过程,简化了项目的构建、依赖管理以及文档生成等工作。在Maven的世界里,理解生命周期和插件的概念是至关重要的。 ### 1. ...

Global site tag (gtag.js) - Google Analytics