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

  • 相关阅读:
    SQLServer2005删除log文件和清空日志的方案
    使用sql语句创建修改SQL Server标识列(即自动增长列)
    C# 使用ffmpeg.exe进行音频转换完整demo-asp.net转换代码
    web页面如何播放amr的音频文件
    IIS7.5 伪静态 脚本映射 配置方法
    多表数据连接 Left join
    .NET 开发快捷键大全
    微信开发-ACCESS TOKEN 过期失效解决方案
    HTML5常用的方法
    IIS 7.0 部署MVC
  • 原文地址:https://www.cnblogs.com/theRhyme/p/7538020.html
Copyright © 2011-2022 走看看