Java筆記-10
package關鍵字的概述及作用
為什麼要有包
* 將位元組碼(.class)進行分類存放
* 包其實就是資料夾
包的定義及注意事項
- A:定義包的格式
- package 包名;
- 多級包用.分開即可
- B:定義包的注意事項
- A:package語句必須是程式的第一條可執行的程式碼
- B:package語句在一個java檔案中只能有一個
- C:如果沒有package,預設表示無包名
帶包的類編譯和執行
- A:如何編譯執行帶包的類
- a:javac編譯的時候帶上-d即可
- javac -d . HelloWorld.java
- b:通過java命令執行。
- java 包名.HellWord
- a:javac編譯的時候帶上-d即可
package,import,class有沒有順序關係? 有
修飾符
-
A:修飾符:
- 許可權修飾符:private,預設的,protected,public
- 狀態修飾符:static,final
- 抽象修飾符:abstract
-
B:類:
-
許可權修飾符:預設修飾符,public
-
狀態修飾符:final
-
抽象修飾符:abstract
-
用的最多的就是:public
-
-
C:成員變數:
-
許可權修飾符:private,預設的,protected,public
-
狀態修飾符:static,final
-
用的最多的就是:private
-
-
D:構造方法:
-
許可權修飾符:private,預設的,protected,public
-
用的最多的就是:public
-
-
E:成員方法:
-
許可權修飾符:private,預設的,protected,public
-
狀態修飾符:static,final
-
抽象修飾符:abstract
-
用的最多的就是:public
-
-
F:除此以外的組合規則:
- 成員變數:public static final
- 成員方法:
- public static
- public abstract
- public final
內部類概述和訪問特點
內部類訪問特點
* a:內部類可以直接訪問外部類的成員,包括私有。
* b:外部類要訪問內部類的成員,必須建立物件。
* 外部類名.內部類名 物件名 = 外部類物件.內部類物件;
成員內部類被靜態修飾後的訪問方式是:
* 外部類名.內部類名 物件名 = 外部類名.內部類物件;
面試題
要求:使用已知的變數,在控制檯輸出30,20,10。
class Outer {
public int num = 10;
class Inner {
public int num = 20;
public void show() {
int num = 30;
System.out.println(?);
System.out.println(??);
System.out.println(???);
}
}
}
class InnerClassTest {
public static void main(String[] args) {
Outer.Inner oi = new Outer().new Inner();
oi.show();
}
}
區域性內部類訪問區域性變數的問題
- 區域性內部類訪問區域性變數必須用final修飾
-
區域性內部類在訪問他所在方法中的區域性變數必須用final修飾,為什麼?
因為當呼叫這個方法時,區域性變數如果沒有用final修飾,他的生命週期和方法的生命週期是一樣的,當方法彈棧,這個區域性變數也會消失,那麼如果區域性內部類物件還沒有馬上消失想用這個區域性變數,就沒有了,如果用final修飾會在類載入的時候進入常量池,即使方法彈棧,常量池的常量還在,也可以繼續使用但是jdk1.8取消了這個事情,所以我認為這是個bug
-