day15_學習總結
包的含義
為了更好的管理java檔案,對其java檔案進行區分,其實質就是檔案夾,用于分類java檔案
命名規則:包名全部小寫
根據功能/使用範圍進行劃分
一般采用的是公司域名反寫
eg:com.qf.javaee.pj
注意:包名書寫在java檔案中第一行
帶包運作
帶包運作有兩種方式
方式一:
在控制台中,如果需要通過導包運作java代碼,須要先将java代碼編譯生成對應的.class檔案,然後将包名對應的檔案夾建立完畢,将.class檔案複制到對應的包名下,在控制台中通過
java 包名.類名
來運作
eg:java com.pj.HelloWorld
方式二:
通過
javac -d. 源檔案.java
來編譯,會自動生成包名的檔案夾以及.class檔案
再通過
java 包名.類名
運作即可
修飾符
靜态修飾符——static
狀态修飾符——final
抽象修飾符——abstract
權限修飾符:public protected private 預設
權限修飾符通路權限:
同一個包下同一個類中 同一個包下不同類或子類 不同包下的子類中 不同包下的無關類
public Y Y Y Y
protected Y Y Y
預設 Y Y
private Y
内部類
成員内部類
成員内部類位于外部類的成員位置
class{
class{//成員内部類
}
}
成員内部類的的成員方法通路:
外部類.内部類 對象 = new 外部類.new内部類();
對象.内部類方法名();
成員内部類可以被private/static修飾
被private修飾的成員内部類私有化,開發中使用較少
被static修飾的成員内部類
成員方法的通路:
外部類.内部類 對象名 = new 外部類.内部類();
對象名.成員方法名();
或者
new 外部類.内部類().成員方法名();
當成員方法也被static修飾時:
可以通過以下方式通路
外部類.内部類.成員方法名();
注意:非靜态成員内部類中不能有靜态屬性
局部内部類
局部内部類定義在方法内部
public void show(){
class {
}
}
在方法中如果要通路局部内部類中的成員時,需要在方法中建立局部内部類的對象,通過對象通路成員
變量問題
在成員内部類中通路變量的問題:
變量名相同時遵循就近原則
class Outer{
int num = 10;
class Inner{
int num = 20 ;
public void show(){
int num = 30;
System.out.println(num);//輸出結果為30
System.out.println(this.num);//輸出結果為20,this代表本類的對象位址值引用
System.out.println(Outer.this.num);//輸出結果為10,
}
}
}
匿名内部類
沒有名字的類
格式:
new 抽象類/接口{
重寫的方法;
};
匿名内部類的實質:繼承具體類的子類對象/繼承了抽象類的子類對象/實作了接口的子實作類對象
當通過形式參數或者傳回值類型為具體類,抽象類,接口時,用匿名對象類傳遞時:
可以通過匿名内部類實作
eg:
interface Person{
public void show();
}
class PersonDemo{
public void method(Person person){
System.out.println("method...");
}
}
public class Test{
public static void main(String[] args){
PersonDemo pd = new PersonDemo();
pd.method(new Pernson(){
@Override
public void show(){
}
});
}
}
輸出結果為:
method...
作為傳回值同理也是如此