java之类的初始化过程

public class Hello{
static {
System.out.println("静态块");
}
{
System.out.println("实例块");
}
public Hello(){
System.out.println("构造方法");
}
public static void main(String []args){

}  

}
运行后是这样的:

静态块

在main方法里面实例化一下,即代码是这样的:

public class Hello{
static {
System.out.println("静态块");
}
{
System.out.println("实例块");
}
public Hello(){
System.out.println("构造方法");
}
public static void main(String []args){
Hello hello = new Hello();
}
}
运行后是这样的:

静态块

实例块

构造方法

通过上面的这两个例子可以看出来,当一个类加载的时候,调用静态块,当实例化一个对象的时候,实例块和构造方法被调用。

然后下面我这样写了写:

先写了一个父类:

public class Personal{
static{
System.out.println("父类的static块");
}
{
System.out.println("父类的实例块..");
}
public Personal(){
System.out.println("父类的构造方法..");
}
}
然后写了一个子类:

public class Child extends Personal{
static{
System.out.println("子类的static块");
}
public Child(){
System.out.println("子类的构造方法。");
}
{
System.out.println("子类实例块..");
}
}
在另外的一个类里面测试:

public class Test{
public static void main(String []args){
Child child = new Child();
}
}
运行后得到的结果是:

父类的static块

子类的static块

父类的实例块..

父类的构造方法..

子类实例块..

子类的构造方法..

由此可以得到的结论是:

类的初始化过程是:

1.父类静态块

2.子类静态块

3.父类实例块

4.父类构造器

5.子类实例块

6.子类构造器

原文地址:https://blog.51cto.com/14512197/2443844

时间: 2024-10-20 00:33:41

java之类的初始化过程的相关文章

Java中的初始化过程(转)

原文:http://www.cnblogs.com/mmbo/archive/2009/10/05/1578156.html 1.类成员自动初始化,基本类型总是最先初始化为0(boolean为false,(char)0),对象的引用初始化为null:2.类成员指定初始化,可以在类成员定义或构造器(包括其他方法)中给基本类型和非基本类型对象初始化,但这并不能阻止自动初始化首先进行:3.按类成员定义的顺序决定初始化的顺序:4.静态成员只有在第一次被访问时(class对象首次加载)才会被初始化,此后不

Java常见问题之初始化过程

假设有个名为Dog的类 对于静态字段: 1. 当首次创建类型为Dog的对象时,或者Dog类的静态字段/静态方法首次被访问时,Java解释器会查找类路径,以定位Dog.class文件. 2. 载入Dog.class,此时初始化所有静态字段,如果没有对静态字段进行显示初始化,则默认将所有基本类型字段都设置成标准初值,而引用字段被设置成null. 对于非静态字段: 1. 当创建类型为Dog的对象时,首先将在堆上为该对象分配存储空间,且存储空间会被清零,这就将所有基本类型字段都设置成了标准初值,而引用字

一道题反映Java的类初始化过程

Java的类初始化过程: 1. 父类的static成员变量,static语句块. 2. 子类的static成员变量,static语句块. 3. 父类的普通成员变量,构造函数. 4. 子类的普通成员变量,构造函数. 注意:如果下面一句话没看懂,没关系,看下面的一个例子就明白了~ 如果子类覆盖了父类的成员函数,该成员函数又在上面过程3中的构造函数中被调用,则此时调用的是子类的那个成员函数,如果成员函数中还含有子类中没有被初始化的普通成员变量,则若是int类型,默认初始化为0,若为对象类型,默认初始化

java代码的初始化过程研究

刚刚在ITeye上看到一篇关于java代码初始化的文章,看到代码我试着推理了下结果,虽然是大学时代学的知识了,没想到还能做对.(看来自己大学时掌握的基础还算不错,(*^__^*) 嘻嘻--)但是博主写的不够详细具体,我想在这详细谈一下java代码的具体初始化过程. 首先要清楚,初始化分为两个过程:类初始化.对象初始化. 类初始化是指类加载器将类加载到内存时,对类成员的初始化过程,也就是有static修饰的变量.对于加载完的类,它的类变量都会赋一个默认值,即使你定义时就赋值了.比如int类型就是0

JAVA对象的初始化过程

出处:http://blog.csdn.net/andrew323/article/details/4665379 下面我们通过两个例题来说明对象的实例化过程. 例1:   编译并运行该程序会有以下输出 Static Block Employee Company:china soft Non-Static Block Employee phone:0755-51595599 Employee(String) Empoloyee() 下面我们来对结果做分析: 1 在代码34行实例化对象时, 先对给

深入解析Java对象的初始化过程【看完这篇,你爸爸再也不用担心你不会实例Java 对象了】

这还是从一道Java 的面试题说起.不多说直接看这道面试题: public class Base{ private String baseName = "base"; //构造方法 public Base(){callName();} //对象方法 public void callName(){ System. out. println(baseName); } //静态内部类 static class Sub extends Base{ //静态内部类的字段 private Stri

Java中创建对象初始化过程的理解

以下面程序为例: 1.源码Cars.java通过编译生成Cars.class文件: 2.执行时分为两步: 第一步将Cars类的字节码加载到内存中, 第二步是new之后自动执行的.①将属性color和price初始化内存堆,并附上初始值null和0.0(声明,赋初值):②调用有两个参数的构造方法public Cars(String color,double price),把具体值"black"和60000赋值给形式参数color和price(即执行Cars("black&quo

Java类的初始化过程及清理

一.类的数据成员初始化 Java中类的数据成员初试化可能有两种形式. 在定义类成员变量的地方直接提供初始化值(这是C++中不允许的) 在构造器中初试化.(Java中不存在类似C++中的初始化列表) 两者的区别是,第一种方式是数据成员直接初试化为提供的初始化值,而在构造器中初始化,其实在数据成员已经初试化为默认值(比如基本类型如int 初始化为0,引用类型初试为null,其实在在构造器已经不能称为初始化了,应该是赋值) 初始化顺序 如果有静态变量则先初始化静态变量,如果基类中也有静态变量且之前没有

java对象的初始化过程和创建对象的几种方式

1.加载父类,加载父类的静态属性和静态代码块 2.加载子类,加载子类的静态属性和静态代码块 3.初始化父类中的非静态属性并赋初值,执行父类非静态代码块,执行父类构造. 4.初始化子类中的非静态属性并赋初值,执行代码块,执行构造 总之一句话,静态代码块内容先执行(父先后子),接着执行父类非静态代码块和构造方法,然后执行子类非静态代码块和构造方法. 静态属性和静态代码块的加载顺序:就是他们的编译顺序. 对象实例化的几种方式: 1.new对象: 2.通过工厂方法返回对象,如:String str =