美文网首页程序员
Java程序执行顺序

Java程序执行顺序

作者: ThunderWho | 来源:发表于2018-12-24 16:49 被阅读0次

执行顺序大致分类:

  1. 静态属性,静态方法声明,静态块。
  2. 动态属性,普通方法声明,构造块。
  3. 构造方法。

详细介绍:

  1. 类中所有属性的默认值(一举而成)
  2. 父类静态属性初始化,静态块,静态方法的声明(按出现顺序执行)
  3. 子类静态属性初始化,静态块,静态方法的声明 (按出现顺序执行)
  4. 调用父类的构造方法,
    首先父类的非静态成员初始化,构造块,普通方法的声明(按出现顺序执行) 然后父类构造方法
  5. 调用子类的构造方法,
    首先子类的非静态成员初始化,构造块,普通方法的声明(按出现顺序执行) 然后子类构造方法

1-3:类加载过程,不涉及构造方法
1-5:实例化过程,涉及构造方法

注意:

  • 类属性(静态属性)只初始化一次,且是在类第一次被加载的时候。
  • 类加载过程中,可能调用了实例化过程(因为static可以修饰方法,属性,代码块,内部类),此时则会暂停类加载过程而先执行实例化过程(被打断),执行结束再进行类加载过程,例如下面阿里面试题(典型的暂停类加载)。

正常的加载过程:

class A {
    public A() {
        System.out.println("A的构造方法");
    }

    public static int j = print();

    public static int print() {
        System.out.println("A print");
        return 521;
    }
}

public class Text extends A {
    public Text() {
        System.out.println("Test1的构造方法");
    }

    public static int k = print();

    public static int print() {
        System.out.println("Test print");
        return 522;
    }

    public static void main(String[] args) {
        System.out.println("main start");
        Text t1 = new Text();
        A.print();
    }
}
运行结果:
A print
Test print
main start
A的构造方法
Test1的构造方法
A print

加载被打断(阿里面试题):

public class Text {
    public static int k = 0;
    public static Text t1 = new Text("t1");
    public static Text t2 = new Text("t2");
    public static int i = print("i");
    public static int n = 99;
    public int j = print("j");

    {
        print("构造块");
    }
    static {
        print("静态块");
    }

    public Text(String str) {
        System.out.println((++k) + ":" + str + "   i=" + i + "    n=" + n);
        ++i;
        ++n;
    }

    public static int print(String str) {
        System.out.println((++k) + ":" + str + "   i=" + i + "    n=" + n);
        ++n;
        return ++i;
    }

    public static void main(String [] args) {
        Text t = new Text("init");
    }
}
运行结果:
1:j   i=0    n=0
2:构造块   i=1    n=1
3:t1   i=2    n=2
4:j   i=3    n=3
5:构造块   i=4    n=4
6:t2   i=5    n=5
7:i   i=6    n=6
8:静态块   i=7    n=99
9:j   i=8    n=100
10:构造块   i=9    n=101
11:init   i=10    n=102

相关文章

  • java程序执行顺序

    Java 类中代码的执行顺序深入了解Java程序执行顺序 单个类: static变量—>Static代码块—> m...

  • Java程序执行顺序

    执行顺序大致分类: 静态属性,静态方法声明,静态块。 动态属性,普通方法声明,构造块。 构造方法。 详细介绍: 类...

  • Java Script 程序结构(顺序、分支、循环)

    Java Script 程序结构有三种:(顺序结构、分支结构、循环结构) 一、顺序结构:从上到下执行代码,程序默认...

  • 前程科技:JavaSE系列课程之Java程序结构

    Java程序结构 1、顺序结构 按照代码编写顺序,自上而下、逐行执行 2、选择结构 有条件的执行代码,所写的代码在...

  • 第二章 进程的描述与控制

    第二章 进程的描述与控制 前趋图和程序执行 程序的顺序执行 单道程序设计 -> 程序的顺序执行 在程序顺序执行时,...

  • JAVA 线程

    【JAVA 线程】 线程 进程:是一个正在执行中的程序。每一个进程执行都有一个执行顺序。该顺序是一个执行路径,或者...

  • 【操作系统】2.1 进程控制

    1.程序的并发 1.1 顺序执行和并发执行 程序有两种执行方式:① 顺序执行 ② 并发执行 顺序执行:一个独立功能...

  • 进程的描述和控制

    前驱图和程序执行 程序顺序执行时的特征 (1)顺序性:按顺序执行 (2)封闭性:不受其他 程序影响 (3)可再现性...

  • 流程控制语句

    条件语句 Java代码块中,程序默认是顺序结构,想要更改执行顺序,可以用条件语句 if条件语句 语法: if条件语...

  • JAVA中的流程控制 if switch

    在JAVA程序中,代码执行顺序是由上往下依次执行的,有三种方法可以改变代码的执行顺序1.方法的调用2.选择语句3....

网友评论

    本文标题:Java程序执行顺序

    本文链接:https://www.haomeiwen.com/subject/neswkqtx.html