1、调用顺序:
JAVA类首次装入时,会对静态成员变量或方法进行一次初始化,但方法不被调用是不会执行的,静态成员变量和静态初始化块级别相同,非静态成员变量和非静态初始化块级别相同。
先初始化父类的静态代码-->;初始化子类的静态代码-->;
(创建实例时,如果不创建实例,则后面的不执行)初始化父类的非静态代码-->;初始化父类构造函数-->;初始化子类非静态代码-->;初始化子类构造函数
2 、类只有在使用New调用创建的时候才会被JAVA类装载器装入
3、创建类实例时,首先按照父子继承关系进行初始化
4、类实例创建时候,首先初始化块部分先执行,然后是构造方法;然后从本类继承的子类的初始化块执行,最后是子类的构造方法
5、类消除时候,首先消除子类部分,再消除父类部分
1. 父类静态成员和静态初始化块 ,按在代码中出现的顺序依次执行
2. 子类静态成员和静态初始化块 ,按在代码中出现的顺序依次执行
3. 父类实例成员和实例初始化块 ,按在代码中出现的顺序依次执行
4. 父类构造方法
5. 子类实例成员和实例初始化块 ,按在代码中出现的顺序依次执行
6. 子类构造方法
注意:
只有当通过new对象实例或静态变量被访问时,静态变量才被初始化;
如:Person类,有静态变量a和b,通过Person.a的方式,变量a被初始化,但是变量b没有被出示化。
代码如下:
/**
* 父类
*
* @author 张国明 [url=mailto:guomingzhang2008@163.com]guomingzhang2008@163.com[/url]
* @version 2012-07-27 下午1:15
*/
public abstract class Father {
private static final String NAME = "父类";
// 静态成员变量和静态初始化块级别相同 所以按照在代码中的顺序依次执行
// 1、初始化父 静态成员变量 static int sage
static int sage = getNumber(50, NAME);
// 2、初始化父 静态初始化块 static
static {
System.out.println("父类 base static block");
}
//5、初始化父类的非静态代码:非静态成员变量和非静态初始化块级别相同
public int age = getNumber(100, NAME);
//6、初始化块:非静态成员变量和非静态初始化块级别相同
{
System.out.println("父类 base nonstatic block");
}
//7、初始化父类构造函数
Father() {
System.out.println("父类 构造器 base start");
System.out.println(age);
draw();// 会调用子类覆盖后的方法
System.out.println("父类 构造器 base end");
}
static int getNumber(int base, String name) {
System.out.println(name + " base.getNumber int" + base);
return base;
}
private void draw() {
System.out.println("父类 base.draw");
}
}
/**
* 子类
*
* @author 张国明 [url=mailto:guomingzhang2008@163.com]guomingzhang2008@163.com[/url]
* @version 2012-07-27 下午1:16
*/
public class Son extends Father {
private static final String NAME = " 子类";
// 静态成员变量和静态初始化块级别相同 所以按照在代码中的顺序依次执行
//3、初始化子 静态成员变量 static int sage
static int sage = getNumber(250, NAME);
//4、初始化子 静态初始化块 static
static {
System.out.println(" 子类 subclass static block");
}
//8、初始化子类的非静态代码:非静态成员变量和非静态初始化块级别相同
public int age = getNumber(1001, NAME);
//9、初始化子类的非静态代码:非静态成员变量和非静态初始化块级别相同
private int _radius = getNumber(10, NAME);
//10、初始化块:非静态成员变量和非静态初始化块级别相同
{
System.out.println(" 子类 subclass nonstatic block");
}
//11、初始化子类构造函数
Son(int radius) {
System.out.println(" 子类 构造器 base start");
_radius = radius;
draw();
System.out.println(age);
System.out.println(" 子类 initializeOrder initialized");
System.out.println(" 子类 构造器 base end");
}
private void draw() {
System.out.println(" 子类 initializeOrder.draw " + _radius);
}
/**
* @param args args
*/
public static void main(String[] args) {
new Son(1000);
}
}
分享到:
相关推荐
Java类的执行顺序是编程过程中一个非常重要的概念,特别是在深入理解和优化代码性能时。本文将详细探讨Java类的加载、初始化、执行等步骤,并通过实例分析阿里面试中可能涉及的相关问题,结合流程图帮助理解这一过程...
本文将详细解析Java类的基本运行顺序,包括加载、初始化、执行等阶段,以及相关工具的运用。 首先,我们从类的生命周期开始。一个Java类的生命周期可以分为以下几个阶段: 1. **加载(Loading)**:当Java虚拟机...
在这个"Java类的基本运行顺序"教程中,我们将深入探讨这个过程,了解一个Java类从加载到卸载的每一步。 1. **加载(Loading)**:当Java虚拟机(JVM)遇到一个新的类时,它首先会通过类加载器将类的.class文件读入...
### Java类执行顺序详解 Java类的执行顺序是理解Java程序行为的关键,它涉及类的加载、初始化以及构造过程中的各种细节。以下是对类执行顺序的深入解析,基于标题“类执行顺序小结”和描述“关于Java类的执行顺序...
了解Java虚拟机类加载顺序对于深入理解Java程序的运行机制至关重要。通过掌握不同类加载器的功能和职责,开发者可以更好地管理应用程序的依赖关系,处理类加载相关的异常,并优化程序性能。希望本文能够帮助您更好地...
在深入探讨Java类的完整构造执行顺序之前,我们先来明确一下Java中构造函数与类初始化的基本概念。构造函数在创建对象时被调用,用于初始化该对象的状态。而类初始化则是指在类首次被使用时,JVM执行的一系列初始化...
当我们谈论“Java类继承初始化顺序”时,涉及到的关键知识点包括构造器、成员变量的初始化、super关键字以及方法的覆盖。 首先,了解类初始化的顺序至关重要。当创建一个子类实例时,初始化过程遵循以下步骤: 1. ...
标题中的“java简单方法顺序调用注解”是指使用注解来控制类中方法的执行顺序。这在某些场景下非常有用,比如初始化逻辑、测试脚本或者需要特定顺序执行的任务。下面我们将深入探讨如何实现这一功能。 首先,我们...
类--初始化块"); 39. } 40. // 构造器 41. public SubClass() { 42. System.out.println("子类--构造器"); 43. } 44. 45. public static void main(String[]...因此,掌握类的初始化顺序是每个Java开发者必备的知识点。
在Java编程语言中,按顺序创建文件涉及到一系列的文件操作步骤。主要使用到的类是`java.io`包中的`File`和`BufferedWriter`。`File`类用于处理文件路径,创建、删除文件等操作,而`BufferedWriter`则用于向文件中...
java教程 由浅入深详解Java 类的实例化顺序 在子类对象被实例化的过程中,变量、构造方法以及代码块三者的先后顺序为: 1. 父类的静态变量和静态代码块,按代码先后顺序执行 2. 子类的静态变量和静态代码块,按...
在JAVA编程语言中,程序的执行顺序是程序员需要掌握的关键概念之一,因为它直接影响到程序的行为。以下是关于JAVA程序执行顺序的详细解释: 1. **静态块**: 静态块是在类加载时执行的,它不依赖于类的实例。在...
在Java编程语言中,程序初始化的顺序是一个关键概念,它涉及到类加载、对象创建以及执行流程的安排。了解这些顺序对于编写高效、无错误的代码至关重要。以下是对Java程序初始化顺序的详细说明: 1. **类加载阶段**...
2. **只执行一次**:每个类的静态块在整个程序运行期间只执行一次。 3. **按出现顺序执行**:如果一个类中有多个静态块,它们将按照在源代码中出现的顺序依次执行。 ### 静态方法与静态块的区别与联系 虽然静态...
在Java编程语言中,顺序结构是最基础的程序控制结构之一,它按照代码的书写顺序逐行执行。在“Java学习~求三角形面积的顺序结构”这个主题中,我们将深入探讨如何利用Java来计算三角形的面积,并了解相关概念。 ...
Java 类集(Collections)是Java编程语言中一个重要的组成部分,它包含了各种数据结构,如列表、集合、映射等,以及对这些数据结构进行操作的工具类。在本压缩包中,你将找到一系列关于Java类集应用的源码实例,这些...
Java 类加载器是Java虚拟机(JVM)的核心组成部分,它负责将类的字节码加载到内存中并转换为可执行的Java类。类加载器的作用不仅仅是加载类,还包括确保类的唯一性,避免重复加载,并且遵循特定的加载顺序。以下是对...
但是,如果Java文件中没有public类,那么系统无法自动添加main方法,JVM找不到入口点,运行会报错。 Java文件执行顺序是按照下面的顺序执行的: 1. JVM寻找入口点,也就是main方法。 2. JVM执行main方法,开始执行...