java編程思想-複用類7

1、繼承基類只有一個非默認構造器,導出類需要 在構造器中調用基類構造器

class Shop{
    private static Random random=new Random(47);
    private final int i4=random.nextInt(20);
    static  final  int i5=random.nextInt(20);

    @Override
    public String toString() {
        return "Shop{" +
                "i4=" + i4 +
                ",i5=" + i5 +
                '}';
    }

    public  static void main(String[] arg){
        Shop shop=new Shop();
        Shop shop2=new Shop();
        Shop shop3=new Shop();
        System.out.println(shop);
        System.out.println(shop2);
        System.out.println(shop3);
    }
}

2、final相關細節
final修飾數據編譯時不知道值,只有加載在內存時候纔會初始化
static 裝載時候已經初始化,不會在對象創建時候初始化

final必須在使用前賦值,;必須在域的定義除或者構造函數
final可以作爲修飾參數,這就意味着方法中傳入的參數不可以修改
private修飾方法隱含式的制定final
final修改類該類不可以被繼承,裏面的方法隱含修飾詞爲final

3、類加載,初始化
初始化以及類的加載
導出類初始化加載順序
1、加載基類static修飾的靜態變量
2、加載導出類靜態變量
3、基類變量初始化
4、基類構造器
5、導出類變量初始化
6、導出類構造器

public class test extends Shop{
    private  final   String i1= initNotStatic("parent.i1 final初始化");
    private  static   String i2= init("parent.i2  static初始化");
    private     String i3= initNotStatic("parent.i3  string初始化");
    public test() {
        System.out.println("parent 初始化");
    }
    public  static void main(String[] arg){
        System.out.println("mian 開始");
        test test1=new test();
    }
}
class Shop{
    private     String i1= initNotStatic("child.i1 final初始化");
    private  static   String i2= init("child.i2  static初始化");
    private   final  String i3= initNotStatic("child.i3  string初始化");

    public static String init(String s){
        System.out.println(s);
        return s;
    }

    public  String initNotStatic(String s){
        System.out.println("非靜態方法"+s);
        return s;
    }

    public Shop() {
        System.out.println("child 初始化");
    }
}

類加載順序
1、加載基類static修飾的靜態變量
2、加載導出類靜態變量

public class test extends Shop{
    private  final   String i1= initNotStatic("parent.i1 final初始化");
    private  static   String i2= init("parent.i2  static初始化");
    private     String i3= initNotStatic("parent.i3  string初始化");
    public test() {
        System.out.println("parent 初始化");
    }
    public  static void main(String[] arg){
        System.out.println("mian 開始");

    }
}
class Shop{
    public  static   String i5= init("child.i1 final初始化");
    static   String i2= init("child.i2  static初始化");
    private   final  String i3= initNotStatic("child.i3  string初始化");

    public static String init(String s){
        System.out.println(s);
        return s;
    }

    public  String initNotStatic(String s){
        System.out.println("非靜態方法"+s);
        return s;
    }

    public Shop() {
        System.out.println("child 初始化");
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章