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.println(p.size());
System.out.println(l.size());
}

}

class A {
static List<Object> l = new ArrayList<Object>();

static {
l.add(new Object());
}
}

可以看出,当进入main方法之前,将先执行类中的static,并且,static的执行顺序为先执行父类的static 接着执行子类的static

时间: 2025-01-15 03:06:15

Java static 执行顺序的相关文章

【春招】 java static 执行顺序

1 package static类型.执行顺序; 2 3 public class Test { 4 Person person = new Person("Test"); 5 static{ 6 System.out.println("test static");//1 7 } 8 9 public Test() { 10 System.out.println("test constructor");//5 11 } 12 13 public

深入理解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的执行顺序

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

JAVA程序执行顺序

先给结论: 执行顺序:父类静态块->子类静态块(main函数执行前)->父类块->父类构造器->子类块->子类构造器 赋值顺序:成员变量赋值->块赋值->构造器赋值 1 class A{ 2 static{System.out.println("Class A");} 3 {System.out.println("Class c");} 4 public A(){ 5 System.out.println("thi

java类执行顺序问题

经常遇到的面试题,一个类继承另一个类然后问输出的结果是什么.个人觉得就是考类的输出问题(亲测) 第一:单一的类执行顺序 package Test; public class person { static{ System.out.println("父类的静态块"); } person(){ System.out.println("父类的构造方法"); } { System.out.println("父类的非静态代码块"); } public st

java代码执行顺序

当父类与子类都有静态代码块和构造函数的时候,执行顺序如下:        父类静态代码块 > 子类静态代码块 java虚拟机加载类时,就会执行该块代码.        父类构造函数 > 子类构造函数 (先有父亲,后有孩子) 如果是多级继承关系的话,高层的父类首先执行,然后依次递减 总结:静态优先执行,父类优先于子类执行                静态代码块是在JVM加载类的时候执行的,而且静态代码块执行且仅执行一次

Java类执行顺序

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

Java代码执行顺序及多态体现

/** * Description: * 基类的引用变量可以只想基类的实例对象也可指向其子类的事来对象 * 接口的引用变量也可以指向实现类的实例对象 * 程序调用的方法在运行期才动态绑定 * 绑定指将一个对象调用和一个方法主体连接到一起,就是引用变量所指向的具体实例对象的方法,就是内存里正在运行的那个对象的方法,而不是引用变量的类型中定义的方法 * 这种动态绑定实现了多态.只有方法有多条的概念 */ public class Test { /** * 首先new Sub()的时候会首先调用Bas

Java 类执行顺序

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