Java 非静态初始化的例子

 更新时间:2020年09月12日 16:27:36   作者:laosun  
非静态初始化和静态初始化一模一样,只不过少了static关键字。但是如果两者共存的话,非静态初始化是比静态初始化慢一拍的。下边我们举两个例子来看一下。

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

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");
  }
 
}

以上就是Java 非静态初始化的例子的详细内容,更多关于Java 非静态初始化的资料请关注脚本之家其它相关文章!

相关文章

最新评论