5.6成员初始化
1.对于方法的局部变量,java以编译时错误的形式来贯彻这种保证。java
void f(){ int i; i++;//error -- i not initialized 用到i的时候会报错。 }
2.要是类的数据成员(即字段)是基本类型,保证会有一个初始值。
3.在类里定义一个对象引用时,若是不将其初始化,此引用会得到一个特殊值null。this
5.7构造器初始化
1.初始化顺序
a.在类的内部,变量定义的前后顺序决定了变量初始化的顺序。
b.变量定义散布于方法定义之间,它们仍旧会在任何方法(包括构造器)被调用以前获得初始化。
2.静态数据的初始化
不管建立多少对象,静态数据只占用一份存储区域。static关键字不能应用于局部变量,所以它只能做用于域。若是一个域是静态的基本类型域,且也没有对它进行初始化,那么它就会得到基本类型的标准初值;若是它是一个对象引用,那么它的默认初始值就是null。
初始化的顺序是先静态对象(前提是它们还没有因前面的对象建立过程而被初始化),然后是非静态对象。spa
package com.yu; public class InitTest2 { static A a = new A(); A aa = new A(); public static void main(String[] args) { System.out.println("Test2"); } static A aaa = new A(); } class A { A() { System.out.println("A con"); } } /*output A con A con Test2 */ package com.yu; public class InitTest3 { public static void main(String[] args) { new Bs(); new Bs(2); } } class Bs { // static 只初始化一次 { B b = new B(); B bb = new B(); System.out.println("~~"); } Bs() { System.out.println("Bs()"); } Bs(int i) { System.out.println("Bs(i)"); } } class B { B() { System.out.println("B()"); } } /*output B() B() ~~ Bs() B() B() ~~ Bs(i) */
5.9枚举类型
1.code
package com.yu; public class EnumTest1 { public static void main(String[] args) { for(Spiciness s : Spiciness.values()){ System.out.println(s + "-ordinal-" + s.ordinal()); } } } enum Spiciness{ NOT,MILD,MEDIUM,HOT,FLAMING } /*output NOT-ordinal-0 MILD-ordinal-1 MEDIUM-ordinal-2 HOT-ordinal-3 FLAMING-ordinal-4 */
2.对象
package com.yu; public class EnumTest2 { Spiciness2 degree; EnumTest2(Spiciness2 degree){ this.degree = degree; } void describe(){ System.out.print("this burrito is :"); switch(degree){ case NOT:System.out.println("not spicy at all"); break; case MEDIUM:System.out.println("a little hot"); break; } } public static void main(String[] args) { new EnumTest2(Spiciness2.NOT).describe(); System.out.println("--------------------"); new EnumTest2(Spiciness2.MEDIUM).describe(); } } enum Spiciness2{ NOT,MEDIUM } /*output this burrito is :not spicy at all -------------------- this burrito is :a little hot */