关于初始化块与构造函数的关系

  public class A{

    public static int nextID;

    public static int ID;

    public String name ;

      {

        ID = nextID;

        nextID++;

        }

    public a(){

        this.name = "";

        

      }

    public a(String name){

        this.name = name;

      }

         }

   当我们用构造方法构造对象的时候,比如员工,不管调用哪个构造方法,每new一个对象出来就会自动的给这个员工分配一个ID因为这个ID的自增放在了初始化块里面,当构造对象的时候这个初始化块内的代码会自动插入没个构造方法里面,也就是说如果每个构造方法中如果有重复的代码那么可以把这些代码提出来放到初始化块里边,这样当我们在构造对象的时候构造方法里面会自动加入初始化块内的代码。就像这个例子,当我们想new出来的员工每个人的ID是唯一的时候,而又不想在两个构造函数里面都加上这样的代码,那么就可以把共同的代码提出来放在初始化块里边。初始化块在编译的时候会自动加到没个构造方法的前面,在cmd模式下用javap -c这个命令查看。

时间: 2024-08-12 05:48:51

关于初始化块与构造函数的关系的相关文章

Java中的初始化顺序(静态成员、静态初始化块,普通成员、普通初始化块、构造函数)

本文链接    http://blog.csdn.net/xiaodongrush/article/details/29170099 参考文章     http://my.oschina.net/leoson/blog/103251 1. 一个类中的初始化顺序 (静态变量.静态初始化块)=>(变量.初始化块.构造器). 2. 两个具有继承关系类的初始化顺序 父类的(静态变量.静态初始化块)=> 子类的(静态变量.静态初始化块)=> 父类的(变量.初始化块.构造器)=> 子类的(变量

Java的初始化块、静态初始化块、构造函数的执行顺序及用途探究

随笔- 40  文章- 0  评论- 1 Java的初始化块.静态初始化块.构造函数的执行顺序及用途探究 Java与C++有一个不同之处在于,Java不但有构造函数,还有一个”初始化块“(Initialization Block)的概念.下面探究一下它的执行顺序与可能的用途. 执行顺序 首先定义A, B, C三个类用作测试,其中B继承了A,C又继承了B,并分别给它们加上静态初始化块.非静态初始化块和构造函数,里面都是一句简单的输出. 主类Main里面也如法炮制. 1 class A { 2 st

java学习之静态块、显示初始化块、构造函数、this在构造函数中的调用,区别联系与调用顺序

1.静态代码块---给类初始化,随着类的加载而执行,只执行一次(注:仅创建类的引用(即只申明)并不会触动对该类的加载) /** * 静态代码块 * 特点:随着类的加载而执行,只执行一次,用于给类经行初始化 */ static{ System.out.println("a"); } 2.(显示初始化块)构造代码块---给对象初始化, /** * 构造代码块 * 作用:给对象进行初始化 * 对象一建立就运行,而且优先于构造函数执行 * * 和构造函数的区别 * 构造代码块是给所有对象进行统

关于Java静态代码块、初始化块、构造函数的调用顺寻问题?

public class ClassA { public ClassA(){ System.out.println("A 构造..."); } { System.out.println("this is A...."); } static{ System.out.println("A static..."); } } public class ClassB extends ClassA{ public ClassB(){ System.out.p

初始化块与构造方法

class InitializeBlockClass { {    field=200; }    public int field=100;    public InitializeBlockClass (int value){    this.field=value; } public InitializeBlockClass(){ }     public static void main(String[] args) {    // TODO Auto-generated method

java静态无名函数(静态初始化块)与java的运行流程

public class Test { public Test() { System.out.println(" 构造函数"); } @1:静态初始化块static { System.out.println("static{}"); } @2:初始化块{ System.out.println("{}"); } public static void main(String[] args) { System.out.println("mai

static之静态初始化块

static之静态初始化块 所有的静态初始化块都优先执行,其次才是非静态的初始化块和构造函数,它们的执行顺序是:    父类的静态初始化块    子类的静态初始化块    父类的初始化块    父类的构造函数    子类的初始化块    子类的构造函数      也就是说程序运行时静态初始化块最先被执行,然后执行普通初始化块,最后才执行构造方法.由于静态初始化块只在类加载时执行一次,所以当再次创建对象 hello2 时并未执行静态初始化块. 比如下面的代码: 运行结果: 需要特别注意:1)静态初

Java的初始化块

Java的初始化块分为静态初始化块和非静态初始化块 静态初始化块 static{ //初始化内容 } 非静态初始化块 { //初始化内容 } 静态初始化块仅能初始化类变量,即static修饰的数据成员.非静态初始化块在对象每次生成时都会被执行一次,可以初始化类的实例变量.两种初始化块不可以传参数. 非静态初始化块在构造函数执行时且构造函数主体代码没执行前执行 静态初始化块.非静态初始化块.构造函数 执行的顺序为:静态初始化块->非静态初始化块->构造函数 非静态初始化块在匿名内部类中使用较多,

Java:初始化块、静态初始化块、构造方法的执行顺序

1. 静态初始化块 静态初始化块只在类首次加载时执行一次,同时静态初始化块只能给静态变量赋值,不能给普通成员变量赋值. 2. (非静态)初始化块 (非静态)初始化块在每次生成实例对象时都执行一次,可以给任意变量赋值. 3. 构造方法 构造方法在每次生成实例对象时都执行一次 4. 执行顺序:静态初始化块 --> 初始化块 --> 构造方法 测试代码如下: 1 public class Son extends Father { 2 static int sNum = 0; 3 int num =