on java8 第六章 初始化和清理

初始化的顺序

在类中变量定义的顺序决定了它们初始化的顺序。即使变量定义散布在方法定义之间,它们仍会在任何方法(包括构造器)被调用之前得到初始化。

静态数据的初始化

无论创建多少个对象,静态数据都只占用一份存储区域。static 关键字不能应用于局部变量,所以只能作用于属性(字段、域)。如果一个字段是静态的基本类型,你没有初始化它,那么它就会获得基本类型的标准初值。如果它是对象引用,那么它的默认初值就是 null。

如果在定义时进行初始化,那么静态变量看起来就跟非静态变量一样。
书中这句话存疑(此篇博客答疑了https://blog.csdn.net/qq_17864929/article/details/48006835)

静态初始化只有在必要时刻才会进行。只有在第一个对象被创建(或静态变量被访问)时,它们才会被初始化。此后,静态对象不会再次被初始化。

显式的静态初始化

静态代码块 实际上它只是一段跟在 static 关键字后面的代码块。与其他静态初始化动作一样,这段代码仅执行一次:当首次创建这个类的对象或首次访问这个类的静态成员(甚至不需要创建该类的对象)

非静态实例初始化

非静态代码块 在构造器之前执行的。

动态数组创建

使用 new 创建基本类型数组。new 不能创建非数组以外的基本类型数据
new int[rand.nextInt(20)];

可变参数列表

以创建一个以 Object 数组为参数的方法

static void printArray(Object[] args) {
        for (Object obj: args) {
            System.out.print(obj + " ");
        }
    }
    public static void main(String[] args) {
        printArray(new Object[] {"one", "two", "three"});  
    }

编译器都会使用自动装箱来匹配重载的方法,然后调用最明确匹配的方法

 static void f(son... args) {
        System.out.println("first");
    }
    static void f(father... args) {
        System.out.println("second");
    }

    public static void main(String[] args) {
        f(new son());
    }
    输出为 first 

枚举类型

由于枚举类型的实例是常量,因此按照命名惯例,它们都用大写字母表示(如果名称中含有多个单词,使用下划线分隔)

由于 switch 是在有限的可能值集合中选择,因此它与 enum 是绝佳的组合

我们使用enum定义的枚举类型,会在编译之后转化为一个继承了java.lang.Enum的类,而我们定义的每个枚举值都会在类的初始化阶段被实例化为我们所定义的枚举类的一个对象。
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值