您的位置:首页 > 编程语言 > Java开发

Java 类、对象内容回顾

2016-09-27 19:51 225 查看

一、类的初始化

类的初始化:主要是执行执行类中的静态块初始化和静态变量初始化

当类被用到的时候就会进行初始化,但是不一定会被实例化实例化的时候才会执行实例域的初始化和初始化代码块的代码

class ThirdInit{
private int age=0;//这种是第一种方式
private String name="initial name";
private static String staticField="initial staticField";
{
System.out.println("初始化之前 "+age+" "+name+" "+staticField);
age=10;
name="static name";
staticField="static staticfield";
System.out.println("初始化之后 "+age+" "+name+" "+staticField);

}
static {
/**
* 静态初始化块:用来初始化静态变量的,静态初始化块中只能接触静态变量
*/
System.out.println("静态初始化之前"+staticField);
staticField="static name";
System.out.println("静态初始化之后"+staticField);
}
public ThirdInit(String name,int age,String staticField){
System.out.println("构造器执行之前:"+age+" "+name+" "+staticField);
this.name=name;
this.age=age;
this.staticField=staticField;
System.out.println("构造器执行之后:"+age+" "+name+" "+staticField);

}

}


结果:

静态初始化之前initial staticField
静态初始化之后static name
初始化之前 0 initial name static name
初始化之后 10 static name static staticfield
构造器执行之前:100 new name new static field
构造器执行之后:100 new name new static field


结果说明:

当实例化一个类的时候顺序:先是静态的,然后是显示的,最后才是构造器本身

先是静态域和静态块顺序执行,显示的域初始化和块初始化顺序执行、最后是构造器本身

----------

class ThirdInit{
private int age=0;//这种是第一种方式
private String name="initial name";
private static String staticField="initial staticField";
{
System.out.println("初始化之前 "+age+" "+name+" "+staticField);
age=10;
name="static name";
staticField="static staticfield";
System.out.println("初始化之后 "+age+" "+name+" "+staticField);

}
static {
/**
* 静态初始化块:用来初始化静态变量的,静态初始化块中只能接触静态变量
*/
System.out.println("静态初始化之前"+staticField);
staticField="static name";
System.out.println("静态初始化之后"+staticField);
}
public ThirdInit(String name,int age,String staticField){
System.out.println("构造器执行之前:"+age+" "+name+" "+staticField);
this.name=name;
this.age=age;
this.staticField=staticField;
System.out.println("构造器执行之后:"+age+" "+name+" "+staticField);

}
public static void main(String[] args) {
System.out.println("main 方法开始执行");
}

}


输出:

静态初始化之前initial staticField
静态初始化之后static name
main 方法开始执行


这里说明:构造代码块和显示域是属于一个类的实例的,如果没有调用一个类的构造函数,那么这些都不会执行。

所有的动作都是从父类到子类执行的


二、对象的初始化

public class Test{
private static String staticField=init("Test类静态域初始化");
public String obField=init("Test实例域初始化");
static{
System.out.println("Test 静态块");
}
{
System.out.println("Test 实例域块");
}
public static void main(String[] args) {
System.out.println("\n main 函数开始执行,实例化Test类和Apple类---------------------------\n");
new Test();
new Apple();
}
public static String init(String field){
System.out.println(field);
return "static Field";
}
}
class Fruit{
static{
System.out.println("父类static block");
}
{
System.out.println("父类 block");
}
public Fruit() {
System.out.println("父类构造函数");
}
}
class Apple extends Fruit{
static{
System.out.println("子类 static block");
}
{
System.out.println("子类 block");
}
public Apple() {
System.out.println("子类 构造函数");
}
}


输出结果:

Test类静态域初始化
Test 静态块

main 函数开始执行,实例化Test类和Apple类---------------------------

Test实例域初始化
Test 实例域块
父类static block
子类 static block
父类 block
父类构造函数
子类 block
子类 构造函数


这说明,用到某个类的时候它才会被加载进来并进行类初始化执行static变量和static块,此时先执行父类的在执行子类的),当实例化的时候才会进行对象初始化实例域初始化和代码块初始化,先父类再子类
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息