`
songzhan
  • 浏览: 245835 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

java静态代码块和构造方法执行顺序

 
阅读更多

先看看下面几个类,然后判断它们的输出
public class A {

    static{
        System.out.print(1);
    }
    public A(){
        System.out.print(2);
    }
}

public class B extends A{

    static{
        System.out.print("a");
    }
    public B(){
        System.out.print("b");
    }
}

public class C {

    public static void main(String[] args){
        A a = new B();
        a = new B();
    }
}
----------------------------------------------------------------------------------------------
父类与子类执行的先后顺序
静态变量的执行特性
方法重写(override)的注意事项
1.
当父类与子类都有静态代码块和构造函数的时候,执行顺序如下:
父类静态代码块 > 子类静态代码块
父类构造函数 > 子类构造函数(先有父亲,后有孩子)
如果是多级继承关系的话,最高层的父类首先执行,然后依次递减

总结:静态优先执行,父类优先执行
注意:静态代码块是在JVM加载类的时候执行的,而且静态代码块执行且仅执行一次

2.
在调用类中的方法时,在方法体执行之前,首先要对类中的成员变量进行赋值,如果代码中没有赋具体的值,也有默认值。成员变量的赋值顺序按照前后顺序进行。
如果有既有直接赋值,也有构造方法赋值,那么根据先后顺序执行

3.
重写(Override) 重载(Overload)
 重载是方法名字,返回类型一致,唯一不同的是方法的参数不同(参数类型不同,或者参数类型不同)

重写:
1. 发生方法重写的两个方法返回值,方法名,参数列表必须完全一致
2. 子类抛出的异常不能超过父类相应的方法抛出的异常
3. 子类方法的访问级别不能低于父类相应方法的访问级别(public,package,protected, private)

多态:父类的引用指向了子类的对象,调用时执行的方法也是子类的方法,父类的方法并不会被执行

所谓多态就是父类或者接口类型的引用可以指向子类或者实现该接口的类的实例(对象)

看了上面的说明,大家也应该知道上面的程序输出结果了。
输出结果为:1a2b2b

分享到:
评论

相关推荐

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

    本文将深度剖析几个常见的Java面试题目,包括方法重写、静态代码块和构造方法的执行顺序。 首先,我们来讨论**方法重写(Override)**。在面向对象编程中,子类可以继承父类的属性和方法,有时需要根据自己的需求对...

    Java:静态代码块和构造函数执行顺序

     1 静态变量,静态代码块(类加载时执行,类不加载不执行)  2 实例变量,实例代码块(创建对象时才执行,不创建对象不执行)  3 构造函数,(创建对象时执行完2后再执行构造函数,不管构造函数是public还是private...

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

    在Java编程语言中,了解静态代码块和构造方法的执行顺序是至关重要的,尤其是在处理类的初始化和对象的创建时。下面将详细解释这些概念及其执行逻辑。 首先,静态代码块(也称为静态初始化器)是由`static`关键字...

    Java 普通代码块静态代码块执行顺序(实例讲解)

    这里我们将深入探讨Java中的普通代码块(实例初始化块)和静态代码块的执行顺序,并通过实例来阐述这一概念。 首先,我们需要明白两种类型的代码块: 1. 静态代码块(Static Block):这些代码块在类加载时执行,...

    Java静态代码块作用及执行顺序解析

    Java静态代码块作用及执行顺序解析 Java静态代码块是Java语言中的一种特殊代码块,它们在类加载的时候执行,且只执行一次。它们通常用来初始化静态变量、设置静态变量的初始值等。静态代码块的作用域是整个类,而...

    java静态代码块与非静态代码块.doc

    这个非静态代码块是在创建对象时自动执行的,它的执行顺序是在构造方法中的某个点。 静态代码块与非静态代码块的区别 静态代码块和非静态代码块的主要区别是它们的执行时机。静态代码块是在类加载时自动执行的,而...

    java 代码块与静态代码块加载顺序

    在 Java 语言中,代码块和静态代码块的加载顺序是严格按照类的加载顺序执行的。具体来说,类的加载顺序如下: 1. 父类静态代码块 2. 子类静态代码块 3. 父类实例代码块 4. 子类实例代码块 在上面的实例代码中,...

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

    在探讨继承中子类与父类构造函数及静态块的执行顺序时,我们首先需要理解构造函数和静态块的基本概念及其在Java中的作用。构造函数主要用于初始化对象的状态,而静态块则是在类加载到内存中时执行的一段代码,通常...

    java 静态块实例块构造器调用

    静态块是Java类中用于初始化静态变量的代码块。它们在类加载时执行,且只执行一次。无论创建多少个类的实例,静态块只会被执行一次。这是因为在Java中,类的静态成员是与类相关的,而非类的实例。 ```java public ...

    java中的静态代码块、构造代码块、构造方法详解

    在Java编程语言中,类的初始化过程涉及到几个关键的概念,包括静态代码块、构造代码块和构造方法。这些概念在创建对象和管理类的状态时起着至关重要的作用。以下是关于这三个概念的详细解释: 1. **静态代码块**: ...

    java 静态非静态 字段方法 子类父类构造_初始化顺序!

    java 静态_非静态 字段_方法_代码块 子类父类构造_初始化顺序! 三个class 让你清清楚楚 第一个class java代码如下: package initialOrder; class Parent { // 静态变量 public static String p_StaticField...

    Java 中普通代码块,构造代码块,静态代码块区别及代码示例

    Java编程语言中有三种类型的代码块,它们分别是普通代码块、构造代码块和静态代码块,每种都有其特定的用途和执行顺序。 1. **普通代码块**: 普通代码块(也称为局部代码块)是在方法或者类的成员变量声明之间...

    静态代码块

    这种执行顺序体现了Java中静态代码块和实例代码块的执行规则: - 类的静态代码块会在任何实例被创建之前执行,并且只执行一次。 - 子类继承父类时,父类的静态代码块会在子类的静态代码块之前执行。 - 每个类的静态...

    由浅入深详解Java 类的实例化顺序

    父类的静态变量和静态代码块,按代码先后顺序执行 2. 子类的静态变量和静态代码块,按代码先后顺序执行 3. 父类的成员变量和普通代码块,按代码先后顺序执行 4. 父类的构造方法 5. 子类的成员变量和普通代码块...

    Java基础之代码块.docx

    在上面的代码中,静态代码块从上到下依次执行,接着是 main 方法,最后是构造块和构造器。 Java 中的代码块有三种:普通语句块、构造块和静态块,每种代码块的执行时机不同,需要根据实际情况选择合适的代码块类型...

    Java构造代码块,静态代码块原理与用法实例分析

    在Java中,静态代码块的执行顺序是在构造代码块之前,然后执行构造方法。静态代码块只执行一次,而构造代码块和构造方法每个对象都要执行一次。 Java构造代码块和静态代码块是Java中两种特殊的代码块,它们的运行...

    Java静态代码块加载驱动代码实例

    Java静态代码块加载驱动代码实例 Java静态代码块是一种特殊的代码块,它可以在类加载时被执行,该代码...在本文中,我们通过示例代码详细介绍了Java静态代码块加载驱动代码实例,希望能够对大家的学习和工作有所帮助。

    简单了解java中静态初始化块的执行顺序

    在Java中,静态初始化块的执行顺序非常重要,因为它会影响类的静态变量和静态方法的初始化。在实际开发中,了解静态初始化块的执行顺序非常重要,否则可能会导致类的静态变量和静态方法不能正确地初始化。 下面是一...

    类执行顺序小结.doc

    2. **静态代码块与静态变量的初始化**:在类加载时,静态代码块和静态变量会被初始化,它们的执行顺序取决于它们在代码中的出现顺序,而不是它们的定义顺序。这意味着,如果一个类中包含了多个静态代码块或静态变量...

    深入浅析Java中普通代码块、构造代码块与静态代码块

    Java编程语言中有三种类型的代码块:普通代码块、构造代码块和静态代码块,它们各自在不同的场景下发挥着重要作用。下面将详细解释这三种代码块的特性、执行顺序以及它们在程序运行过程中的作用。 1. **普通代码块*...

Global site tag (gtag.js) - Google Analytics