• Java代码的执行顺序一


    JAVA是一门面向对象的编程语言,在面试的时候除了一道题,把我搞蒙了。代码块和构造器,谁先执行?

    答案是肯定的了: 不考虑继承的情况下,1静态代码块,2代码块,3构造器

    说明: 
    不考虑继承关系,一般的类里面包含: 
    1、静态代码块(静态区、静态变量等/用static修饰的) 
    2、代码块(一块代码/j就是用{}抱起来的代码) 
    3、构造方法(默认的,无参的,有参的构造器)

    new一个对象时,其执行顺序也是1、2、3先后执行,特别强调的是:代码块优先构造器执行 


    考虑继承关系:子类与父类的执行顺序是: 
    1、先执行父类的静态代码块(父1) 
    2、子类的静态代码块(子1) 
    3、父类构造代码块(父2) 
    4、父类构造方法(父3) 
    5、子类构造代码块(子2) 
    6、子类构造方法(子3)

    当一个类从被JVM装载开始,各种代码的执行顺序大致如下:

    这里的执行顺序同子类构造中有一个默认的父类构造super()无关,不是执行到隐藏的super()才开始初始化父类的,类的初始化是分层初始化:

    1.即先初始化父类,再初始化子类,初始化每个类的过程中,进行类的初始化工作,

    2.先进性成员变量的初始化,成员变量的初始化顺序是:默认初始化,即int为0这种->显示初始化,例如给int型显示初始化了值->构造方法初始化,所以是这里执行到了构造方法。 

    但是一定要注意,父类初始化选择的构造方法却和子类中super 选择的构造相关。


    先看一个实例,证实以上结论:

    package com.gzu.pyu.thinking.in.java;
    
    public class JavaExecutionOrder {
        
        public static void main(String[] args) {
    
            new HelloA();        
    //        new HelloB();        
        }
    
    }
    
    
    class HelloB extends HelloA{    
         
        HelloB(){
           System.out.println("HelloB constructor");
        }
        
        static{
            System.out.println("HelloB static code block");
        }
        
        {
            System.out.println("HelloB code block");
        }
    }
    
    class HelloA{
        
        HelloA(){
           System.out.println("HelloA constructor");
        }
        
        static{
            System.out.println("HelloA static code block");
        }
        
        {
            System.out.println("HelloA code block");
        }
    }

    不考虑继承关系,先执行new HelloA();结果如下:

    考虑继承关系,先执行new HelloB();结果如下:

     

  • 相关阅读:
    网页定位导航
    position元素的定位
    节点属性
    css控制换行,断词
    css隐藏多余文字显示...
    重绘和回流
    CSS属性书写顺序
    模拟select
    常用html标签
    clientHeight、scrollHeight和offsetHeight基本用法
  • 原文地址:https://www.cnblogs.com/gzu-link-pyu/p/8542852.html
Copyright © 2020-2023  润新知