继承中静态块和块的运行顺序

1.在子类继承父类的关系中,如果父类有静态块和块,首先运行父类的静态块,在运行块,最后运行子类的方法。

如:

public class PM623 {

    public static void main(String[] args) {
        City1 c=new City1();                   //创建对象
        c.value();                                     //对象调方法
    }
}
class Country1{                                  //最后执行方法     3
String name;

   void value() {
   name = "China";
}
   { System.out.println(12);}                     //在执行块         2

   static                                       //静态块先执行      1
   { System.out.println(23);}
}

class City1 extends Country1 {
          String name;
          void value() {
             name = "Dalian";
              super.value();

            System.out.println(name);
            System.out.println(super.name);
}
}            

运行结果:

23
12
Dalian
China

时间: 2024-10-18 15:45:57

继承中静态块和块的运行顺序的相关文章

Java中四大代码块的运行顺序(附code)

验证证的方法是写code.例如以下: public class test { static class A { public static String name = "hello"; static { System.out.println("A static block1"); //1 } { System.out.println("A block3"); //3 } public A() { System.out.println("

3.Java继承中父类与子类的初始化顺序

在 Java 编程语言中,对象的初始化是非常结构化的,这样做是为了保证安全.在前面的模块中,看到了当一个特定对象被创建时发生了什么.由于继承性,对象被完成,而且下述行为按顺序发生: 存储空间被分配并初始化到 0 值 进行显式初始化 调用构造方法 层次中的每个类都会发生最后两个步骤,是从最上层开始. Java 技术安全模式要求在子类执行任何东西之前,描述父类的一个对象的各个方面都必须初始化.因此,Java 编程语言总是在执行子构造方法前调用父类构造方法的版本.有继承的类在运行的时候,一定要记得:初

【Java基础】继承中的代码块和构造方法的执行顺序探索

本文讲述有关一个类的静态代码块,构造代码块,构造方法的执行流程问题.首先来看一个例子 /** * Created by lili on 15/10/19. */ class Person{ static { System.out.println("执行Person静态代码块"); } { System.out.println("执行Person构造代码块"); } public Person(){ System.out.println("执行Person构

关于继承中静态代码块,构造代码块,构造函数执行顺序

1 class HelloA { 2 3 public HelloA() { 4 System.out.println("HelloA"); 5 } 6 7 { System.out.println("I'm A class"); } 8 9 static { System.out.println("static A"); } 10 11 } 12 13 public class HelloB extends HelloA { 14 public

继承中參数传递及调用顺序

一.简单派生类的构造函数传參 C++语言的继承特性,指子类能够继承父类的属性和行为,并能够又一次定义或加入新的属性和行为. 父类中为private型的属性和行为尽管被继承,可是子类中仍不能訪问.在继承机制下.构造函数是不能被继承的,所以基类构造函数的參数要由子类构造函数传. 单一继承的子类构造函数的声明(.h中)形式为: 派生类构造函数名(參数总表) (); 单一继承的子类构造函数的定义(.cpp中)形式为: 派生类名::派生类构造函数名(參数总表) : 基类构造函数名 (參数名表) { 派生类

虚拟继承中子类和父类的构造函数顺序1

这里的inter1,2,3.要写base2的构造函数 final也写,否则里面的数据未初始化 inert2写的原因是假如有人使用直接使用inert2,里面数据就可以初始化了 总结一下,虚拟继承的基类就像一个指针一样差不多,但又有分别,因为弄了 private会使用不了数据. 以后每个要实现的类都要调用虚拟基类的构造函数,如上面的inter2. 写上我个人测试代码 class A{ protected://不能写private int a; public: A(int x) :a(x){} };

C#继承中构造函数,成员变量的执行顺序

public class Animal { static string baseClassName; protected string _skincolor; Instancevariable iv = new Instancevariable("父类实例成员变量"); static Instancevariable siv = new Instancevariable("父类静态成员变量"); static Animal() { baseClassName = &

JAVA继承中的构造器调用

关于继承中的构造器调用和调用顺序,做了个小测试,如下: class People {  String name;    //2,第二步,调用此无参构造器  public People() {   System.out.println(".父类的无参构造器");  }    //5,调用此有参构造器  public People(String name) {   System.out.println(".父类的有参构造器");   this.name = name;

继承中代码的执行顺序

在继承中代码的执行顺序为:1.父类静态对象和静态代码块   2.子类静态对象和静态代码块 3.父类非静态对象和非静态代码块  4.父类构造函数 5.子类非静态对象和非静态代码块  6.子类构造函数 1.对于本题来说:在只想new Sub(5)的时候,父类先初始化了 int flag = 1,然后执行父类的构造函数Super(),父类构造函数中执行的test()方法,因子类是重写了test()方法的,因此父类构造函数中的test()方法实际执行的是子类的test()方法,所以输出为Sub.test