zoukankan      html  css  js  c++  java
  • 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对象时执行,而且在构造器之前!其实初始化块就是构造器的补充,初始化块是不能接收任何参数的,定义的一些所有对象共有的属性、方法等内容时就可以用初始化块了初始化!! 好处是可以提高初始化块的复用,提高整个应用的可维护性。

  • 相关阅读:
    oracle 静默安装
    浅析hybrid模式下地支付宝钱包和微信
    LeetCode96_Unique Binary Search Trees(求1到n这些节点能够组成多少种不同的二叉查找树) Java题解
    hdu 5411 CRB and Puzzle 矩阵高速幂
    Hadoop作业性能指标及參数调优实例 (三)Hadoop作业性能參数调优方法
    实现Android4.4系统设置分页滑动浏览功能
    oracle 数据库中数据导出到excel
    Nginx配置upstream实现负载均衡
    公司须要内部的地图服务,准备自己去开发可是成本太高,如今有没有专门为企业提供GIS地图开发的产品呀?大概价格多少?
    图片在内存中的占用的空间大小
  • 原文地址:https://www.cnblogs.com/theRhyme/p/7538020.html
Copyright © 2011-2022 走看看