------Java培訓、Android培訓、iOS培訓、.Net培訓、期待與您交流! -------
形式參數和返回值問題:基本類型傳值,引用類型傳址
包聲明、導包、類聲明的的順序關係:packagecn.itcast; import java.util.*; public class Demo{}
訪問控制修飾符(權限修飾符)
protected 可以被子類及同一個包中的類使用
protected 受保護的權限,成員修飾成員只給子類
被protected修飾的成員,只能在子類中super調用
默認訪問控制的成員變量和方法可以被同一個包中的類調用
訪問控制符修飾類
public 修飾的類可以被任何一個類使用;
默認訪問控制的類只可以被同一個包中的類使用
訪問控制符修飾成員
內部類:
定義在類的內部,根據位置不同,分爲成員內部類和局部內部類
內部類可以直接訪問所在外部類的成員,包括私有
外部類要訪問內部類的成員,要創建對象
成員內部類創建對象
外部類名.內部類名 對象名 = 外部類對象.內部類對象
成員內部類的修飾符:
private 保證數據安全性
static 讓數據訪問更方便,被靜態修飾的成員內部類只能訪問外部類的靜態成員
局部內部類:
可以創建內部類對象,通過對象調用內部類方法,來使用局部內部類功能
局部內部類的方法,訪問局部變量,變量必須final 修飾,爲什麼?
/*
* 局部內部類方法,訪問局部變量,變量必須 final 修飾,爲什麼必須有 final ?
* 加 final,解決什麼問題
*
* 生命週期:
* 方法的生命週期,沒有對象長
* out 方法運行出棧,變量 x 就會死亡
* 用了 Inner 類的對象,調用方法 in,造成變量已經死亡不能訪問
*
* 變量加 final 修飾:
*
* final修飾變量 x,和內存的生命週期沒有關係
* final本身含義固定變量值,終身不變
*
* javac編譯的時候,直接將內部類方法變量 x,直接替換成 1
*/
publicclassInnerClass {
publicstaticvoid main(String[] args) {
Outerouter= newOuter();
Interfaceinterface1= outer.out();
interface1.in();
}
}
interface Interface {
publicabstractvoid in();
}
class Outer {
public Interface out() {
finalintx = 1;
class Inner implements Interface {
publicvoid in() {
/*
* Cannot refer to the non-final local variablex defined * in an enclosing scope
*/
System.out.println("局部內部類的方法in " + x);
}
}
returnnew Inner();
}
}
匿名內部類
如果在一段程序中需要創建一個類的對象(通常這個類需要實現某個接口或者繼承某個類),而且對象創建後,這個類的價值也就不存在了,這個類可以不必命名,稱之爲匿名內部類。
/*
* obj 用匿名類所實現的接口或所繼承的父類類型聲明的引用
* SuperType 匿名類所要實現的接口或繼承的父類
*
*
*/
SuperTypeobj = new SuperType(…){
// 匿名中定義的成員變量或方法
… … …
};
定義匿名內部類
// 定義接口 Action,含有抽象方法 execute
interface Action{
publicabstractvoid execute();
}
publicclassMain {
publicstaticvoid main(String[] args) {
// 創建實現接口 Action 的匿名內部類對象
Actionaction= newAction() {
// 重寫接口中的方法
@Override
publicvoid execute() {
System.out.println("匿名內部類");
}
};
// 調用匿名內部類對象的 execute 方法
action.execute();
}
}
匿名內部類面試題
//按照要求,補齊代碼:要求在控制檯輸出 "HelloWorld"
interface Inter {
publicabstractvoid show();
}
class Outer1 {
// 補齊代碼
publicstatic Inter method() {
returnnew Inter() {
@Override
publicvoid show() {
System.out.println("Hello World!!");
}
};
}
}
publicclassOuterDemo {
publicstaticvoid main(String[] args) {
// 類名.靜態方法,方法調用鏈,另一個方法 show
// 要求方法返回的必須是對象
// method 返回的應該是一個對象,是接口 Inter 的實現類對象
Outer1.method().show();
}
}