亲宝软件园·资讯

展开

Java 非静态初始化 Java 非静态初始化的例子

laosun 人气:0
想了解Java 非静态初始化的例子的相关内容吗,laosun在本文为您仔细讲解Java 非静态初始化的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:Java,非静态初始化,Java,静态初始化,下面大家一起来学习吧。

在继承关系中,静态初始化、非静态初始化和构造函数的执行顺序

public class ExA {
  static {
    System.out.println("父类--静态代码块");
  }
 
  public ExA() {
    System.out.println("父类--构造函数");
  }
 
  {
    //非静态代码块
    System.out.println("父类--非静态代码块");
  }
 
  public static void main(String[] args) {
    new ExB();
  }
}
 
class ExB extends ExA {
  static {
    System.out.println("子类--静态代码块");
  }
  {
    //非静态代码块
    System.out.println("子类--非静态代码块");
  }
 
  public ExB() {
    System.out.println("子类--构造函数");
  }
}

执行结果:

父类--静态代码块
子类--静态代码块
父类--非静态代码块
父类--构造函数
子类--非静态代码块
子类--构造函数

从上边的例子我们可以得出非静态代码块的初始化顺序是在静态代码块的初始化之后。
下边我们再来看另一个例子:

class Mug{
  public Mug(int marker) {
    System.out.println("Mug("+marker+")");
  }
  void f(int marker){
    System.out.println("f("+marker+")");
  }
}
public class Mugs {
  Mug mug1;
  Mug mug2;
   
  {
    //非静态代码块
    mug1 = new Mug(1);
    mug2 = new Mug(2);
    System.out.println("mug1 & mug2 initialized");
  }
  Mugs(){
    System.out.println("Mugs()");
  }
   
  Mugs(int i){
    System.out.println("Mugs(int i)");
  }
   
  public static void main(String[] args) {
    System.out.println("Inside main()");
    //首先执行Mugs类中非静态代码块,创建两个对象。然后执行无参构造函数
    new Mugs();
    System.out.println("new Mugs() completed");
    //再执行Mugs类中非静态代码块,这也是和静态代码块只初始化一次的不同之后,其次调用有参构造函数
    new Mugs(1);
    System.out.println("new Mugs(1) completed");
  }
 
}

加载全部内容

相关教程
猜你喜欢
用户评论