精华内容
下载资源
问答
  • Java初始化顺序

    2021-01-21 17:12:55
    1 无继承情况下的Java初始化顺序: class Sample { Sample(String s) { System.out.println(s); } Sample() { System.out.println(Sample默认构造函数被调用); } } class Test{ static Sample sam=new...
  • java初始化顺序

    2014-02-10 13:41:00
    java初始化顺序

    java初始化顺序


















    展开全文
  • Java初始化过程

    2017-11-21 20:34:01
    Java初始化 总结:初始化顺序:父类静态变量——> 父类静态代码块 ——>子类静态变量 ——> 子类静态代码块 ——>父类非静态变量 ——>父类构造代码块——> 父类构造...

    Java初始化

    总结:初始化顺序:父类静态变量——> 父类静态代码块 ——>子类静态变量 ——> 子类静态代码块 ——>父类非静态变量 ——>父类构造代码块——> 父类构造函数 ——>字类非静态变量 ——>子类构造代码块——> 子类构造函数

    静态代码块只会被执行一次!!!!

    1. 关键:Java一个类的成员变量初始化先于构造函数执行。详细请参考:

    参考博客:传送门

    2. 该代码为何输出:YXYZ

    class X{
        Y y=new Y();
        public X(){
            System.out.print("X");
        }
    }
    class Y{
        public Y(){
            System.out.print("Y");
        }
    }
    public class Z extends X{
        Y y=new Y();
        public Z(){
            System.out.print("Z");
        }
        public static void main(String[] args) {
            new Z();
        }
    }

    3.原因

    执行顺序如下列注释序号所示

    //下面代码输出YXYZ的原因,和Java调用机制有关
    class X{
    
        //5.初始化动作总是先于构造函数执行,所以先执行类的初始化动作
        //6.此处会调用类Y的构造函数
        Y y=new Y();
        public X(){
            //3.此处隐藏了super()语句,所以调用直接父类Object的构造函数
            //4.Object没有父类,所以程序返回到此处.
            //10.本类初始化完成,执行权回到此处,打印输出X,程序返回
            System.out.print("X");
        }
    }
    class Y{
        public Y(){
            //7.此处隐藏了super()语句,所以调用直接父类Object的构造函数
            //8.Object没有父类,所以程序返回到此处.
            //9.没有成员变量需要初始化,所以继续执行下面代码,打印输出Y,程序返回
    
            //13.此处隐藏了super()语句,所以调用直接父类Object的构造函数
            //14.Object没有父类,所以程序返回到此处.
            //15.没有成员变量需要初始化,所以继续执行下面代码,打印输出Y,程序返回
            System.out.print("Y");
        }
    }
    public class Z extends X{
        //12.程序来到此处执行初始化动作,此处会调用类Y的构造函数
        Y y=new Y();
        public Z(){
            //2.此处隐藏了super()语句,所以调用直接父类X的构造函数
            //11.执行权回到此处,但本类成员变量尚未初始化,先初始化
            //16.本类初始化完成,执行权回到此处,打印输出Z,程序返回
            System.out.print("Z");
        }
        public static void main(String[] args) {
            //1.调用类Z的构造函数
            new Z();
            //17.程序执行到此处,结束。
        }
    }
    展开全文
  • JAVA初始化顺序

    千次阅读 2007-04-23 21:03:00
    JAVA初始化顺序 1、调用顺序: JAVA类首次装入时,会对静态成员变量或方法进行一次初始化,但方法不被调用是不会执行的,静态成员变量和静态初始化块级别相同,非静态成员变量和非静态初始化块级别相同。 先初始化父类...
    JAVA初始化顺序
    1 、调用顺序:
    JAVA类首次装入时,会对静态成员变量或方法进行一次初始化,但方法不被调用是不会执行的,静态成员变量和静态初始化块级别相同,非静态成员变量和非静态初始化块级别相同。
    先初始化父类的静态代码--->初始化子类的静态代码-->
    (创建实例时,如果不创建实例,则后面的不执行)初始化父类的非静态代码--->初始化父类构造函数---> 初始化子类非静态代码--->初始化子类构造函数
    其他说明:
    2 、类只有在使用New调用创建的时候才会被JAVA类装载器装入
    3、创建类实例时,首先按照父子继承关系进行初始化
    4、类实例创建时候,首先初始化块部分先执行,然后是构造方法;然后从 本类继承的子类的初始化块执行,最后是子类的构造方法
    5、类消除时候,首先消除子类部分,再消除父类部分
    实例:
            abstract class base
            {
             public int age=getNumber(100);
             static
             {
               System.out.println("base static block");
            }
            {
               System.out.println("base nonstatic block");
             }
        static int sage=getNumber(50);
        base()
        {
            System.out.println(age);
            System.out.println("base start");
            draw();//会调用子类覆盖后的方法
            System.out.println("base end");
            
        }
        static int getNumber(int base)
        {
            System.out.println("base.getNumber int"+base);
            return base;
        }
        public void draw()
        {
            System.out.println("base.draw");
        }
    }
    public class initializeOrder extends base{
        public int age=getNumber(1001);
        private int _radius=getNumber(10);
        static int sage=getNumber(250);
        static
        {
            System.out.println("subclass static block");
        }
        {
            System.out.println("subclass nonstatic block");
        }
        initializeOrder(int radius)
        {
            _radius=radius;
            System.out.println(age);
            System.out.println("initializeOrder initialized");
        }
        public void draw()
        {
            System.out.println("initializeOrder.draw "+_radius);
        }
        /** *//**
         * @param args
        */
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            new initializeOrder(1000);
        }
    }

     运行结果:

    1001
    initializeOrder initialized


    C:/java>java    initializeOrder
    base static block
    base.getNumber int50
    base.getNumber int250
    subclass static block
    base.getNumber int100
    base nonstatic block
    100
    base start
    initializeOrder.draw 0
    base end
    base.getNumber int1001
    base.getNumber int10
    subclass nonstatic block

    注意:如果注销后面的

    new initializeOrder(1000);

    则输出结果是:

    base static block
    base.getNumber int50
    base.getNumber int250
    subclass static block

    这正好说明了上面给出的调用顺序的正确性.

     
     
    展开全文
  • java初始化顺序

    2009-11-30 19:14:00
    初始化的实际过程为:在其它任何事物发生之前,将分配给对象的存储空间初始化成二进制的零。父类static 块或变量子类static块或变量父类的显式初始化父类构造函数子类的显式初始化子类的构造函数此过程中若有父类...

    初始化的实际过程为:

    1. 在其它任何事物发生之前,将分配给对象的存储空间初始化成二进制的零。
    2. 父类static 块或变量
    3. 子类static块或变量
    4. 父类的显式初始化
    5. 父类构造函数
    6. 子类的显式初始化
    7. 子类的构造函数

    此过程中若有父类构造体中调用方法可被子类重载,则JVM会从最低子类对象处寻找此方法,找到则执行,虽然此时对象还未完全生成(可能会造成潜在的错误)。

    展开全文
  • C++和Java初始化顺序的比较代码, 详细的解说请参考博客地址, http://blog.csdn.net/ostrichmyself/archive/2010/11/25/6035538.aspx
  • 爱回收 笔试题—Java初始化顺序代码如下:class A { // static域 static { System.out.println("类A static域"); } // 非static域 直接括号内的内容是在创建java对象时执行,而且在构造器之前执行! { System....
  • 2.继承情况下Java初始化顺序 用代码和输出直接说明: package com.kael; /** * * @Title:Demo004 * @Description: * @Copyright:Copyright (c) 2012 * @Date:2012-7-25 * @author feilong.li */ ...
  • 1 无继承情况下的Java初始化顺序: class Sample { Sample(String s) { System.out.println(s); } Sample() { System.out.println("Sample默认构造函数被调用"); } } cla
  • 1、问题的发现 最近在进行数据库方面的编码时,无意间发现了一个报错信息,“Cannot reference XXX before supertype constructor has ...因此,Coder哥编写了一个验证Java初始化顺序的验证代码 /** * 父类 */ pub
  • 初始化(initialization)其实包含两部分: 1.类的初始化(initialization class & interface) 2.对象的创建(creation of new class instances)。 因为类的初始化其实是类加载(loading o
  • java初始化

    2007-12-10 15:43:57
    Java 初始化过程的总体顺序
  • 本篇文章介绍了,Java对象初始化顺序的使用。需要的朋友参考下

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 733,108
精华内容 293,243
关键字:

java初始化过程

java 订阅