`
guiven
  • 浏览: 28761 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

类继承中构造方法与static块调用顺序浅析【转】

阅读更多




1) 类中Static{}代码段会在该类第一次访问里被调用,并且仅被调用一次

2) 由于类中构造方法会默认地或显示的调用父类的构造方法,这样类在实例化时(即调用构造器方法),会优先调用构造器方法。

如下程序:

class Firework{
    static {
        System.out.println("Hello" );
    }
    public Firework () {
        System.out.println("Firework 0" );
    }
}

class Fountain extends Firework {
    static {
        System.out.println("World" );
    }
    public Fountain() {
        // TODO Auto-generated constructor stub
        System.out.println("Fountain 0" );
    }
}



现有一段代码如下:

Firework f = new Fountain();


运行输出为

Hello

World

Firework 0

Fountain 0

由输出可知Java对类中static块执行策略是:优先深度遍历所有类的static{}块,其次再遍历类的构造器

 

分享到:
评论

相关推荐

    浅析C#静态类,静态构造函数,静态变量

    在 `Cow` 类的示例中,静态构造函数 `static Cow()` 被用来初始化静态变量 `count`。值得注意的是,静态构造函数的执行时间早于任何实例构造函数,而且静态构造函数的执行顺序取决于静态成员的引用顺序,而不是代码...

    PHP面向对象中new self()与 new static()的区别浅析

    在这个例子中,`B` 类继承了 `A` 类,并重写了 `$_a` 静态属性,但 `B::echoProperty()` 仍然输出 'Class A',因为 `self::$_a` 指向的是 `A` 类中的 `$_a`。 然而,PHP 5.3 引入了后期静态绑定(Late Static ...

    浅析对Java关键字final和static的理解

    当一个类被声明为`final`时,这意味着它不能被其他类继承。这样做可以保护类的设计不被改变,通常用于那些设计完成并且不需要进一步扩展的基础组件。例如,`java.lang.String`类就是`final`的,防止了对字符串操作...

    浅析Java语言中对象的创建过程.pdf

    本文详细解析了Java中对象创建的整个流程,涵盖了类信息存储、对象引用、对象实体的内存分配以及实例化过程中方法的调用。 首先,Java的内存结构是理解对象创建的基础。JVM(Java虚拟机)为每一个运行中的Java应用...

    2022年浅析Java中Data类的应用Java教程.docx

    创建`Date`对象很简单,只需要调用无参数的构造函数即可,这会自动获取当前系统时间。例如: ```java import java.util.Date; public class DateExample1 { public static void main(String[] args) { // 获取...

    深入Java单例模式浅析

    Java中的单例模式是一种设计模式,它确保一个类只有一个实例,并提供一个全局访问点。这种模式在许多场景下非常有用,比如配置管理、缓存、日志记录等,因为它们通常只需要一个共享的实例。 1. 最简单的实现: 单例...

    ES6中class类用法实例浅析

    例如,创建一个`Dog`类继承自`Animal`类: ```javascript class Animal { constructor(name) { this.name = name; } speak() { console.log(this.name + ' makes a noise.'); } } class Dog extends Animal...

    JAVA基础:深入浅析java语言的事件处理

    首先,我们需要定义一个表示属性变化的事件类`PropertyEvent`,该类继承自`java.util.EventObject`: ```java import java.util.EventObject; public class PropertyEvent extends EventObject { public ...

    浅析Java中Runnable和Thread的区别

    在Java编程语言中,创建和管理多线程有两种主要的方式:继承`Thread`类和实现`Runnable`接口。这两种方式都是为了实现并发执行任务,但它们之间存在一些关键的区别。 首先,当我们创建一个新的线程时,实际上是为了...

    通信笔试宝典v3a(139页)

    - **C++中类的继承和组合**:继承与组合的设计模式区别。 **1.7 虚函数** - **多态性、动态联编**:实现接口的动态绑定。 - **Vtable机制**:实现多态的关键机制。 - **override与overload的区别**:重写与重载的...

    Java基础知识点汇总

    在Java中,所有对象都可以通过继承`java.lang.Object`类的`clone()`方法实现克隆。为了使一个类支持克隆,需要满足以下两个条件: 1. 实现`Cloneable`接口。 2. 覆写`clone()`方法并调用`super.clone()`。 #### 5. ...

    浅析Java中的 new 关键字

    构造方法私有化,防止外部直接创建实例 private Singleton() {} // 2. 静态内部类持有Singleton的实例,延迟加载 private static class SingletonHolder { private static final Singleton INSTANCE = new ...

    浅析Java中线程的创建和启动

    总结来说,Java中线程的创建和启动涉及继承Thread类、实现Runnable接口、使用ExecutorService以及调用`start()`方法。理解这些基本概念对于编写并发和多线程程序至关重要。通过合理地管理线程,可以提高程序的效率,...

    深入浅析C#泛型类型

    C#泛型类型是.NET框架中的一个重要特性,它允许开发者创建可重用的代码模板,这些模板可以在多种数据类型上工作,从而提高了代码的灵活性、效率和安全性。泛型不仅应用于类,还适用于接口、委托和结构。在C#中,泛型...

    深入浅析react native es6语法

    `super(props)`是用来调用父类(即`React.Component`)的构造函数,这是在子类中使用`constructor`时必须的。 `render`方法是React组件的核心,它返回React元素,定义了组件在屏幕上的表现。在这个例子中,`<View>`...

    java并发编程专题(九)----(JUC)浅析CyclicBarrier

    Java 并发编程专题(九)----(JUC)浅析 CyclicBarrier CyclicBarrier 是 Java 并发编程中的一个同步辅助工具,它允许一组线程全部等待彼此到达公共屏障点。它的字面意思是可循环使用的屏障,用于让一组线程到达一...

    浅析java贪心算法

    在主函数中,我们可以调用这个方法并打印出找零钱的方案: ```java public static void main(String[] args) { int m[] = {25, 10, 5, 1}; int n = 99; int[] num = new int[m.length]; num = zhaoqian(m, n); ...

Global site tag (gtag.js) - Google Analytics