搜索
简帛阁>技术文章>Java代码执行顺序

Java代码执行顺序

在运行一个Java程序时,分为类加载过程和实例化过程,即static修饰的代码块、属性、声明为类加载,类的普通属性、代码块、构造器为实例化过程。其中类加载的代码属于整个类,只执行一次;而实例化过程中的代码属于实例化对象的,每次实例化过程都执行。

执行顺序类加载先于实例化执行,执行过程自上而下按顺序执行。如果父类有类加载代码,先按前面的规则执行父类的类加载代码,执行完后再执行自己的类加载代码。如果类加载过程中实例化了对象,则暂停类加载过程,执行实例化代码,实例化完成后继续执行未执行完的类加载代码。

当类加载代码执行完后,执行实例化代码,实例化过程中不能执行类加载过程。实例化变量先自上而下按顺序执行普通代码块、属性,最后执行构造器,如果有父类就先按前面的规则执行父类的。

当执行完类加载和实例化代码后,再去执行main方法里的内容。

以下为验证代码:`

class="prettyprint">public class MyTest extends Test{
    public static int x = count("静态");
    static {
        System.out.println("静态代码块1");
    }
    public static MyTest test1 = new MyTest("test1");
    public static MyTest test2 = new MyTest("test2");
    public static int n = count("非静态");
    public int a = count("");
    {
        System.out.println("普通代码块1");
    }
    static {
        System.out.println("静态代码块2");
    }
    public static int count(String string){
        System.out.println("赋值"+string+"变量");
        return 0;
    }
    public MyTest(String string){
        System.out.println("构造器实例化"+string);
    }
    {
        System.out.println("普通代码块2");
    }
    public static void main(String[] args) {
        MyTest test3 = new MyTest("Mian");
    }
}
class Test {
    {
        System.out.println("父类普通代码块");
    }
}

运行结果
这里写图片描述

new一个对象时:静态代码块普通代码块构造方法普通方法publicclassMain{publicstaticvoidmain(String[]args){AppleapplenewApple();
在运行一个Java程序时,分为类加载过程和实例化过程,即static修饰的代码块、属性、声明为类加载,类的普通属性、代码块、构造器为实例化过程。其中类加载的代码属于整个类,只执行一次;而实例化过程中的
classcode{publiccode(){Systemoutprintln("hello");}}publicclassTest{static{Systemoutprintln("静态代码块");
java类中代码执行顺序首先,没有学java或者不知道类继承的,可以不用浪费时间乐,直接左上角,看多了有害。java代码执行顺序是自上而下,从左到右,方法是以main方法为主方法(通常情况下,事实
原来自己一直都没弄明白Java程序的执行顺序问题,今天,自己写了个测试,果然与自己考虑的有差距测试代码:一个父类Animal一个子类Dog测试类Test运行结果:所以执行顺序是:父类Animal静态代
一般情况下,如果有些代码必须在项目启动的时候就执行,需要使用静态代码块。这种代码是主动执行的,需要在项目启动的时候就初始化。有些代码是在不创建对象的情况下,由其他程序来调用,需要使用静态方法。这种代码
只要了解过多线程,我们就知道线程开始的顺序执行顺序是不一样的。如果只是创建三个线程然后执行,最后的执行顺序是不可预期的。这是因为在创建完线程之后,线程执行的开始时间取决于CPU何时分配时间片,线程
言今天在看AndroidContentProvider实现的时候,突然想到了Java类在new的过程中,静态域、静态块、非静态域、非静态块、构造函数的执行顺序问题。其实这是一个很经典的问题,非常考察
坑死我了,原来@Before会执行多次。通过函数名可以实现顺序执行执行顺序和函数的位置无关。importorgjunitBefore;importorgjunitBeforeClass;impor
如下所示:classB{publicB(){super();Systemoutprintln("构造器B");}{Systemoutprintln("普通的代码块B");}static{Systemo