Java类中的各种成员的加载顺序

源代码:

[java] view plain copy

  1. public class SuperAndSub {
  2. public static void main(String[] args) {
  3. // Super s1 = new Sub();
  4. // Super s2 = new Super();
  5. Sub s3 = new Sub();
  6. }
  7. }
  8. class Super {
  9. static int a = getA();
  10. static {
  11. System.out.println("加载Super的静态块");
  12. }
  13. int b = getB();
  14. {
  15. System.out.println("加载Super的普通块");
  16. }
  17. Super() {
  18. System.out.println("加载Super的构造器");
  19. }
  20. static int getA() {
  21. System.out.println("加载Super的静态变量");
  22. return 1;
  23. }
  24. static int getB() {
  25. System.out.println("加载Super的实例变量");
  26. return 2;
  27. }
  28. }
  29. class Sub extends Super {
  30. static int c = getC();
  31. static {
  32. System.out.println("加载Sub的静态块");
  33. }
  34. int d = getD();
  35. {
  36. System.out.println("加载Sub的普通块");
  37. }
  38. Sub() {
  39. System.out.println("加载Sub的构造器");
  40. }
  41. static int getC() {
  42. System.out.println("加载Sub的静态变量");
  43. return 1;
  44. }
  45. static int getD() {
  46. System.out.println("加载Sub的实例变量");
  47. return 2;
  48. }
  49. }

输出:

[html] view plain copy

    1. 加载Super的静态变量
    2. 加载Super的静态块
    3. 加载Sub的静态变量
    4. 加载Sub的静态块
    5. 加载Super的实例变量
    6. 加载Super的普通块
    7. 加载Super的构造器
    8. 加载Sub的实例变量
    9. 加载Sub的普通块
    10. 加载Sub的构造器
时间: 2024-08-08 09:41:57

Java类中的各种成员的加载顺序的相关文章

(转)面试题--JAVA中静态块、静态变量加载顺序详解

1 public class Test { //1.第一步,准备加载类 2 3 public static void main(String[] args) { 4 new Test(); //4.第四步,new一个类,但在new之前要处理匿名代码块 5 } 6 7 static int num = 4; //2.第二步,静态变量和静态代码块的加载顺序由编写先后决定 8 9 { 10 num += 3; 11 System.out.println("b"); //5.第五步,按照顺序加

Java中的继承关系的加载顺序

/* 在加载类时,Java虚拟机先加载父类再加载子类,再对静态初始化块. 静态成员变量(类变量).静态方法进行一次初始化. 只有调用new方法时才会创建类的对象.按照父子继承关系进行初始化, 首先执行父类的初始化块部分,然后是父类的构造方法,再执行子类的 初始化块,最后是子类的构造方法. 销毁对象的过程是:首先销毁子类部分,再销毁父类部分. */ public class InheritanceLoadOrder { public static void main(String[] args)

web.xml中servlet, bean, filter, listenr 加载顺序汇总

最终得出结果:先 listener >> filter >> servlet >> spring 所以,如果过滤器中要使用到 bean,可以将spring 的加载 改成 Listener的方式 <listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener> 参考文档:htt

java类中的static成员变量和static方法简单介绍,持续补充

一.静态成员变量 1.属于整个类而不是某个对象实例,所以可以直接通过类名和对象名去调用. 2.静态成员属于整个类,当系统第一次使用该类时,就会为其分配内存空间直到该类被卸载才会进行资源回收 二.静态方法 1.静态方法中可以直接调用同类中的静态成员,但不能直接调用非静态成员:如果希望在静态方法中调用非静态变量,可以通过创建类的对象,然后通过对象来访问非静态变量 2. 在普通成员方法中,则可以直接访问同类的非静态变量和静态变量 3. 静态方法中不能直接调用非静态方法,需要通过对象来访问非静态方法 注

java类创建时里面成员执行的先后顺序

静态代码块在类第一次使用的时候执行一次,在构造函数执行之前执行.只要用到类,哪怕new对象(比如只声明变量)也会被执行,且只执行一次.一般用于对类进行初始化. 先执行静态代码块,静态成员(谁在前就先执行谁).无论new几次 静态代码块和静态成员只执行一次 再执行成员变量,最后构造函数.new几次 成员变量和构造函数 执行几次. 代码: 1.声明StaitcBlock类 public class StaticBlock1 { private static String TAG="333"

Struts2中6大配置文件以及加载顺序

1.default.properties   默认常量配置 2.struts-default.xml   默认配置文件 3.struts-plugin.xml    插件配置文件 4.struts.xml                核心配置文件 5.struts.properties     自定义常量配置 6.web.xml                  项目配置文件 原文地址:https://www.cnblogs.com/batj/p/9116068.html

服务器启动时Webapp的web.xml中配置的加载顺序

一 1.启动一个WEB项目的时候,WEB容器会去读取它的配置文件web.xml,读取<listener>和<context-param>两个结点. 2.紧急着,容创建一个ServletContext(servlet上下文),这个web项目的所有部分都将共享这个上下文. 3.容器将<context-param>转换为键值对,并交给servletContext. 4.容器创建<listener>中的类实例,创建监听器. 二  Load-on-startup Lo

【未整理】web.xml加载顺序.RP

一 1.启动一个WEB项目的时候,WEB容器会去读取它的配置文件web.xml,读取<listener>和<context-param>两个结点. 2.紧急着,容创建一个ServletContext(servlet上下文),这个web项目的所有部分都将共享这个上下文. 3.容器将<context-param>转换为键值对,并交给servletContext. 4.容器创建<listener>中的类实例,创建监听器. 二  Load-on-startup Lo

Java 类中成员初始化顺序

Java 中的类成员 基本分为 静态成员, 实例变量  方法中特别的是静态方法和构造方法. 1.定义一个类 public class ClassLoaderTest { public int a ; public String b; private static int c; public  ClassLoaderTest(){ System.out.println("执行前:"+ a + "  "+ b); a = 10; b = "lisi"