面试趣闻之java 代码块 静态代码块 构造方法 执行顺序

初级程序员总会遇到这样的问题,代码块 静态代码块 构造方法 执行顺序

父类

public class ClassSup {
public ClassSup(){
System.out.println("父类构造器");
}
static {
System.out.println("父类静态代码块");
}
{
System.out.println("父类代码块");
}
public void mathod01(){
System.out.println("父类方法");
}
}

子类

public class ClassSon extends ClassSup{
public ClassSon(){
System.out.println("子构造器");
}
static{
System.out.println("子静态代码块");
}
{
System.out.println("代码块");
}
@Override
public void mathod01() {
System.out.println("子类方法");
}
}

public static void main(String[] args) {
ClassSon cs = new ClassSon();

}

执行结果:

父类静态代码块
子静态代码块
父类代码块
父类构造器
代码块
子构造器

总结:静态代码块优先级最好(只执行一次),父类优先于子类加载

   代码块优先于构造方法 也是先执行父类在执行子类

时间: 2024-12-04 12:57:02

面试趣闻之java 代码块 静态代码块 构造方法 执行顺序的相关文章

java代码块,静态代码块,静态变量,构造方法执行顺序

一个类中执行顺序: 静态变量静态代码块代码块构造方法 子类和父类执行顺序: 父类静态变量父类静态代码块子类静态变量子类静态代码块父类代码块父类构造方法子类代码块子类构造方法 直接看代码,一目了然. public class Test { public static void main(String[] args) { new A(); /* 结果: * A静态变量 A静态代码块 A代码块 A构造方法 * */ new B(); /* * 结果: * A静态变量 A静态代码块 B静态变量 B静态代

java中类的静态代码块、构造代码块、构造方法、静态成员的初始化顺序详解

一.描述 java中类的静态代码块.构造代码块.构造方法.静态成员的初始化顺序: 首先,在类加载时,为类中的静态成员变量分配内存空间,并为其赋予默认值(整数型为0,浮点型为0.0,布尔型为false,字符型为'\u0000',引用型为null): 其次,执行静态成员变量的显式初始化操作.静态成员的初始化方法有两种,其一为在声明的时候直接初始化,其二为使用静态代码块进行初始化, 这两种初始化方式会按照在类中的出现顺序来执行,而且只在类加载的时候执行一次. 再次,如果创建了类的对象,便会在堆中为类的

Java之static静态代码块

Java之static静态代码块 构造代码块 使用{}包裹的代码区域,这里的代码区域特指位于class{}下面的而不是存在于其他type method(){}这类函数下面的代码区域 public class HelloA { /** ... */ { System.out.println("I'm A construct code block"); } } 构造函数代码块 构造函数代码块指的是构造函数中所包含的代码,类似className(){}中的代码块 public class H

java中的静态代码块,构造代码块,构造函数,普通代码块

java中的静态代码块,构造代码块,构造函数,普通代码块 静态代码块: 格式: public class Test1{ static{ System.out.println("这是一个静态代码块");  } } 说明: 1.静态代码块在类加载时也就是项目启动时运行并且只运行一次相当于main函数,有多个静态代码块从上往下依次执行,他是一种主动运行的机制. 2.静态代码块不能存在于任何方法中 构造代码块 格式: public class Test2{ { System.out.print

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

构造块:直接写在类中的代码块 静态代码垮:使用static关键字声明的代码块 静态代码块先于构造块,构造方法执行,而且只在类加载时候执行一次,后面在类实例化的时候会先执行构造块,而且每 执行实例化一个对象,就会执行一次构造块,执行完构造块会执行构造方法. public class ConstructorCodeTest { public static void main(String[] args) { Demo d1=new Demo(); Demo d2=new Demo(); Demo d

2.24 Java基础总结 ①访问权限②static③静态方法④实例初始化块⑤静态初始化块

①访问权限②static③静态方法④实例初始化块⑤静态初始化块一.访问权限 默认是同包protected是有关系的,即同包和不同包的子类private只有本类,public全部   本类   同包 不同包       子类 非子类 子类 非子类 private √         默认(同包) √ √ √     protected √ √ √ √   public √ √ √ √ √ 二.static静态成员变量,类级别,全类共享一个Person.country = "中国":一般用

java面试基础题------》Java 中的父子类静态代码块,代码块,构造方法执行顺序

4.指出下面程序的运行结果. class A { static { System.out.print("1"); } public A() { System.out.print("2"); } } class B extends A{ static { System.out.print("a"); } public B() { System.out.print("b"); } } public class Hello { pu

Java 代码块,普通代码块,构造代码块,静态代码块

学习Java中… 刚刚学到了Java的代码块,虽然很简单 还是记下吧! 左音 2016-03-16 ----------------- // 执行优先级:静态代码块 > mian方法 > 构造代码块 > 构造方法 // 静态代码块不论是否实例化都会执行一次,不会重复执行 // 构造代码块实例化时执行 1.普通代码块 // 普通代码块在方法或语句中 1 public class CodeBlock { 2 3 public static void main (String[] args)

Java中的静态代码块和构造代码块

最近一在回顾Java中的一些知识,这里跟大家一起学习一下静态代码块,和构造代码块. 首先,代码就是巴拉巴拉一些定义呀,赋值啊,运算的一些java代码,用两个大括号括起来,就变成了神奇的代码块 { a=3; } static{ b=4; } 就像上面那个样子. 括号加了static修饰就变成了静态代码块,大家记住哦,只要加了static这个东西只后,后面那个东东就是静态的,而且只能操作静态的东东. 比如静态方法,静态变量,静态指针,当然java里没有指针. 然后我用了一个小代码去理解这两个概念,上