zoukankan      html  css  js  c++  java
  • java类的成员初始化顺序

    属性、方法、构造方法和自由块都是类中的成员,在创建类的对象时,类中各成员的执行顺序:
    1.父类静态成员和静态初始化快,按在代码中出现的顺序依次执行。
    2.子类静态成员和静态初始化块,按在代码中出现的顺序依次执行。
    3. 父类的实例成员和实例初始化块,按在代码中出现的顺序依次执行。
    4.执行父类的构造方法。
    5.子类实例成员和实例初始化块,按在代码中出现的顺序依次执行。
    6.执行子类的构造方法。

    public class Test {
    	/**
    	 * Description
    	 * @param args
    	 */
    	public static void main(String[] args) {
    		Son s = new Son();
    	}
    
    }
    
    class Parent{
    
    	{
    		System.out.println("parent中的初始化块");
    	}
    	static{
    		System.out.println("parent中static初始化块");
    	}
    	
    	public Parent(){
    		System.out.println("parent构造方法");
    	}
    }
    
    class Son extends Parent{
    	{
    		System.out.println("son中的初始化块");
    	}
    	
    	static{
    		System.out.println("son中的static初始化块");
    	}
    	
    	public Son(){
    		System.out.println("son构造方法");
    	}
    	
    }
    

      输出结果:

    parent中static初始化块
    son中的static初始化块
    parent中的初始化块
    parent构造方法
    son中的初始化块
    son构造方法
    

      初始化块主要用于对象的初始化操作,在创建对象时调用,可以用于完成初始化属性值、加载其他的类的功能。
    初始化块和构造方法功能类似,可以再创建对象的时候完成一些初始化的操作,一般的情况下,构造方法初始化和初始化块初始化可以通用。

    构造方法在初始化的时候可以通过参数船只,但是初始化块不能,初始化块的初始化在构造方法之前执行,如果搞糟方法多次重载,此时可以考虑构造方法中共通的代码放到初始化块中进行初始化。

    静态初始化块和非晶态初始化块的区别?
    非静态初始化块主要是用于对象的初始化操作,在每次创建对象的时都要调用一次,其执行顺序在构造方法之前。
    在初始化块之前有static修饰,则为静态初始化块。由于非静态成员不能再静态方法中使用,同样也不能在静态初始化块中,因此,静态初始化块主要用于初始化静态变量和静态方法,静态初始化块只调用一次,是在类的第一次加载到内存时,并非一定要创建对象才执行,
    静态初始化块比非静态初始化块先执行。

     

  • 相关阅读:
    (转)android头像设置:从本地照片库或拍照获取并剪裁
    获取短信验证码之后按钮背景变化并且出现倒计时
    欢迎界面的下方指示位置圆
    android 关于Toast重复显示解决方法
    判断是不是电话号码
    (转)根据ImageView的大小来压缩Bitmap,避免OOM
    (转)android屏幕适配
    GSON解析JSON
    Linux-命令-cut
    Linux-自疑惑
  • 原文地址:https://www.cnblogs.com/lgfeng/p/2721989.html
Copyright © 2011-2022 走看看