类加载顺序

有两个类Parent son

public class Parent {

	{
		System.out.println("父类构造块");
	}

	static{
		System.out.println("父类静态构造快");
	}

	public Parent(){
		System.out.println("父类构造方法");
	}
}
public class son extends Parent {

	{
		System.out.println("类构造块");
	}

	static{
		System.out.println("类静态构造快");
	}

	public son(){
		System.out.println("类构造方法");
	}
}

测试运行结果为

public class ArrayListTest {
	public static void main(String[] args) {
		Parent p = new son();
		/*
                父类静态构造快
                类静态构造快
                父类构造块
                父类构造方法
                类构造块
                类构造方法
                */
	}
}

总来的说,先父类,后子类。静态优先加载,构造方法初始化之前会优先加载类中构造代码快,
时间: 2024-12-08 16:35:27

类加载顺序的相关文章

Java 的类加载顺序

Java 的类加载顺序 一.加载顺序 1.父类的静态成员变量初始化 1.1.静态代码块 1.2.普通代码块 1.3.无参构造器 2.父类的静态代码块 3.子类的静态成员变量初始化 3.1.静态代码块 3.2.普通代码块 3.3.无参构造器 4.子类的静态代码块 5.父类的普通成员变量初始化 5.1.静态代码块 5.2.普通代码块 5.3.无参构造器 6.父类的普通代码块 7.父类的无参构造器 8.子类的普通成员变量 8.1.静态代码块 8.2.普通代码块 8.3.无参构造器 9.子类的普通代码块

Java虚拟机类加载顺序

Java虚拟机在加载类的时候,先初始化父类静态变量,再初始化子类静态变量,然后加载父类,最后加载子类 public class Parent { static{ System.out.println("static parent"); } public Parent(){ System.out.println("parent loaded"); } public void getaaa(){ System.out.println("parent aaa&q

扩展类加载器-------改变JAVA的父优先类加载顺序

java的类加载机制默认情况下是采用委托模型:当加载某个类时JVM会首先尝试用当前类加载器的父类加载器加载该类,若父类加载器加载不到再由当前类加载器来加载,因此这种模型又叫做"父优先"模型. 但是在实际项目中我们可能会要求先从当前类加载加载再从父类加载器加载,如项目中的某类的版本可能和container中的不一致的时候,若还从container加载就会报jar包冲突的异常,实际上jar包冲突的问题在实际开发过程中是经常会遇到的.如我们在开发Loong时就遇到了类似问题. 解决方案是通过

tomcat6类加载器与类加载顺序

tomcat6.0.32 com.dyyx.ShareUtils//返回系统当前时间public static String now(); package com.dyyx;import java.text.DateFormat;import java.text.SimpleDateFormat;import java.util.Date;public class ShareUtils {    private static final String FULL_DATE_FORMAT = "yy

Java类加载顺序

很长时间没看这方面的内容了,写篇文章让自己牢记一下,顺便分享一下. 首先,写代码以便检验结果.测试代码: public class Test { public static void main(String[] args) { new Test2(); } } 子类代码: public class Test2 extends Test3{ { System.out.println("子类代码块"); } private String address = getAddress(); st

java中类加载顺序

引子 记得上次中秋一哥们写个需求,没写完.他中秋过后还请一天假,有点错,打电话叫我帮他继续搞. 由于测试支撑,叫到我加班了.第二天过来看,打开页面直接报错,再次点击报错就不一样了.前次报错是有代码行的,第二次直接页面说类发现什么的错. 看了下代码,类似如下: 1 package san; 2 3 import java.io.FileNotFoundException; 4 import java.util.logging.Level; 5 import java.util.logging.Lo

关于类加载顺序问题的题

题目一: 1 public class Base { 2 private String baseName="base"; 3 public Base(){ 4 callName(); 5 } 6 public void callName(){ 7 System.out.println("ddddddd"); 8 } 9 10 static class Sub extends Base{ 11 private String baseName="sub&quo

Java类加载顺序练习题

一.题目 public class Test { public static Test t1 = new Test();// 标记1 // 普通代码块 { System.out.println("block A");// 标记2 } // 静态代码块 static { System.out.println("block B");// 标记3 } public static void main(String[] args) { Test t2 = new Test()

单例设计模式与类加载顺序详解

单例设计模式几种实现 (测试所用jdk版本1.8.0_20) 第一种: 1 public final class SingleInstance1 { 2 3 private static volatile SingleInstance1 singleInstance = null; 4 /* 5 * 必须定义,防止jvm提供默认构造函数(默认的为public)这样就失去了单例的特性, 6 * 因为可以new一个实例 7 */ 8 private SingleInstance1(){} 9 pub

类加载顺序--总结版

几大原则 一.静态成员变量(Static) 1.静态成员变量为类变量,所有对象共享同一内存空间 2.静态成员变量的声明和定义仅在首次加载类时执行一次 3.首次加载类时首先对所有静态成员变量根据类型默认赋初值,然后再对有右值的附右值 二.静态初始块 1.静态初始化块仅在首次加载类时执行一次 2.多个静态成员变量与静态始化快参照出现顺序先后执行······ 三.动态成员变量 1.动态成员变量定义在每次实例化对象时在构造函数之前执行 四.动态初始化块 1.动态初始化块在每次实例化对象时在构造函数之前执