java类执行顺序问题

经常遇到的面试题,一个类继承另一个类然后问输出的结果是什么。个人觉得就是考类的输出问题(亲测)

第一:单一的类执行顺序

package Test;

public class person {

static{
System.out.println("父类的静态块");
}

person(){
System.out.println("父类的构造方法");
}

{
System.out.println("父类的非静态代码块");
}

public static void main(String[] args) {
System.out.println("父类的主函数main");
person p = new person();
}

}

打印:

父类的静态块
父类的主函数main
父类的非静态代码块
父类的构造方法

输出结果为:父类的静态块-->父类的主函数main-->父类的非静态块-->父类的构造函数

第二:子类继承父类,创建子类对象,代码执行的顺序(亲测)

package Test;

public class SonTest extends person {
static{
System.out.println("子类的静态代码块");
}
{
System.out.println("子类的非静态代码块");
}
SonTest(){
System.out.println("子类的构造函数");
}
public static void main(String[] args) {
System.out.println("子类的主函数main");
SonTest s = new SonTest();
}
}

打印:

父类的静态块
子类的静态代码块
子类的主函数main
父类的非静态代码块
父类的构造方法
子类的非静态代码块
子类的构造函数

输出结果为:父类的静态代码块-->子类的静态代码块-->子类的主函数main-->父类非静态代码块-->父类的构造函数--子类的非静态代码块-->子类的构造函数

时间: 2025-01-02 19:54:29

java类执行顺序问题的相关文章

Java类执行顺序

当一个类从被JVM装载开始,各种代码的执行顺序大致如下: 被JVM装载->执行父类的相关代码->如果有静态初始化,先执行静态初始化,且只执行一次,以后即使有该类实例化,也不会再执行->如果有静态代码块,以与静态初始化一样的方式执行->如果有new语句带来的实例化,先为成员变量分配空间,并绑定参数列表,隐式或显式执行super(),即父类的构造方法,->执行非静态代码块-〉执行本类的构造函数-〉执行其他代码

Java 类执行顺序

1.如果父类有静态成员赋值或者静态初始化块,执行静态成员赋值和静态初始化块2.如果类有静态成员赋值或者静态初始化块,执行静态成员赋值和静态初始化块3.将类的成员赋予初值(原始类型的成员的值为规定值,例如int型为0,float型为0.0f,boolean型为false:对象类型的初始值为null)4.如果构造方法中存在this()调用(可以是其它带参数的this()调用)则执行之,执行完毕后进入第7步继续执行,如果没有this调用则进行下一步.(这个有可能存在递归调用其它的构造方法)5.执行显式

转!!关于java类初始化顺序

原文地址:http://www.cnblogs.com/luckygxf/p/4796955.html 1.没有继承 静态变量->静态初始化块->变量->变量初始化块->构造方法 2.有继承的情况 父类静态变量->父类静态初始化块->子类静态变量->子类静态变量初始化块->父类变量初始化->父类变量初始化块->父类构造方法->子类变量初始化->子类变量初始化块->子类构造方法 --------------------------

java类初始化顺序

java类初始化顺序 执行顺序如下: 没有继承其他类时: 静态变量 静态初始化块 变量 初始化块 构造器 继承其他类时: 父类--静态变量 父类--静态初始化块 子类--静态变量 子类--静态初始化块 父类--变量 父类--初始化块 父类--构造器 子类--变量 子类--初始化块 子类--构造器 执行顺序图:

深入理解Java程序执行顺序

下面将从一道阿里巴巴试题详细分析Java程序执行顺序. 阿里巴巴试题 public class Test { public static int k = 0; public static Test t1 = new Test("t1"); public static Test t2 = new Test("t2"); public static int i = print("i"); public static int n = 99; publi

静态代码块、构造代码块、构造函数以及Java类初始化顺序

静态代码块:用staitc声明,jvm加载类时执行,仅执行一次构造代码块:类中直接用{}定义,每一次创建对象时执行.执行顺序优先级:静态块,main(),构造块,构造方法. 构造函数 public HelloA(){//构造函数 } 关于构造函数,以下几点要注意:1.对象一建立,就会调用与之相应的构造函数,也就是说,不建立对象,构造函数时不会运行的.2.构造函数的作用是用于给对象进行初始化.3.一个对象建立,构造函数只运行一次,而一般方法可以被该对象调用多次. 构造代码块 {//构造代码块 }

java的执行顺序

Java 1.java的执行顺序 java(编译)   Java(运行)       编写源码----------->字码文件----------->执行 2.编写源码注意 a.类名和文件名一致. b.括号要成对出现. 3.println和print的区别 println会换行    print不会 4.转义字符 \n表示换行     \t表示空格 5.java注释 //:单行注释   /*  */:表示多行注释  /**   */表示文本注释 6.java代码规范 a.类名要用oublic修

Android(java)学习笔记136:Java类初始化顺序

Java类中初试化的顺序: 由此得出Java普通类初始化顺序结论: 静态变量 静态初始化块 变量 初始化块 构造器 由此得出Java继承类初始化顺序结论: 1 .继承体系的所有静态成员初始化(先父类,后子类) 2 .父类初始化完成(普通成员的初始化-->构造函数的调用) 3 .子类初始化(普通成员-->构造函数) Java初始化顺序如图: 代码演示: class Sample { Sample(String s) { System.out.println(s); } Sample() { Sy

Java static 执行顺序

package com.rainy.main; import java.util.ArrayList; import java.util.List; public class Test extends A { static List<Object> p = new ArrayList<Object>(); static { p.add(new Object()); } public static void main(String[] args) { System.out.print