欢迎来到代码驿站!

当前位置:首页 >

Java 非静态初始化的例子

时间:2020-09-12 19:00:19|栏目:|点击:

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

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 实现通过 post 方式提交json参数操作

栏    目:

下一篇:R语言ggplot2边框背景去除的实现

本文标题:Java 非静态初始化的例子

本文地址:http://www.codeinn.net/misctech/4895.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有