• Java中static代码块,{}大括号代码块,构造方法代码块执行顺序!


    注:下列代码中的注释都是JUnit4单元测试运行结果。

    首先,没有父类的(父类是Object)的类A

    package Static.of;
    
    public class A {
    
        {
            System.out.println("我是父类-----大括号中的代码");
        }
        
        static{
            System.out.println("我是父类-------static代码块");
        }
        
        public A(){
            System.out.println("我是父类A----------的构造方法");
        }
    
    }
    @Test 
        public void fathClass(){
            A a = new A();//父类
            /**
             *  我是父类-------static代码块
                我是父类-----大括号中的代码
                我是父类A----------的构造方法
             */
        }

    由上面运行结果可知:只要没有父类(只有Object作为父类)那么执行顺序:static代码块,大括号,构造方法。

    继承A的类B

    package Static.of;
    
    public class B extends A {
    	{
    		System.out.println("我是子类大括号中的代码");
    	}
    	
    	static{
    		System.out.println("我是子类static代码块");
    	}
    	
    	public B(){
    		System.out.println("我是子类B的构造方法");
    	}
    }
    

      继承A的类C

    package Static.of;
    
    public class C extends A {
    	{
    		System.out.println("我是C类 中的大括号");
    	}
    	
    	public C (){
    		System.out.println("我是C中的构造方法");
    	}
    }
    

     

    @Test
    public void sonBClass(){
    B b = new B();
    /**
    * 我是父类-------static代码块
    我是子类static代码块
    我是父类-----大括号中的代码
    我是父类A----------的构造方法
    我是子类大括号中的代码
    我是子类B的构造方法

    */

    }

      

    @Test
    	public void sonCClass(){
    		C c = new C();
    		/**
    		 *  我是父类-------static代码块
    			我是父类-----大括号中的代码
    			我是父类A----------的构造方法
    			我是C类 中的大括号
    			我是C中的构造方法
    		 */
    	}
    

      

     

    多态语法创建对象

    	@Test
    	public void polymorphicAB(){
    		A a = new B();
    		/**
    		 *  我是父类-------static代码块
    			我是子类static代码块
    			我是父类-----大括号中的代码
    			我是父类A----------的构造方法
    			我是子类大括号中的代码
    			我是子类B的构造方法
    		 */
    	}
    	@Test
    	public void polymorphicAC(){
    		A a = new C();
    		/**
    		 *  我是父类-------static代码块
    			我是父类-----大括号中的代码
    			我是父类A----------的构造方法
    			我是C类 中的大括号
    			我是C中的构造方法
    		 */
    	
    	}
    

      

    根据例子总结
    结果是集合{父类static,子类static,父类大括号,父类构造函数,子类大括号,子类构造函数}的一个子集

     

    {}大括号里的是初始化块,这里面的代码在创建java对象时执行,而且在构造器之前!其实初始化块就是构造器的补充,初始化块是不能接收任何参数的,定义的一些所有对象共有的属性、方法等内容时就可以用初始化块了初始化!! 好处是可以提高初始化块的复用,提高整个应用的可维护性。

  • 相关阅读:
    三道 华为 面试题
    百度面试题01——50个阶梯,你一次可以上一阶或两阶,走上去,共有多少种走法?
    一首笔试题 C实现
    图像缩放算法及速度优化——(一)最近邻插值
    一个简单的二叉树排序算法
    OS的四大特征
    OS的目的和功能
    桶排序
    快速排序
    OS的运行机制
  • 原文地址:https://www.cnblogs.com/theRhyme/p/7538020.html
Copyright © 2020-2023  润新知