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"
}
}