java静态代码块真的会优先执行吗

public class B
{
    public static B t1 = new B();
    public static B t2 = new B();
    {
        System.out.println("构造块");
    }
    static
    {
        System.out.println("静态块");
    }
    public static void main(String[] args)
    {
        B t = new B();
    }
}

正确答案   构造块 构造块 静态块 构造块

静态块:用static申明,JVM加载类时执行,仅执行一次

构造块:类中直接用{}定义,每一次创建对象时执行

执行顺序优先级:静态块>main()>构造块>构造方法

静态块按照申明顺序执行,所以先执行publicstaticB t1 = newB();该语句创建对象,则又会调用构造块,输出构造块

接着执行public static B t1 = new B();输出构造块

再执行

static

{

System.out.println("静态块");

}输出静态块

最后main方法执行,创建对象,输出构造块。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-29 08:35:04

java静态代码块真的会优先执行吗的相关文章

JAVA静态代码块的作用及执行顺序

一般情况下,如果有些代码必须在项目启动的时候就执行,需要使用静态代码块.这种代码是主动执行的,需要在项目启动的时候就初始化. 有些代码是在不创建对象的情况下,由其他程序来调用,需要使用静态方法.这种代码是被动执行的. 静态方法在类加载的时候就已经加载,可以用类名直接调用 比如main方法就必须是静态的 这是程序入口 两者的区别就是:静态代码块是自动执行的,而静态方法是被调用的时候才执行的. 区别很简单:静态代码块,在虚拟机加载类的时候就会加载执行,而且只执行一次:非静态代码块,在创建对象的时候(

Java静态代码块、构造代码块、构造方法的执行顺序

Java静态代码块.构造代码块.构造方法的执行顺序 静态代码优先于非静态的代码,是因为被static修饰的成员都是类成员,会随着JVM加载类的时候加载而执行,而没有被static修饰的成员也被称为实例成员,需要创建对象才会随之加载到堆内存.所以静态的会优先非静态的. 执行构造器(构造方法)的时候,在执行方法体之前存在隐式三步: 1,super语句,可能出现以下三种情况: 1)构造方法体的第一行是this语句,则不会执行隐式三步, 2)构造方法体的第一行是super语句,则调用相应的父类的构造方法

Java静态代码块、代码块及构造函数执行顺序

根据以下程序进行分析 定义一个父类 package sas.LearnJava; public class ExcuteOrderTest { { System.out.println("我是在父类开始的普通代码块!"); } public ExcuteOrderTest() { System.out.println("我是父类的无参构造函数!"); } public void showSomething() { System.out.println("我

静态代码块和构造器的执行顺序

这段时间在学习ContentProvider,还是不太明白ContentProvider中数据库是什么时候创建的.经过自己测试,实际上是用户真正插入数据的时候生成的数据库.具体代码见下一篇关于ContentProvider中的数据生成时机的随笔. 现在就说下静态代码块和构造器的执行顺序.实例化一个类A的时候(这里用的是new的方式进行实例化),如果A中有static{},即静态代码块,那么肯定先执行代码块里的代码.然后执行非静态代码块,最后才真正执行构造器里的代码. 实例化一个类A的时候的执行顺

静态代码块、非静态代码块、构造方法的执行顺序

java中经常有一些静态块,这是用来在生成类之前进行的初始化,无论java还C++语言中的static,都是最先初始化好的.结构如下: static { 静态语句代码块 } { 非静态语句代码块 } 异同点 相同点:都是在JVM加载类时且在构造方法执行之前执行,在类中都可以定义多个,一般在代码块中对一些static变量进行赋     值. 不同点:静态代码块在非静态代码块之前执行(静态代码块-->非静态代码块-->构造方法).     静态代码块只在第一次new执行一次,之后不在执行,而非静态

Java子父类间静态代码块、非静态代码块、构造方法的执行顺序

子类A继承父类B,A a=new A(); 正确的执行顺序是:父类B静态代码块->子类A静态代码块->父类B非静态代码块->父类B构造函数->子类A非静态代码块->子类A构造函数 也就是说非静态初始化块的执行顺序要在构造函数之前. class FatherStaticTest { static { System.out.println("执行父类的静态代码块."); } FatherStaticTest() { System.out.println(&qu

java基础--java静态代码块和静态方法的区别、static用法

转载自: http://blog.sina.com.cn/s/blog_afddb8ff0101aqs9.html 静态代码块:有些代码必须在项目启动的时候就执行,这种代码是主动执行的(当类被载入时,静态代码块被执行,且只被执行一次,静态块常用来执行类属性的初始化) 静态方法:需要在项目启动的时候就初始化,在不创建对象的情况下,这种代码是被动执行的(静态方法在类加载的时候 就已经加载 可以用类名直接调用) 两者的区别就是:静态代码块是自动执行的; 静态方法是被调用的时候才执行的. 使用类的静态方

Java静态代码块,扫盲贴

一个类可以使用不包含在任何方法体中的静态代码块.当类被载入时,静态代码块被执行,且只执行一次.导致类被载入的操作包括:使用任何类的静态属性或方法,新建类的对象(声明类的对象不会导致静态代码块被执行).静态代码块经常用来进行类属性的初始化.请看下面的测试: class Person { public Person() { System.out.println("1.public Person()"); } static { System.out.println("2.Perso

静态代码块(主要是注意执行顺序)

静态代码块在类最初被使用的时候执行一次,在构造函数执行之前执行,而且只执行一次. 只要用到类,哪怕没有new只是声明变量也会被执行但是只执行一次. (静态字段和静态代码块都是在类最初使用的时候执行一次) 1 public class MyJingTaiDaimaKuai 2 { 3 public static int i = test1();//1.最开始执行 4 public int age = test2();//new的时候先执行成员变量的初始化,再执行构造函数 5 6 static My