Java 类、对象内容回顾

10 篇文章 0 订阅

一、类的初始化

类的初始化:主要是执行执行类中的静态块初始化和静态变量初始化
当类被用到的时候就会进行初始化,但是不一定会被实例化实例化的时候才会执行实例域的初始化和初始化代码块的代码

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

结果说明:

  1. 当实例化一个类的时候顺序:先是静态的,然后是显示的,最后才是构造器本身
  2. 先是静态域和静态块顺序执行,显示的域初始化和块初始化顺序执行、最后是构造器本身


----------


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块,此时先执行父类的在执行子类的),当实例化的时候才会进行对象初始化实例域初始化和代码块初始化,先父类再子类

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值