zoukankan      html  css  js  c++  java
  • 初始化块:

    初始化块示例代码:

    import static java.lang.System.*;
    class Person{
    	//-第一个初始化块:
    	{
    		int a=6;
    		if(a>4){
    			out.println("第一个初始化块01!");
    		}
    		out.println("第一个初始化块02!");
    	}	
    	
    	//-第二个初始化块:
    	{
    		out.println("第二个初始化块!");
    	}
    	
    	//-本类无参数的构造器
    	public Person(){
    		out.println("无参数构造器!");
    	}
    	
    	public static void main(String[] args){
    		Person p=new Person();
    	}
    }	
    

     运行结果:

    总结:

    1、当创建Java对象时,系统总是先调用该类里定义的初始化块,按照定义的初始化块顺序,一个挨一个的执行

    2、只在创建Java对象时隐式的执行,而且在执行构造器之前执行

    3、创建多个初始化块没有意义,因为其总是在创建对象时隐式的、并且全部的执行,完全可以创建一个初始化块来包含进来,让程序简洁,可读性强。

    初始化和构造器的相同和不同:

    1、初始化块是一段固定执行的代码,不能接收任何参数和调用。

    2、都是对Java对象执行初始化操作,但是执行顺序不同,代码如下:

    public class InstanceInitTest{
    	
    	//-定义一个初始化块
    	{
    		a=6;//-对于初始化块内的实例变量定义,默认类型是指定的类型
    	}
    
    	//-初始化块之外,重新定义实例变量,并重新赋值	
    	int a=9;
    	
    	public static void main(String[] args){
    		System.out.println(new InstanceInitTest().a);
    	}
    }
    

     运行结果:

    总结:

    1、当Java创建一个对象时,系统先为该对象的实例变量分配内存(前提一加载)

    2、接着对这些变量执行初始化,顺序是:先初始化块内后构造器内

    注意:不带static修饰的初始化块只是对对象进行初始化,而不是对类进行初始化,想要对类进行初始化,要用static进行修饰,变成静态初始化块

    初始化块的本质:

    1、实际上初始化块是一个假象

    2、当编译完java文件后,把生成的.class文件反编译回来,查看反编译代码会发现,在Java类中定义的初始化块会消失

    3、原先书写的初始化块中代码会被还原到每个构造器中,并位于构造器中代码的前面,针对上面代码类,反编译过来的代码如下:

    import java.io.PrintStream;
    
    class Person
    {
      public Person()
      {
        int i = 6;
        if (i > 4) {
          System.out.println("第一个初始化块01!");
        }
    System.out.println("第一个初始化块02!"); System.out.println("第二个初始化块!"); System.out.println("无参数构造器!"); } public static void main(String[] paramArrayOfString) { Person localPerson = new Person(); } }
  • 相关阅读:
    Hibernate Tomcat JNDI数据源配置(转)
    使用Spring的@Autowired 实现DAO, Service, Controller三层的注入(转)
    丢弃重口味的xml配置--spring4用groovy配置bean(转)
    Java 对象的生命周期
    设计模式学习总结(23) 中介者模式
    WebSocket初探
    设计模式 之 建造者
    谈谈CListCtrl 扩展风格设置方法-SetExtendedStyle和ModifyStyleEx 比較
    linux signal 处理
    UVA 1546
  • 原文地址:https://www.cnblogs.com/baby-zhude/p/8046160.html
Copyright © 2011-2022 走看看