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修飾的代碼塊;
構造塊優先於構造方法執行,且每次實例化對象均會執行,執行多次;父類優先於子類執行;
靜態代碼塊優先於主方法執行,且類中定義的靜態代碼塊會優先於構造塊執行,僅執行一次;父類優先於子類執行;
主方法中的構造塊執行順序與其位置有關,按存在位置從前往後執行;且主方法中不存在靜態代碼塊;