`
zhangwei_david
  • 浏览: 474697 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Java面试题之 static执行顺序

    博客分类:
  • Java
 
阅读更多

 

   下面代码执行后最终的结果是:

public class StaticDemoSupper {

	static {
		System.out.println("A");
	}

	/**
	 * 
	 */
	public StaticDemoSupper() {
		System.out.println("B");
	}

}

public class StaticDemoChild extends StaticDemoSupper {
	static{
		System.out.println("C");
	}

	/**
	 * 
	 */
	public StaticDemoChild() {
		System.out.println("D");
	}
	
	public static void main(String[] args) {
		new StaticDemoChild();
	}
	
}

 

 

A
C
B
D

 

    执行顺序是:父类的静态代码块,子类的静态代码块 父类的构造方法,子类的构造方法

 

(1) 遇 到new、getstatic、putstatic或invokestatic这4条字节码指令时,如果类没有进行过初始化,则需要先触发其初始化。生成 这4条指令的最常见的Java代码场景是:使用new关键字实例化对象的时候,读取或设置一个类的静态字段(被final修饰、已在编译期把结果放入常量 池的静态字段除外)的时候,以及调用一个类的静态方法的时候。

      (2) 使用java.lang.reflect包的方法对类进行反射调用的时候,如果类没有进行过初始化,则需要先触发其初始化。

      (3) 当初始化一个类的时候,如果发现其父类还没有进行过初始化,则需要先触发其父类的初始化。

      (4)当虚拟机启动时,用户需要指定一个要执行的主类(包含main()方法的那个类),虚拟机会先初始化这个主类。

只有上述四种情况会触发初始化,也称为对一个类进行主动引用,除此以外,所有其他方式都不会触发初始化,称为被动引用

 

    静态代码块中会在编译阶段初始化到类的常量池中

 

0
2
分享到:
评论

相关推荐

    java面试题静态加载顺序构造方法

    java面试题静态加载顺序构造方法 继承与static 面试题目如下:请写出程序执行完成之后的结果。 package extend; public class X { Y y=new Y(); static{ System.out.println("tttt"); } X(){ System....

    JAVA面试题JAVA面试题JAVA面试题

    Java 面试题涵盖了许多核心概念,这些都是面试者在求职过程中必须掌握的基础知识。下面将逐一解析这些知识点: 1. **final, finally, finalize的区别**: - `final`:用于修饰类、方法和变量,表示不可变或不可...

    java面试题,java框架面试题

    Java 面试题、Java 框架面试题 Java 面试题是 Java 开发人员面试的必备知识,涵盖了 Java 基础知识、Java 框架、Java 集合框架、Java 多线程、Java 网络编程等方面的知识点。在本文中,我们将对 Java 面试题进行...

    Java笔试题大集合及答案(另附各大公司笔试题)

    Java作为一门广泛使用的编程语言,其笔试题涵盖了基础语法、数据结构、算法、多线程、网络编程、设计模式等多个方面。本资料集合了大量Java笔试题,旨在帮助求职者全面复习并准备Java相关的笔试环节,同时包含了各大...

    Java类执行顺序详解+实例(阿里面试题)+详细讲解+流程图

    Java类的执行顺序是编程过程中一个非常重要的概念,特别是在深入理解和优化代码性能时。本文将详细探讨Java类的加载、初始化、执行等步骤,并通过实例分析阿里面试中可能涉及的相关问题,结合流程图帮助理解这一过程...

    java笔试题java笔试题java笔试题

    【Java 笔试题详解】 1、Java 编译后产生的是什么? 答案:B、字节码 解析:Java 源代码经过编译器处理后生成的是字节码(.class 文件),这是一种中间语言,可以在Java虚拟机(JVM)上运行。不同于机器码,字节码...

    java面试题之代码与编程题

    Java面试题之代码与编程题 在这篇文章中,我们将讨论Java面试题中的一些代码与编程题,涵盖Singleton模式、继承时类的执行顺序问题、内部类的实现方式等几个方面。 Singleton模式 Singleton模式是一种常用的设计...

    java面试题

    ### JavaSE面试题知识点梳理 #### 一、Java 跨平台原理 Java 语言的核心优势之一在于其跨平台性,即“一次编写,到处运行”(Write Once, Run Anywhere)。这种特性主要得益于 Java 字节码(Bytecode)及其运行...

    Java 面试题 Java 面试题

    根据给定的文件内容,我们可以总结出一系列与Java面试相关的知识点。下面将详细解析每一道题目涉及的关键概念。 ### 第一部分:基础知识 #### 1. final, finally, finalize的区别 - **final**: 用于声明变量、方法...

    java笔试试题及答案(选择题)

    根据给定的文件信息,我们将从这些选择题中提取出重要的Java知识点,并对每个知识点进行详细的解释。 ### Java基础知识 1. **main方法的格式** - 正确选项:`d) public static void main(String[] args)` - ...

    java笔试题以及答案

    ### Java笔试题及答案解析 #### 一、作用域public, private, protected,以及不写时的区别 在Java中,类成员(如方法、变量)的访问控制可以通过四种不同的访问修饰符来限定:`public`、`private`、`protected`以及...

    华为java面试题及答案

    ### 华为Java面试题及答案解析 #### 题目一:字符串不可变性 **题目描述**: ```java public class Test { public static void changeStr(String str) { str = "welcome"; } public static void main(String...

    稍微有点难度的10道java面试题,你会几道?

    根据给定的信息,我们将逐一分析这10个Java面试题所涉及的知识点: ### 1. JVM 对频繁调用的方法做了哪些优化? JVM(Java虚拟机)在运行时会针对频繁调用的方法进行多种优化措施,以提高程序执行效率。主要的优化...

    java面试真题整理

    java开发岗企业常考面试题目 1.GC垃圾回收处理器,回收内存 托管资源: 非托管资源:手动释放资源 2.堆内存:new出来的 栈内存:基本数据类型的变量,方法的返回值,对象的引用(对象的引用地址) 3.static:存放...

    Java后端面试题

    ### Java面试题知识点概览 #### 面向对象概念 1. **super()与this()的区别**: - `super()`用于调用父类的构造方法或父类成员方法。 - `this()`用于调用本类中的其他构造方法。 2. **作用域public, protected, ...

    Java笔试面试题及答案解析(一)

    ### Java笔试面试题及答案解析知识点 #### 1. 整型溢出与浮点数特殊值 **问题1:** 存在使`i+1 的数吗? **答案:** 存在。 **解析:** 如果变量`i`为`int`类型,那么当`i`取`int`所能表示的最大整数值时(即`...

    Java面试题及答案.doc

    以下是一些常见的 Java 面试题及其答案,涵盖基础概念、数据类型、字符串处理等方面。 1. JDK 和 JRE 有什么区别? JDK(Java Development Kit)是Java开发工具包,它提供了开发和运行Java程序所需的所有工具,包括...

    java面试题-类的初始化顺序.doc

    在面试中,面试官可能会通过这种类型的题目来评估应聘者对Java内存模型的理解,以及他们在编写代码时是否能考虑到这些初始化规则,从而避免潜在的陷阱。因此,掌握类的初始化顺序是每个Java开发者必备的知识点。

    java程序员经典笔试面试题汇总

    ### Java程序员经典笔试面试题汇总知识点解析 #### 一、程序执行顺序与静态变量初始化 **题目背景**:本题目旨在考察Java程序中类的加载过程以及不同成员(如静态变量、非静态变量等)的初始化顺序。 **题目示例*...

    java面试题经典32问

    ### Java面试题经典32问解析 #### 一、final,finally,finalize的区别 - **final**:这是一个关键字,用于修饰类、变量或方法。如果一个类被声明为`final`,表示它不能被继承,即不能有子类。同样地,如果一个...

Global site tag (gtag.js) - Google Analytics