java-修飾符-包-內部類-代碼塊執行順序


1.訪問權限修飾符

從大到小的順序爲:public--protected--default--private

private--只能在同一類中使用;

default--不用寫出來,默認不加.可以被同一包中的類使用

protected--可以被不同包的子類使用

public--可以被不同包的其它類使用


2.各種修飾符的修飾對象(可修飾哪些:類/接口/方法/屬性)

1)訪問權限修飾符:public/default---可修飾類/接口

  private protected 不可修飾類.default可修飾類,但是不用寫出來;

2)靜態修飾符:static --修飾屬性/方法/只能修飾內部類/代碼塊;

 不能與static共存的修飾符:abstract(有三個?待查)

3)final--修飾類/屬性/方法/方法中的參數(修飾後可被局部內部類訪問);

4)abstract--修飾類/接口/方法;


3.關於修飾符的默認情況:

接口默認爲default;只能在本包中訪問.

接口中的變量默認爲 public static final(即常量,命名時需全部大寫,實際開發中通常不在接口中寫變量

);

接口中的方法默認爲 public abstract;

類中方法的權限修飾符若不寫,則默認爲default:舉例如下:

interface IA{

void show();//編譯後:public abstract void show();

}

class A implements IA{

void show(){//重寫錯誤:這裏使用的默認的訪問修飾符,比父類的訪問修飾符小了,這是不允許的。

System.out.println("Hello");

}

}

main(){

new A().show();

}


補充:

1)關於接口的默認訪問權限:

1)接口修飾符無論加與不加,始終爲public  <開發實戰經典>P192

2)如果標明爲public,則爲public,如果不寫,則默認爲包的訪問權限(僅可在本包中實現) <java瘋狂講義 第三版>P191

操作:包1中創建接口A(不加public),包1和包2中分別實現該接口,包1中實現類報錯(導包後也報錯,提示不可見).

包1中創建接口A(加public),包1和包2中分別實現該接口,包1中需導包.

結論:<瘋狂講義>中的理解正確.

2)接口名稱前的修飾符:可以使用abstract修飾.



==========================================================================================


3.包

java中的包,其實就是電腦中的文件夾,包中存放的是.class文件,當class文件很多的時候,採用多個包進行存放,稱之爲分包管理.

1).使用的類與當前類在一個包中,無需導包;

2).使用的類在java.lang中無需導包;

3).其它情況必須導包;

4).java常用系統包:

java.lang--基本包,自動導入,String等都在此包中;

java.lang.reflect--反射機制的包,java.lang的子包;

java.util--工具包,常用類庫/日期操作等

java.text--文本的處理類庫

java.sql--數據庫操作包,提供各類數據庫操作的類和接口

java.net--網絡編程相關

java.io--輸入/輸出處理

java.awt--構成抽象窗口工具集的多個類,這些類用來構建和管理GUI

javax.swing--建立圖形用戶界面


5).目前爲止用到的包總結:

java.lang--String System StringBuffer StringBuilder 包裝類 Thread

java.util--Scanner Random ArrayList Arrays Date objects

java.io--BufferdReader BufferedWriter FileReader FileWriter

java.math--BigDecimal BigInteger

========================================================================================================================


4.內部類--成員內部類-局部內部類-匿名內部類

1)內部類也稱爲嵌套類(官方說法),是寫在類中的類.分爲成員內部類(寫在成員變量位置)和局部內部類(寫在方法裏,很少用).匿名內部類是局部內部類的一種.

2)內部類中可以直接訪問外部類中的所有成員

3)關於對局部變量/內部類成員變量/外部類成員變量的訪問

public class Outer {

int a = 100;

class Inner{

int a = 200;

public void printA(){

int a = 300;

System.out.println("局部變量a="+a);//300

System.out.println("內部類的變量a="+this.a);//200

System.out.println("外部類的變量a="+Outer.this.a);//100

}

}

}

4)匿名內部類是創建某個類型子類對象的快捷方式,因此匿名內部類的前提是有父類或接口.


======================================================

5.代碼塊的執行順序

代碼塊的執行順序:

根據所處位置不同,代碼塊分爲4種--普通代碼塊/構造塊/靜態代碼塊/同步代碼塊

代碼塊:使用{}括起來的程序片段;

普通代碼塊:直接在方法或語句中定義的代碼塊;

構造塊:直接寫在類中的代碼塊;構造塊中不允許定義方法;

靜態代碼塊:使用static聲明的代碼塊;(注:靜態代碼塊不能寫在main方法中);

同步代碼塊:使用用synchronized修飾的代碼塊;

構造塊優先於構造方法執行,且每次實例化對象均會執行,執行多次;父類優先於子類執行;

靜態代碼塊優先於主方法執行,且類中定義的靜態代碼塊會優先於構造塊執行,僅執行一次;父類優先於子類執行;

主方法中的構造塊執行順序與其位置有關,按存在位置從前往後執行;且主方法中不存在靜態代碼塊;


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章