zoukankan      html  css  js  c++  java
  • Java静态初始化,实例初始化以及构造方法

    首先有三个概念需要了解:

    一.静态初始化:是指执行静态初始化块里面的内容。

    二.实例初始化:是指执行实例初始化块里面的内容。

    三.构造方法:一个名称跟类的名称一样的方法,特殊在于不带返回值。

    我们先来看一段程序结果:

        package com; 
        class Book{      
        public static int booksum=0;//静态变量      
            static{//这是静态初始化块 
            print();      
                System.out.println("this is static block");      
            }      
            {//实例初始化块      
                System.out.println("初始化块:"+booksum);      
            }      
            public Book(){//构造方法      
                System.out.println("this is Book's constructor~");      
                booksum+=1;      
            }      
            public static void print(){//静态方法      
                System.out.println("this is static method~");      
            }  
            public static void main(String []args){ 
                //Book book=new Book(); 
            } 
        }
       

    执行结果:

    this is static method~

    this is static block

    如果把 

    public static void main(String []args){ 
            //Book book=new Book(); 
          }
       

    的注释去掉的话,运行结果为:

    this is static method~

    this is static block

    初始化块:0

    this is Book's constructor~

    总结:

    仅从代码执行的角度来探讨Java加载类、创建对象的过程,并没有深入到JVM的机制中去。

    1.一个对象第一次被创建时,先要加载该对象所属的类,即对应的.class文件,当然如果类已经加载,再次创建该类的对象时,就不再需要重新加载类了。而一个类加载的时候,有三个部分需要加载,一个是静态变量,再然后是静态方法,然后是静态初始化块。 (见到第一次执行结果就知道了,由于没有创建实例所以初始化块不执行)

    2.然后开始创建该类的实例了,当然如果静态方法跟静态初始化对象中有对象的创建时,就继续加载该对象的类,当然已经加载了该对象的类的话就不需要再次加 载了。那么对象实例的创建过程是什么呢?首先是成员变量的引入,然后是实例初始化块,之后才是构造方法,构造方法执行完成之后才算把这个对象给创建出来了。

    在这个过程中,真正可以编写执行代码的地方有三个,静态初始化、实例初始化以及构造方法。从以上的分析中我们可以看到,这三个代码块的执行顺序是先类的静态初始化,再实例初始化,最后执行构造方法。也就是说,静态初始化是属于类加载的过程,所以它只执行一次,而实例初始化是每个对象创建时都会执行一次,而构造方法跟实例初始化其实也差不多,不过它在实例初始化之后执行,而且构造方法可以重载多个,执行哪个构造方法是根据你的选择来的。

    可以把main () 函数加一条语句看看:

        public static void main(String []args){ 
            Book book=new Book(); 
            Book book1=new Book(); 
         }
       

    此时执行结果为:

    this is static method~

    this is static block

    初始化块:0

    this is Book's constructor~

    初始化块:1

    this is Book's constructor~

    这说明实例初始化是每个对象创建时都会执行的。

  • 相关阅读:
    Java补漏(一)
    PHP实现程序单例执行
    zabbix 配置外部邮件server发送邮件报警
    HTML+JavaScript实现链式运动特效
    对思归者的建议
    去除Notepad++打开文件后文字下面出现红色波浪线的问题
    ANSI是什么?
    Eclipse各版本代号一览表以及官网上有很多版本的eclipse,下载哪个版本比较合适呢?
    Java语言的发展史
    win10 64位JLink v8固件丢失修复总结
  • 原文地址:https://www.cnblogs.com/zengda/p/4341566.html
Copyright © 2011-2022 走看看