Java自學筆記(十二)
阿新 • • 發佈:2018-11-10
幾個關鍵字(final/static)
final:可以用來修飾類,類的成員,以及區域性變數 注意:final修飾的類不能被繼承,但可以繼承其他類,俗稱“太監類”? final修飾的方法不可以被重寫(覆蓋),如果父類中沒有被final修飾方法,子類重寫之後可以補充final; final修飾的變數其實是常量,不能再次賦值。可以再構造方法中給final賦值,只要在建立物件前賦值,還是可以的。 final Fu fu = new Fu();//記憶體地址不變static: 靜態修飾符,共享資料,不歸某物件特有,類似一群孩子都在某所學校(共享的資料),但是每個孩子名字都不一樣(物件特有資料),記憶體中,靜態是優於非靜態方式的存在~ 注意:被static修飾的成員可以直接使用類名直接訪問(類名.靜態成員變數名稱|類名.靜態成員方法名(引數列表)) 不能使用this/super 靜態方法只能呼叫靜態成員變數,class Test{ final int n; public Test(int n){ this.n = n } }
TIP:定義靜態常量,開發通過格式 public static final 資料型別 變數名 = 值;變數名全部大寫~~對於介面,也可以介面名加靜態變數名
interface jiekou { public static final int ZMN = 99; } jiekou.ZMN;
匿名物件
Person a = new Animal(); //實名物件
new Animal();//匿名物件
需要注意的:匿名物件實名的話,只能使用一次;
匿名物件可以當作方法接收的引數和方法的返回值;
其它:內部類(成員內部類||區域性內部類||) 顧名思義,所在位置不同;(程式碼轉)
public class Outer { int i = 1; class Inner { int i = 2; public void inner(){ int i = 3; System.out.println(Outer.this.i); } } }
定義類
class Party {//外部類,聚會
public void puffBall(){// 吹氣球方法
class Ball {// 內部類,氣球
public void puff(){
System.out.println("氣球膨脹了");
}
}
//建立內部類物件,呼叫puff方法
new Ball().puff();
}
}
訪問內部類
public static void main(String[] args) {
//建立外部類物件
Party p = new Party();
//呼叫外部類中的puffBall方法
p.puffBall();
}
匿名內部類(程式碼轉)
public interface Smoking {
public abstract void smoking();
}
/*
* 實現類,實現介面 重寫介面抽象方法,建立實現類物件
* class XXX implements Smoking{
* public void smoking(){
*
* }
* }
* XXX x = new XXX();
* x.smoking();
* Smoking s = new XXX();
* s.smoking();
*
* 匿名內部類,簡化問題: 定義實現類,重寫方法,建立實現類物件,合為一步完成
*/
測試類:
public class Test {
public static void main(String[] args) {
//使用匿名內部類
/*
* 定義實現類,重寫方法,建立實現類物件,一步搞定
* 格式:
* new 介面或者父類(){
* 重寫抽象方法
* };
* 從 new開始,到分號結束
* 建立了介面的實現類的物件
*/
new Smoking(){
public void smoking(){
System.out.println("人在吸菸");
}
}.smoking();
}
}
protected呼叫不同包的子類,必須在子類寫。
程式碼塊
構造程式碼塊和靜態程式碼塊,均定義在類中方法之外。 使用格式{} static{} 靜態程式碼塊優先執行,但是隻執行一次,之後執行構造程式碼塊,最後執行構造方法abstract 不能與private/static/final同時使用