1. 程式人生 > >Java筆記-10

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

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