java类通过装载,连接,解析使一个类型可以被使用,如果遇到以下六种情况,就将开始类的初始化
1。创建一个类的实例
2。使用一个类中的静态方法
3。使用一个类中的静态变量或者给变量赋值
4。使用一个类的子类
5。调用某些反射方法
6。由该类的main方法启动的类
注意,使用一个类中的static final变量不会导致类的初始化,而使用类中的任何方法都需要类的初始化。
如果类声明了静态变量或者有静态块,并且试图为他们赋值,编译器就将为这个类产生一个<clinit>方法,该方法将类中所有的类初始化语句按照代码顺序收集到一起。对于类型来说,如果有超类,java虚拟机将总是先调用其超类的<clinit>,而对于接口,直接执行本类的<clinit>方法。
类的初始化完成后,可以访问类字段,类方法,也可以创建类的实例,而实例也有个初始化过程。
通过clone或者反序列化实例化的对象将不会执行实例初始化方法。
编译器把该类的所有成员变量初始化按照代码顺序收集到一起,包括实例变量和块代码,然后在后面加上该类对应的构造函数,如果该类的构造函数不是以this开头,则在最前面加上父类的<init>,这样生成一个本类的<init>方法。虚拟机通过执行class文件里的这个方法来完成实例的初始化。
小例:
public class Singlen {
private static Singlen obj = new Singlen();
public static int count1;
public static int count2 = 0;
private Singlen() {
count1++;
count2++;
}
public static Singlen getInstence() {
return obj;
}
}
public class D {
public static void main(String[] args){
Singlen s=Singlen.getInstence();
//Singlen s = new Singlen();
System.out.println("count1=="+s.count1);
System.out.println("count2=="+s.count2);
}
}
输出:
1
0
分享到:
相关推荐
在本文中,我们将对 Java 数组初始化进行详细的介绍,包括一维数组和二维数组的声明、初始化和使用。 一维数组的初始化 在 Java 中,一维数组可以通过多种方式进行初始化。 1. 声明数组变量:`int[] a;`,这只...
当我们谈论“Java类继承初始化顺序”时,涉及到的关键知识点包括构造器、成员变量的初始化、super关键字以及方法的覆盖。 首先,了解类初始化的顺序至关重要。当创建一个子类实例时,初始化过程遵循以下步骤: 1. ...
在Java编程语言中,类和对象的初始化是一个关键的概念,对于理解和编写健壮的程序至关重要。这个"java代码的初始化顺序demo"显然旨在演示这一过程。让我们深入探讨Java中的初始化顺序及其背后的机制。 1. **类加载...
### Java中类的初始化顺序详解 #### 一、概述 在Java编程语言中,类的初始化是一个非常重要的概念。类的初始化涉及到多个方面,包括静态成员变量、实例成员变量、静态初始化块、实例初始化块以及构造函数等。本文...
类--初始化块"); 39. } 40. // 构造器 41. public SubClass() { 42. System.out.println("子类--构造器"); 43. } 44. 45. public static void main(String[]...因此,掌握类的初始化顺序是每个Java开发者必备的知识点。
详细讲解java类中静态变量,普通标量,对象、基本类型的初始化顺序。
在Java编程语言中,初始化块是程序执行时用于初始化对象或类的重要机制。这里我们将深入探讨两种类型的初始化块:静态初始化块(Static Initializer Block)和对象初始化块(Instance Initializer Block)。这两种...
45.java数组动态初始化.zip45.java数组动态初始化.zip45.java数组动态初始化.zip45.java数组动态初始化.zip45.java数组动态初始化.zip45.java数组动态初始化.zip45.java数组动态初始化.zip45.java数组动态初始化.zip...
44.java数组静态初始化.zip44.java数组静态初始化.zip44.java数组静态初始化.zip44.java数组静态初始化.zip44.java数组静态初始化.zip44.java数组静态初始化.zip44.java数组静态初始化.zip44.java数组静态初始化.zip...
在Java编程语言中,程序初始化的顺序是一个关键概念,它涉及到类加载、对象创建以及执行流程的安排。了解这些顺序对于编写高效、无错误的代码至关重要。以下是对Java程序初始化顺序的详细说明: 1. **类加载阶段**...
Java初始化与方法是Java编程语言中的核心概念,它们在程序执行过程中起着至关重要的作用。本文将深入探讨Java中的初始化过程、方法的定义与调用,以及与之相关的源码和工具应用。 首先,让我们从类的初始化开始。在...
【深入Java虚拟机(三)——类的生命周期(下)类的初始化1】 类的生命周期在Java中是一个关键的概念,它涵盖了从加载到卸载的整个过程。在类的生命周期中,初始化阶段是非常重要的,因为它涉及到类的静态变量的赋值...
Java 变量初始化的时机可以分为两类:实例变量初始化和类变量初始化。 实例变量初始化 实例变量初始化可以在三个地方进行: 1. 定义实例变量的时候指定初始值; 2. 非静态初始化代码块中对实例变量指定初值; 3. ...
本文将详细介绍6种初始化Java List集合的方法,并通过代码示例帮助理解每种方法的使用和特点。 1. 常规方式 这是最常见的初始化List的方式,通过创建ArrayList实例并逐个添加元素。自JDK 7以后,可以省略泛型类型的...
总结起来,Java初始化块是Java中用于对象和类初始化的重要工具,它们在不同场景下提供了一种灵活的方式来控制对象和类的状态。理解初始化块的工作原理对于编写高效且无错误的Java代码至关重要。在编写代码时,应谨慎...
默认初始化是指数组是引用类型,它的元素相当于类的成员变量,因此数组分配空间后,每个元素也被按照成员变量的规则被隐士初始化。例如,`int[] s; s = new int[5];`创建了一个名为`s`的整型数组,数组长度为5。然后...
理解ClassLoader的工作机制以及类变量初始化的顺序对于深入理解Java运行时环境至关重要。这篇博文将探讨这两个主题。 首先,让我们深入了解Java的ClassLoader。ClassLoader是一个抽象类,它是Java中的一个关键组件...
在 Java 中,静态变量的初始化顺序是按照它们在类中的定义顺序进行的。如果一个静态变量依赖于另一个静态变量的值,那么这两个变量的初始化顺序是重要的。 在给定的代码中,我们可以看到有多个静态变量的声明和初始...