1. 程式人生 > >學習筆記(java程式設計思想)

學習筆記(java程式設計思想)

1:

建立物件解析

對於用new 建立一個物件,我們需要弄清楚它的過程:
引用和建立一個物件的格式是:

類名 變數名;

變數名=new 類名(引數列表);

比如 Vehicle veh1=new Vehicle();

這個語句具體的執行過程是:

1.右邊的“new vheicle"是以vehicle類為模板,在堆空間裡建立一個vehicle類物件(也簡稱vehicle物件)。

2.末尾的()意味著,在物件建立後,立即呼叫vehicle類的建構函式,對剛生成的物件進行初始化。建構函式肯定是有的,如果沒有建立,Java會補上一個預設的建構函式。

3.左邊的'Vehicle veh1'建立了一個vehicle類引用變數

4.“=”操作符使物件引用指向剛建立的Vehicle物件。

將上面的語句分為兩個步驟:

Vechicle veh1;

veh1=new  Vechicle;

 這樣寫,就比較清楚了,有兩個實體:一是物件引用變數,一是物件本身。在堆空間裡建立的實體,與在棧空間裡建立的實體不同。儘管它們也是確確實實存在的實體,但是似乎很難準確的“抓”住它。


2:

方法的過載,每個過載的方法都必須有一個獨一無二的形參列表,返回值不能區分方法的過載。有時候呼叫函式不在乎返回值,在乎的是其中的過程,無法區分過載方法。

如:

public int A(int i);

public double A(int i);

這2個方法不能構成過載,會有編譯錯誤。

而:

public int A(int i):

public double A(double i);

這2個方法可以形成過載


3:

static方法中不能呼叫非靜態方法,非靜態方法可以呼叫靜態方法,static方法沒有this的方法,static方法的主要用途是不用建立物件直接從類中呼叫static方法,java禁止全域性方法,但在類中植入static方法可以訪問其他static方法和static域。

4:

類的訪問許可權,一個java檔案中只能有一個public 類,類的名稱必須與這個檔名一致

    package DAY1;  
      //此處給day1類加pribate、protected都是錯誤的
  如果希望其他任何人對該類有訪問許可權可以吧構造類指定為private public class day1 { public static void main(String[] args) { } } //此處給test類加pribate、public、protected都是錯誤的
           //錯誤提示:Illegal modifier for the class test; only public, abstract & final are permitted    class test{  
          
    }  

package adg;

public class Soup1 {
   //可以用靜態方法來建立Soup1類
	private Soup1 () {
		
	}
	public static Soup1 makeSoup(){
		return new Soup1();
	}
}

5:

組合就是在類中呼叫類

繼承和初始化

繼承初始化匯出類的時候 先執行基類的預設建構函式 再執行匯出類的建構函式

在匯出類的建構函式中可以用super(引數)的方法呼叫基類的建構函式

順序one:建構函式不存在重寫方法的時候(p159)

呼叫基類構造器,按宣告順序初始化方法,呼叫匯出類構造器

順序two:構造器呼叫重寫方法(p163)

先分配給物件儲存空間初始化成二進位制的零,呼叫複寫的構造器中的draw()方法,按照宣告順序呼叫成員初始化方法,呼叫匯出類的構造主體

6:

final 定義基本資料型別的時候 表示這個數不能改變,在編譯期實行。

定義引用的時候表示指向的地址不能改變,無法再次指向另一個地址

允許空白final 但是在使用前必須賦值

final方法 原因是把方法鎖定,防止繼承類修改覆蓋他的含義

如果試圖覆蓋一個private方法 是被允許的,這是生成了一個新的方法

final類 表明了不打算繼承該類

7:

多型就是建立一個基類的引用,可以把任意它子類的物件動態繫結指向這個引用。

如果用向上造型建一個類 Shape sh = new Circle(); sh.test();如果匯出類覆蓋了基類的test方法呼叫重寫方法,如果沒有重寫方法就用基類test方法,沒有重寫的情況下這個sh物件只能用基類方法,基類的屬性,就不能呼叫新方法。一般想呼叫新方法就不用向上造型,用向下造型。向上造型容易丟失匯出類的資訊,但是安全的,因為基類不會具有大於匯出類的介面,向下造型容易產生型別轉換錯誤,不安全。

如果方法是靜態的,他的行為就不具備多型重寫不重寫,都是呼叫基類的static方法,或者呼叫匯出類的重寫非static方法

構造器不具有多型性,但是構造器中的方法會跟重寫方法有衝突,詳細看4

8:

抽象類abstract extends:包含抽象方法的類是抽象類,可以有定義的方法,不能建立物件,如果從一個抽象類繼承,並想建立該類的物件,那就必須為基類所有的抽象方法提供方法定義。

介面interface implements:產生一個完全抽象的類,不提供任何具體表現的類,介面不僅僅是極度抽象的類,它允許通過建立一個能被向上轉型為多種基類的型別,實現某種多重繼變種的特性。介面屬性是預設是 public static final 的不寫也這個意思,方法是public abstract。

繼承只能繼承一個,介面實現可以好幾個。

實用介面核心:1為了能夠向上造型為多個基型別,防止建立物件並確保僅僅建立一個介面,如果知道某事物應該是一個基類首先想到的是介面。

介面常見用法 策略設計模式,介面與工廠。

介面中定義的屬性不能是空final,但可以使被非常亮表示式初始化,既然屬性是static他們就可以在類第一次被載入時初始化,發生在屬性首次被訪問時候,並且值放在該介面的靜態儲存區域內。

9:


容器基本型別是List,Set,Queue,Map集合類。

ArrayList可以自動擴充自身尺寸的陣列