//JAVA初始化分两大步
//A、类的加载
//
// 先加载父类,在加载子类
//
// 加载父类后,完成静态动作【静态变量、静态代码块(主动执行仅一次)】(按代码顺序)、【静态方法(被动执行)】
//
// 加载子类后,完成静态动作【静态变量、静态代码块(主动执行仅一次)】(按代码顺序)、【静态方法(被动执行)】
//
//B、类的实例化
//
// 先实例化父类,在实例化子类
//
// 实例化父类,完成实例化【成员变量、初始化块】(按代码顺序)、【父类构造方法】、【成员方法(被动执行)】
//
// 实例化子类,完成实例化【成员变量、初始化块】(按代码顺序)、【子类构造方法】、【成员方法(被动执行)】
//注:类装载步骤(详解A步骤)
// 在Java中,类装载器把一个类装入Java虚拟机中,要经过三个步骤来完成:装载、链接和初始化,其中链接又可以分成校验、准备和解析三步,除了解析外,其它步骤是严格按照顺序完成的,各个步骤的主要工作如下:
//装载:查找和导入类或接口的二进制数据;
//链接:执行下面的校验、准备和解析步骤,其中解析步骤是可以选择的;
//校验:检查导入类或接口的二进制数据的正确性;
//准备:给类的静态变量分配并初始化存储空间;
//解析:将符号引用转成直接引用;
//初始化:激活类的静态变量的初始化Java代码和静态Java代码块。
//初始化类中属性是静态代码块的常用用途,但只能使用一次。
package cn.ilex;
public class InitClass2 extends Parent2 {
// 初始化块
{
new PrintStr2("子类--初始化块");
}
// 静态变量
public static PrintStr2 a=new PrintStr2("子类--静态变量");
// 变量
public PrintStr2 b=new PrintStr2("子类--实例变量");
// 静态初始化块
static {
new PrintStr2("子类--静态初始化块(主动执行)");
}
// 构造器
public InitClass2() {
new PrintStr2("子类--构造器");
}
public void callParentStaticMethod(){
Parent2.printString(this.getClass().getName()+"callParentStaticMethod()方法 ");
}
// 程序入口
public static void main(String[] args) {
Parent2.printString(" InitClass类 main() 方法");
new PrintStr2("子类--进入程序入口 (静态方法) InitClass main()");
new PrintStr2("子类--开始实例化 new InitClass()");
new InitClass2().callParentStaticMethod();
}
}
class Parent2 {
// 静态初始化块
static {
new PrintStr2("父类--静态初始化块(主动执行)");
}
public static String str="父类--静态方法被调用前加载完成的静态变量";
// 静态变量
public static PrintStr2 c=new PrintStr2("父类--静态变量");
// 变量
public PrintStr2 d=new PrintStr2("父类--实例变量");
// 初始化块
{
new PrintStr2("父类--初始化块");
}
// 构造器
public Parent2() {
new PrintStr2("父类--构造器");
}
public static void printString(String s){
new PrintStr2("父类--静态方法(被"+s+"调用执行)." );
new PrintStr2( "父类--静态方法调用自己的静态变量:str="+Parent2.str );
}
}
class PrintStr2{
private static int i=0;
static {
Parent2.printString("PrintStr2 类静态块");
}
public static int getCount(){
return i++;
}
public PrintStr2(String s){
System.out.println(PrintStr2.getCount()+"."+s);
}
public String toString(){
return " PrintStr2 类型的";
}
}
分享到:
相关推荐
Java 初始化顺序详解 在 Java 中,变量可以分为两类:类变量(静态变量)和实例变量(对象变量)。类变量是使用 static 关键字修饰的变量,它们属于类,而不是对象。实例变量则是没有使用 static 关键字修饰的变量...
作为一名程序员必须知道Java初始化顺序......
以下是对Java程序初始化顺序的详细说明: 1. **类加载阶段**: - **加载**:当Java虚拟机(JVM)首次遇到一个类的引用时,会通过类加载器进行加载。加载过程包括找到类的.class文件,读取其字节码,并转化为内存中...
在Java中,初始化顺序则有所不同: 1. 基本类型的静态字段和引用类型的静态字段(如果它们是常量,即final且已初始化):这些字段在类加载时按声明顺序初始化。 2. 静态初始化块:当类第一次被加载时执行,按块的...
这个"java代码的初始化顺序demo"显然旨在演示这一过程。让我们深入探讨Java中的初始化顺序及其背后的机制。 1. **类加载阶段**: 在Java程序运行时,JVM会先加载类的字节码文件(.class文件)。这个过程包括加载、...
类--初始化块"); 39. } 40. // 构造器 41. public SubClass() { 42. System.out.println("子类--构造器"); 43. } 44. 45. public static void main(String[]...因此,掌握类的初始化顺序是每个Java开发者必备的知识点。
在 Spring 框架中,控制多个 bean 的初始化顺序是一个常见的问题。本篇文章将详细介绍如何控制 2 个 bean 的初始化顺序,提供了多种实现方式,并分析了每种方式的优缺。 问题场景 在实际开发中,我们经常会遇到...
当我们谈论“Java类继承初始化顺序”时,涉及到的关键知识点包括构造器、成员变量的初始化、super关键字以及方法的覆盖。 首先,了解类初始化的顺序至关重要。当创建一个子类实例时,初始化过程遵循以下步骤: 1. ...
总结起来,Java初始化块是Java中用于对象和类初始化的重要工具,它们在不同场景下提供了一种灵活的方式来控制对象和类的状态。理解初始化块的工作原理对于编写高效且无错误的Java代码至关重要。在编写代码时,应谨慎...
### Java中类的初始化顺序详解 #### 一、概述 在Java编程语言中,类的初始化是一个非常重要的概念。类的初始化涉及到多个方面,包括静态成员变量、实例成员变量、静态初始化块、实例初始化块以及构造函数等。本文...
详细讲解java类中静态变量,普通标量,对象、基本类型的初始化顺序。
静态初始化块和对象初始化块的执行顺序不同。静态初始化块在类加载时执行,而对象初始化块在创建新对象时执行。它们可以相互配合,以实现更复杂的初始化逻辑。例如,静态初始化块可以用来设置全局配置,而对象初始化...
本文详细介绍了类继承中的初始化顺序问题,包括初始化的基本概念、初始化过程中的关键步骤以及如何正确处理基类和子类之间的构造函数调用。理解这些概念对于编写高效、可维护的面向对象程序至关重要。希望通过对这些...
Java 对象初始化顺序是指在 Java 程序中,对象的初始化过程中发生的顺序问题。这是 Java 编程语言的基础知识点之一,但是许多学生在学习和使用时总是感到困惑和困难。 二、JVM 执行过程中的“礼让”原则 JVM 在...
总之,深入理解Java的ClassLoader机制和类变量初始化顺序是提升Java编程技能的重要步骤。通过学习这些知识点,开发者可以更好地优化代码、设计更健壮的系统,并解决与类加载和初始化相关的复杂问题。
### Java 类中静态域、块,非静态域、块,构造函数的初始化顺序 #### 一、概述 在 Java 编程语言中,类的初始化顺序对于理解程序的行为至关重要。特别是当涉及到静态域(静态变量)、非静态域(实例变量)、静态块...
Java 变量初始化详解 Java 变量初始化是 Java 语言的基础知识点之一,但也往往被学习者所忽略。 Java 变量初始化的时机是指在 Java 语言中变量的初始化过程,包括变量的声明、初始化和赋值的步骤。 Java 变量声明 ...
在Java中,类的初始化顺序是面试中的经典问题之一,它涉及到继承、静态成员以及实例成员等多个方面。正确理解类的初始化顺序对于编写正确、高效的代码至关重要。 首先,需要了解Java类初始化的基本规则,即在类的...
Java初始化和清理是Java语言中非常重要的两个过程,它们确保了Java程序的正确运行和资源的有效管理。Java的初始化包括类的加载、连接和初始化三个过程,而清理则主要指垃圾回收机制。 首先,Java初始化的主要特性...