1. 程式人生 > >Java自學筆記(十二)

Java自學筆記(十二)

幾個關鍵字(final/static)

final:可以用來修飾類,類的成員,以及區域性變數 注意:final修飾的類不能被繼承,但可以繼承其他類,俗稱“太監類”?           final修飾的方法不可以被重寫(覆蓋),如果父類中沒有被final修飾方法,子類重寫之後可以補充final;           final修飾的變數其實是常量,不能再次賦值。可以再構造方法中給final賦值,只要在建立物件前賦值,還是可以的。           final Fu fu = new Fu();//記憶體地址不變
class Test{
      final int n;
      public Test(int n){
          this.n = n
       }
}

static: 靜態修飾符,共享資料,不歸某物件特有,類似一群孩子都在某所學校(共享的資料),但是每個孩子名字都不一樣(物件特有資料),記憶體中,靜態是優於非靜態方式的存在~ 注意:被static修飾的成員可以直接使用類名直接訪問(類名.靜態成員變數名稱|類名.靜態成員方法名(引數列表))

          不能使用this/super           靜態方法只能呼叫靜態成員變數,

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同時使用