Java 初始化
一.static 初始化
static 成員初始化順序
package object;class Bowl {Bowl(int marker){System.out.printf("Bowl("+marker+")\n");}void f1(int marker){System.out.printf("f1("+marker+")\n"); } } class Table{ static Bowl bowl1 =new Bowl(1); Table() { System.out.println("table()"); } void f2(int marker) { System.out.println("f2("+marker+")"); } static Bowl bowl2 = new Bowl(2); } class Cupboard { Bowl bowl3 = new Bowl(3); static Bowl bowl4 = new Bowl(4); Cupboard() { System.out.print("Cupboard\n"); bowl4.f1(2); } void f3(int marker) { System.out.println("f3("+marker+")"); } static Bowl bowl5 = new Bowl(5); } public class StaticInitialization{ public static void main(String args[]) { System.out.println("Creating new Cupboard() in main"); new Cupboard(); //靜態成員只有在第一個Cupboard在創建時才會初始化,此后,靜態成員不會再次初始化 System.out.println("Creating new Cupboard() in main"); Cupboard cupboard = new Cupboard(); new Table().f2(1); new Cupboard().f3(1); } }/* output: Creating new Cupboard() in main Bowl(4) Bowl(5) Bowl(3) Cupboard f1(2) Creating new Cupboard() in main Bowl(3) Cupboard f1(2) Bowl(1) Bowl(2) table() f2(1) Bowl(3) Cupboard f1(2) f3(1) *///~顯示的初始化靜態方法
package object; //: initialization/ExplicitStatic.javaimport static net.mindview.util.Print.*;class Cup {Cup(int marker){ print("Cup("+ marker +")");}void f(int marker) { print("f("+marker+")"); } } class Cups { static Cup cup1; static Cup cup2; //靜態域 static{ cup1 = new Cup(1); cup2 = new Cup(2); } //靜態塊 Cups() { print("Cups()"); } } public class ExplicitStatic{ public static void main(String args[]) { print("Inside main()"); Cups.cup1.f(99); // (1) 無論時通過(1)還是注釋掉(1)運行(2),Cups的靜態初始化都會執行// 靜態初始化只會執行一次,如果(1)(2)全部注釋掉則不會執行初始化
} //static Cups cups1 = new Cups(); //(2) //static Cups cups2 = new Cups(); //(2) }/* output: Inside main() Cup(1) Cup(2) f(99) *///~
?二.非靜態實例的初始化
package object; import static net.mindview.util.Print.*;class Mug {Mug(int marker){print("mug("+ marker + ")");}void f( int marker){print("f("+marker +")");} } public class Mugs{Mug mug1;Mug mug2;{mug1 = new Mug(1); mug2 = new Mug(2);print("mug1 & mug2 initialized");} //實例初始化子句是再構造器之前執行的Mugs(){print("MUgs()");}Mugs(int i){print("Mugs(int)");}public static void main(String args[]){print("Instde main()");new Mugs();print("new Musg() cmopleted");new Mugs(1);print("new Mugs(1) completed");} }/* output: Instde main() mug(1) mug(2) mug1 & mug2 initialized MUgs() new Musg() cmopleted mug(1) mug(2) mug1 & mug2 initialized Mugs(int) new Mugs(1) completed *///~三.數組的初始化
package object;import static net.mindview.util.Print.*; import java.util.*;public class ArrayNew{public static void main(String args[]){int [] a;Random rand = new Random(47);a = new int[rand.nextInt(20)];print("length of a = " + a.length);print(Arrays.toString(a)); //Arrays.toString 產生一維數組的打印版本 } }/* output: length of a = 18 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]//數組元素會自動初始化為空值(對于數字和字符就是0,對于boolean是false) *///~?引用數組的初始化
package object;import static net.mindview.util.Print.*; import java.util.*;public class ArrayNew{public static void main(String args[]){Random rand = new Random(47);Integer [] a = new Integer[rand.nextInt(20)];print("length of a = " + a.length);//for(int i = 0;i<a.length;i++)//a[i] = rand.nextInt(500); print(Arrays.toString(a));} } /*如果創建一個非基本類型的數組,那么就創建了一個引用數組,直到把對象賦值給引用初始化才算完成 /**length of a = 18 [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] *///~?用花括號初始化對象數組
package object;import static net.mindview.util.Print.*; import java.util.*;public class ArrayNew{public static void main(String args[]){Integer[] a={new Integer(1),new Integer(2),3,//Autoboxing };Integer[] b= new Integer[]{new Integer(1),new Integer(2),3,//Autoboxing 最后一個逗號是可選的 };System.out.println(Arrays.toString(a));System.out.println(Arrays.toString(b));} }/*output: [1, 2, 3] [1, 2, 3] *///~ package object;import static net.mindview.util.Print.*; import java.util.*;public class ArrayNew{public static void main(String[] args){Other.main(new String[]{ "fiddle", "de", "dum"});//傳遞給other ,用來替換命令行參數 } }class Other{public static void main(String[] args){for(String s : args)System.out.print(s + " ");} } /* output: fiddle de dum *///~可變參數列表 舊版
package object; //: object/VarArgs.java /**這是Java SE5 之前的代碼 class A {}public class VarArgs {static void printArray(Object[] args) //所有類都間接或直接繼承自Object類{for(Object obj : args)System.out.print(obj + " ");System.out.println();}public static void main(String args[]){printArray(new Object[]{new Integer(47), new Float(3.14), new Double(11.11)});printArray(new Object[]{"one", "two", "three"});printArray(new Object[]{new A(),new A(), new A()});//未賦值默認打印類名和地址 } }/* output: 47 3.14 11.11 one two three object.A@41975e01 object.A@c2e1f26 object.A@dcf3e99 *///~
?
可變參數列表 新版
package object; /** this is new code **/ class A {}public class NewVarArgs {static void printArray(Object... args) //這里的Object 可以換成String Integer Character int char 等其它類型{for(Object obj : args)System.out.print(obj + " ");System.out.println();}public static void main(String args[]){//can take individual elements:printArray(new Object[]{new Integer(47), new Float(3.14), new Double(11.11)});printArray(new Object[]{"one", "two", "three"});printArray(new Object[]{new A(),new A(), new A()});//未賦值默認打印類名和地址// or an arrayprintArray((Object[])new Integer[]{1,2,3,4}); //因為Integer[] 已經是數組,所以不會執行任何轉換printArray();//Empty list is ok } }/* output: 447 3.14 11.11 one two three object.A@41975e01 object.A@c2e1f26 object.A@dcf3e99 1 2 3 4 *///~以下是初始化的三種情況:
package object; //: reusing/Bath.java // commposition for code reuseclass Soap {private String s;Soap() {System.out.println("Soap()");s = "Constructed";}public String toString(){return s;} } public class Bath{private String //initializing at point of definition s1 = "Happy", //在定義對象的地方初始化s2 = "Happy", s3,s4;private Soap castille;private int i;private float toy;public Bath() //在類的構造器中初始化 {System.out.println("Inside Bath()");s3 = "joy";toy = 3.14f;castille = new Soap();}//Instance initialization{i=47;} //實例初始化public String toString(){if(s4 == null) //在使用之前s4 = "joy";return "s1 = " + s1 + "\n"+"s2 = " + s2 + "\n"+"s3 = " + s3 + "\n"+"s4 = " + s4 + "\n"+"i = " + i + "\n"+"toy = " + toy + " " +"castille = " + castille; //在這里編譯器知道你要將一個String對象("source =")//同WaterSource相加 }public static void main(String[] args){Bath bath = new Bath();System.out.println(bath);//當只有一個對象時會自動調用toString() } }/* output: Inside Bath() Soap() s1 = Happy s2 = Happy s3 = joy s4 = joy i = 47 toy = 3.14 castille = Constructed *///~?
轉載于:https://www.cnblogs.com/jiangfeilong/p/10084526.html
總結
- 上一篇: 1像素
- 下一篇: 第二阶段第七次站立会议