`

静态代码段static的执行情况收藏

阅读更多
现在的面试真TMD垃圾啊,什么题都出,而且工作的时候99.9%用不到的, 我估计面试官自己也搞不清楚。
package lucenedemo.test;

class Base {
static int a=1;
public Base(){
   System.out.println(" 55555");
}
static {
   System.out.println("init Base");
}
static void method(){
   System.out.println("Base");
}

}
class Sub extends Base{

public Sub(){
   System.out.println(" 44444");
}
static int b=2;
static {
   System.out.println(" init Sub");
}
}

public class Traversc {
public static void main(String[] args){
   Sub.method();
   System.out.println("a="+Sub.b);
}
}

问最后输出结果

init Base
Base
init Sub
a=2

如果
public class Traversc {
public static void main(String[] args){
   System.out.println("a="+Sub.b);
   Sub.method();
 
}

则输出

init Base
init Sub
a=2
Base

如果

public class Traversc {
public static void main(String[] args){
   System.out.println("a="+Sub.a);
   Sub.method();
 
}

则输出

public class Traversc {
public static void main(String[] args){
   System.out.println("a="+Sub.a);
   Sub.method();
 
}

可以看出静态代码段先于构造函数运行而且只运行一次,同时父类的优先级最高先被初始化。

public class Traversc {
public static void main(String[] args){
   Sub s=new Sub();
   System.out.println("a="+Sub.a);
   Sub.method();
 
}


显示

init Base
init Sub
55555
44444
a=1
Base

可以得出构造函数优先级别在静态之后,同时父类也执行了



还有一题:

指出下面程序的运行结果:
class A{
  static{
      System.out.print("1");
  }
  public A(){
      System.out.print("2");
  }
}
class B extends A{
  static{
      System.out.print("a");
  }
  public B(){
      System.out.print("b");
  }  
}
public class Hello{
  public static void main(String[] ars){
      A ab = new B(); //执行到此处,结果: 1a2b
ab = new B(); //执行到此处,结果: 1a2bab
  }
}
   注:类的static 代码段,可以看作是类首次加载(被虚拟机加载)执行的代码,而对于类的加载,首先要执行其基类的构造,再执行其本身的构造
    静态块只在类声明时执行,类实例化时将不再调用。


分享到:
评论

相关推荐

    Java常见笔试、面试题目深度剖析,方法重写详解、静态代码块与构造方法执行顺序问题

    静态代码块是在类加载时执行的一段代码,它不依赖于类的实例,而是与类本身相关联。静态代码块通常用来初始化类级别的变量,或者执行一些仅需执行一次的设置操作。静态代码块的执行顺序取决于它们在源码中的出现顺序...

    构造函数与静态块的执行顺序

    静态块(`static`)是在类定义中包含的一段特殊的代码块,它在类加载时执行,而不是在对象创建时执行。静态块常用于初始化静态变量或执行一次性的初始化操作。 ### 继承中构造函数与静态块的执行顺序 在Java中,当...

    Java中的Static块与静态方法

    静态块,也被称为静态初始化器,是在类加载时自动执行的一段代码,用于初始化类的静态变量或执行一次性的设置工作。静态块可以包含任意的Java语句,并且会在类的任何实例被创建之前执行。与静态方法不同,静态块不是...

    4static封装类.rar在类的声明里查看有无静态元素(static

    静态块是在类加载时执行的代码段,通常用于初始化静态变量。它们在任何实例化之前执行,确保了静态变量的初始化顺序。例如: ```java public class MyClass { static int a; static { a = 10; // 静态块中的...

    C#基础知识 静态

    在C#编程语言中,"静态"(Static)是一个非常重要的关键字,它有着广泛的用途,涉及到类、方法、变量等多个方面。本篇文章将深入探讨C#中的静态概念及其应用。 首先,静态类(Static Class)是不能被实例化的,它们...

    java 静态代码块通过类加载器获取资源文件例子

    首先,静态代码块是在类被加载到JVM(Java虚拟机)时执行的一段代码,它不依赖于类的实例创建,而是与类本身绑定。静态代码块常用于初始化静态变量或进行一次性的系统设置。例如,在本案例中,可能是在程序启动时...

    java中的static变量,方法,代码块

    `static`代码块,或称静态代码块,是在类初始化过程中执行的一段代码。不同于普通的代码块,静态代码块在类加载时由JVM自动执行,并且只执行一次。这意味着静态代码块常被用来初始化静态变量或执行类级别的操作。多...

    有关static block静态代码块和单态设计模式

    静态代码块,也就是`static block`,是Java中的一种特殊构造,它不包含在任何方法内,当类被加载时,静态代码块会被自动执行且仅执行一次。这个特性使得静态代码块成为初始化类静态变量的理想选择。 类加载的过程是...

    Java static静态初始快

    静态初始化块是以`{}`包围的一段代码,前缀有`static`关键字。它在类被加载到JVM(Java虚拟机)时执行,且仅执行一次。这通常用于初始化静态变量或者执行一些类级别的设置工作,例如设置默认值、计算值或者建立静态...

    Java的静态代码块、非静态代码块、构造函数

    静态代码块是在类加载时执行的一段代码,它不依赖于类的实例,而是与类本身相关联。静态代码块通常用来初始化类级别的变量,确保这些变量在任何实例创建之前已经设定好。例如: ```java public class MyClass { ...

    java中静态代码块与构造方法的执行顺序判断

    首先,静态代码块(也称为静态初始化器)是由`static`关键字修饰的代码块,它在类加载时执行,且只执行一次。静态成员属于类本身,不依赖于类的实例,因此在任何对象创建之前就会执行。在多级继承关系中,静态代码块...

    什么是静态(static)什么是静态方法,静态变量,静态块

    静态初始化块,也称为静态初始化器,是在类加载时执行的一段代码,用于初始化静态变量。当类首次被加载到JVM中时,会按照它们在代码中的顺序执行这些块。 ```java public class MyClass { static { System.out....

    static静态局部变量的妙用

    2. **存储位置**:`static`静态局部变量存储在程序的数据段中,而非栈中。 3. **生命周期**:从程序启动到结束,`static`静态局部变量一直存在。 #### 六、总结 通过上述示例可以看出,合理使用`static`静态局部...

    Magento在代码中调用CMS静态块 (Static Block)

    这段代码的核心是`createBlock`方法,它用于创建一个指定类型的布局块,此处类型为`cms/block`,表示我们想要创建的是一个CMS静态块对象。接下来的`setBlockId`方法则用于设置要加载的静态块的ID,本例中为`...

    Qt 5.4.2 MinGW32 static 静态编译 版本打包

    MinGW(Minimalist GNU for Windows)是一个基于GCC的Windows下的编译器套件,而静态编译意味着Qt库与应用程序一起链接,形成一个独立的可执行文件,无需在目标系统上安装额外的运行时环境。 **一、静态编译的优势*...

    JAVA程序:静态块代码

    在Java编程语言中,静态块(Static Block)是一种特殊的代码段,用于初始化类级别的静态变量。它是类加载时执行的,且只执行一次。在理解静态块之前,我们需要先了解类加载的过程和静态变量的概念。 静态变量是属于...

    静态代码检测工具

    静态代码检测是一种在无需运行代码的情况下分析代码的方法,旨在识别潜在的错误、安全漏洞和其他质量问题。这类工具对于提高软件质量和安全性至关重要,特别是随着软件开发过程越来越复杂,手动审查变得越来越不可行...

    静态代码检查的相关文件

    在软件开发过程中,静态代码检查(Static Code Analysis)是一种重要的质量保证手段,它可以在程序运行前分析源代码,找出潜在的错误、不符合编码规范、安全漏洞等问题。本压缩包文件"codecheck"可能包含了用于执行...

    Java中的静态变量、静态方法与静态代码块

     其中静态代码在类的初始化阶段被初始化。而非静态代码则在类的使用阶段(也是实例化一个类的时候)才会被初始化。  静态变量  可以将静态变量理解为类变量(与对象无关),而实例变量则属于一个特定的对象...

    Qt6.22 Mingw64静态编译

    静态编译意味着在编译应用程序时,将所有依赖的库(如Qt库)合并到最终的可执行文件中,这样生成的程序在运行时不再需要外部的动态链接库(DLLs)。这对于那些需要分发或在不可预知环境运行的应用程序来说非常有用,...

Global site tag (gtag.js) - Google Analytics