1. 程式人生 > >java學習筆記(10)

java學習筆記(10)

1:形式引數和返回值的問題(理解)
(1)形式引數:
類名:需要該類的物件
抽象類名:需要該類的子類物件
介面名:需要該介面的實現類物件
(2)返回值型別:
類名:返回的是該類的物件
抽象類名:返回的是該類的子類物件
介面名:返回的是該介面的實現類的物件
(3)鏈式程式設計
物件.方法1().方法2()…方法n();

這種用法:其實在方法1()呼叫完畢後,應該一個物件;
方法2()呼叫完畢後,應該返回一個物件。
方法n()呼叫完畢後,可能是物件,也可以不是物件。

2:包(理解)
(1)其實就是資料夾
(2)作用:
A:區分同名的類
B:對類進行分類管理
a:按照功能分
b:按照模組分
(3)包的定義(掌握)
package 包名;

多級包用.分開。
(4)注意事項:(掌握)
A:package語句必須在檔案中的第一條有效語句
B:在一個java檔案中,只能有一個package
C:如果沒有package,預設就是無包名
(5)帶包的編譯和執行
A:手動式
B:自動式(掌握)
javac -d . HelloWorld.java

3:導包(掌握)
(1)我們多次使用一個帶包的類,非常的麻煩,這個時候,Java就提供了一個關鍵字import。
(2)格式:
import 包名…類名;
另一種:
import 包名…*;(不建議)
(3)package,import,class的順序
package > import > class

4:許可權修飾符(掌握)
(1)許可權修飾符
本類 同一個包下 不同包下的子類 不同包下的無關類
private Y
預設 Y Y
protected Y Y Y
public Y Y Y Y
(2)這四種許可權修飾符在任意時刻只能出現一種。
public class Demo {}

5:常見的修飾符(理解)
(1)分類:
許可權修飾符:private,預設,protected,public
狀態修飾符:static,final
抽象修飾符:abstract
(2)常見的類及其組成的修飾
類:
預設,public,final,abstract
常用的:public
成員變數:
private,預設,protected,public,static,final

常用的:private

構造方法:
private,預設,protected,public

常用的:public
成員方法:
private,預設,protected,public,static,final,abstract
常用的:public
(3)另外比較常見的:
public static final int X = 10;
public static void show() {}
public final void show() {}
public abstract void show();

6:內部類(理解)
(1)把類定義在另一個類的內部,該類就被稱為內部類。
舉例:把類B定義在類A中,類B就被稱為內部類。
(2)內部類的訪問規則
A:可以直接訪問外部類的成員,包括私有
B:外部類要想訪問內部類成員,必須建立物件
(3)內部類的分類
A:成員內部類
B:區域性內部類
(4)成員內部類
A:private 為了資料的安全性
B:static 為了訪問的方便性

成員內部類不是靜態的:
外部類名.內部類名 物件名 = new 外部類名.new 內部類名();
成員內部類是靜態的:
外部類名.內部類名 物件名 = new 外部類名.內部類名();
(5)成員內部類的面試題(填空)
30,20,10

class Outer {
			public int num = 10;
			
			class Inner {
				public int num = 20;
				
				public viod show() {
					int num  = 30;
					
					System.out.println(num);
					System.out.println(this.num);
					System.out.println(Outer.this.num);
				}
			}
		}
	

(6)區域性內部類
A:區域性內部類訪問區域性變數必須加final修飾。
B:為什麼呢?
因為區域性變數使用完畢就消失,而堆記憶體的資料並不會立即消失。
所以,堆記憶體還是用該變數,而改變數已經沒有了。
為了讓該值還存在,就加final修飾。
通過反編譯工具我們看到了,加入final後,堆記憶體直接儲存的是值,而不是變數名。
(7)匿名內部類(掌握)
A:是區域性內部類的簡化形式
B:前提
存在一個類或者介面
C:格式:
new 類名或者介面名() {
重寫方法;
}
D:本質:
其實是繼承該類或者實現介面的子類匿名物件
(8)匿名內部類在開發中的使用
我們在開發的時候,會看到抽象類,或者介面作為引數。
而這個時候,我們知道實際需要的是一個子類物件。
如果該方法僅僅呼叫一次,我們就可以使用匿名內部類的格式簡化。

	interface Person {
			public abstract void study();
		}
		
		class PersonDemo {
			public void method(Person p) {
				p.study();
			}
		}
		
		class PersonTest {
			public static void main(String[] args) {
				PersonDemo pd = new PersonDemo();
				pd.method(new Person() {
					public void study() {
						System.out.println("好好學習,天天向上");
					}
				});
			}
		}
(9)匿名內部類的面試題(補齊程式碼)
	interface Inter {
		void show();
	}
	
	class Outer {
		//補齊程式碼
		public static Inter method() {
			return new Inter() {
				public void show() {
					System.out.println("HelloWorld");
				}	
			};
		}
	}
	
	class OuterDemo {
		public static void main(String[] args) {
			Outer.method().show(); //"HelloWorld"
		}
	}