動手動腦|課後作業
阿新 • • 發佈:2018-10-21
nds 一個 sta public 多個 block sum 使用 父類
一、
public class Test{ public static void main(String[] args){ Foo obj1=new Foo(); } } class Foo{ int value; public Foo(int initVaule){ vaule=initVaule; } }
如果類提供了一個自定義的構造方法,將導致系統不再提供默認構造方法
同一個類可以有多個構造函數,多個構造函數之間通過參數來區分,這是方法重載的一個實例。
構造函數之間可以相互調用
二、
public class aca {
public int field=100;
{
field=200;
}
public aca(int value) {
this.field=value;
}
public aca() {
}
public static void main(String args[]) {
aca obj=new aca();
System.out.println(obj.field);
obj=new aca(300);
System.out.println(obj.field);
}
}
當調用默認構造方法時,調用初始化體進行初始化字段;
當調用有參構造方法時,調用有參構造方法進行字段初始化;
三、
class Root { static{ System.out.println("Root的靜態初始化塊"); } { System.out.println("Root的普通初始化塊"); } public Root() { System.out.println("Root的無參數的構造器"); } } class Mid extends Root { static{ System.out.println("Mid的靜態初始化塊"); } { System.out.println("Mid的普通初始化塊"); } public Mid() { System.out.println("Mid的無參數的構造器"); } public Mid(String msg) { //通過this調用同一類中重載的構造器 this(); System.out.println("Mid的帶參數構造器,其參數值:" + msg); } }class Leaf extends Mid { static{ System.out.println("Leaf的靜態初始化塊"); } { System.out.println("Leaf的普通初始化塊"); } public Leaf() { //通過super調用父類中有一個字符串參數的構造器 super("Java初始化順序演示"); System.out.println("執行Leaf的構造器"); } } public class TestStaticInitializeBlock { public static void main(String[] args) { new Leaf(); } }
結果:
1、靜態初始化塊只執行一次。
2、創建子類型的對象時,也會導致父類型的靜態初始化塊的執行
四、
靜態方法只能訪問靜態成員,實例方法可以訪問靜態和實例成員。之所以不允許靜態方法訪問實例成員變量,是因為實例成員變量是屬於某個對象的,而靜態方法在執行時,並不一定存在對象。同樣,因為實例方法可以訪問實例成員變量,如果允許靜態方法調用實例方法,將間接地允許它使用實例成員變量,所以它也不能調用實例方法。基於同樣的道理,靜態方法中也不能使用關鍵字this。
五、
public class sum { public static int a=0; int c; public sum(int cc) { c=cc; a++; } public int get() { return a; } } public class cxc { public static void main(String[] args) { sum one=new sum(1); sum tow=new sum(2); sum three=new sum(3); System.out.println(one.get()); } }
統計創建類的個數;
動手動腦|課後作業