Java静态初始化,实例初始化以及构造方法
来源:互联网 发布:云计算是什么意思 编辑:程序博客网 时间:2024/05/17 07:23
首先有三个概念需要了解:
一.静态初始化:是指执行静态初始化块里面的内容。
二.实例初始化:是指执行实例初始化块里面的内容。
三.构造方法:一个名称跟类的名称一样的方法,特殊在于不带返回值。
我们先来看一段程序结果:
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静态初始化,实例初始化以及构造方法
- Java静态初始化,实例初始化以及构造方法
- Java静态初始化,实例初始化以及构造方法
- Java静态初始化,实例初始化以及构造方法
- Java静态初始化,实例初始化以及构造方法复习~
- Java静态初始化,非静态初始化以及构造方法
- Java静态块(静态初始化,实例初始化和构造方法)总结
- Java 构造方法,初始化块,静态初始化块
- java中的构造方法,初始化块,静态初始化块
- Java类初始化顺序问题:静态初始化块,非静态初始化块以及构造函数
- java,实例初始化块,静态初始化块,clone方法
- Java类的初始化顺序 (静态变量、静态初始化块、变量、初始化块、构造方法)
- 静态初始化块、非静态初始化块以及它们与构造方法的调用顺序
- Java——初始化块,初始化块与构造方法,静态初始化块
- java静态初始化块、实例初始化块
- java构造方法、静态变量初始化顺序的小例子
- 静态初始化块,初始化块,构造函数,静态方法
- Java初始化顺序,静态变量,static块,实例变量,构造器的初始化顺序
- 慢性鼻炎保健操
- dlopen实践
- TCHAR类型(摘自百度百科)
- new自动补全
- festival - ubuntu下的TTS引擎
- Java静态初始化,实例初始化以及构造方法
- 展示一下爱机,诺基亚
- 决定入驻CSDN,将原先博客空间进行转接
- joj2431
- HDU 1856 more is better
- linux GDB调试程序
- “A Taste of Concurrency”
- 进程间通信机制之三:共享内存
- Windows字符串类型 CHAR* WCHAR* LPSTR LPCSTR