1. 程式人生 > >java學習(3)構造器和垃圾收集器、數字與靜態

java學習(3)構造器和垃圾收集器、數字與靜態

構造器和垃圾收集器

棧與堆

方法的呼叫和區域性變數在,所有的物件在

棧頂上的方法是目前正在執行的。

物件的引用變數(就是遙控器)存放在棧上,而物件則存放到堆上

例項變數存放在所屬物件的堆空間上。

建構函式

建構函式並不是一個方法

建構函式沒有返回的型別,並且名稱要與類名一致

分辨方法和建構函式的辦法就是是否有返回型別

如果寫了一個帶有引數的建構函式,那麼應該再寫一個沒有引數的建構函式

建構函式過載,編譯器看的是引數的型別和順序,不是引數的名字

例項變數有預設值,區域性變數沒有

建構函式可以是私有的

在建立新物件時,所有繼承下來的建構函式都會執行。

抽象類作為父類,他的建構函式也會在具體子類創建出例項時執行。

呼叫父類的建構函式使用的是:super(); 如果我們在子類的建構函式裡面不寫,那麼編譯器會自動幫我們新增,只不過新增的是沒有引數的版本

使用this()來從某個建構函式呼叫同一個類的另外一個建構函式,this()只能用在建構函式中,且必須是第一行語句。super()和this()不能兼得。

物件的生命週期

當最後一個引用消失的時候,物件就會變成可回收的。

對null引用執行圓點運算子會在執行期遇到NullPointerException這樣的錯誤

數字與靜態

Math方法

最接近全域性的方法。

這個類中的所有方法都不需要例項變數值,因為這些方法是靜態的。

靜態(static)

靜態的方法是以類名來呼叫的,靜態的方法不需要類的例項

可以使用私有的建構函式來限制非抽象類被初始化

靜態的方法不能呼叫非靜態的變數,也不能呼叫非靜態的方法

以引用變數名呼叫靜態方法的程式程式碼可以實現,但是不推薦使用

靜態變數的值對於所有的例項來說都相同,同一類所有的例項共享一份靜態變數

靜態變數會在該類的任何靜態方法執行前就初始化。

final

final的變數代表你不能改變它的值。

final的方法代表你不能覆蓋掉該方法。

final的類代表你不能繼承該類(也就是建立子類)

總結一下(這塊真的有點亂啊)

變數用static代表這是能夠修改的全域性變數,變數用final代表這是不能修改值的變數(可以看成是全域性的),abstract不能修飾變數。

類用abstract修飾表示是類本身不能宣告例項,只能由子類來宣告例項;類用final修飾表示類不能有子類來繼承;static不能修飾類。

方法用abstract修飾那麼該類也是abstract,表示該方法必須由子類覆蓋;方法用final代表子類中不能覆蓋該方法;方法用static表示該方法的呼叫時用類名來實現的,不需要例項。

autoboxing(自動裝箱)

包裝型別(Interger)和primitive主資料(int)可以相互轉換

可以用在很多的地方:方法的引數、返回值、Boolean表示式、數值運算、賦值

包裝也有靜態的實用性方法!(將String轉換成primitive主資料型別:Integer.parseInt)、(將primitive主資料型別轉換為String Double.toString)

數值轉換成String,最簡單的方法是將數字接上現有的String  String doubleString = “ ” + d;

數字的格式化

呼叫靜態的String.format()並傳入值與格式設定

格式化說明的格式:%[argument number] [flags] [width] [.precious] type

format()函式不是用的過載實現的,而是使用的java的一項新的功能:可變引數列表

日期

Date Today = new Date();

String.format("%tA, %<tB %<td", Today);

操作日期可以使用:java.util.Calendar

Calendar cal = Calendar.getInstance();

靜態import

可以少打幾行程式碼,但是會使程式碼變得難以閱讀

11、異常處理

使用try/catch塊告訴編譯器呼叫方法有風險的

異常時一種Exception型別的物件

方法可以抓住其他方法所丟擲的異常。異常總是會丟給呼叫方。會丟擲異常的方法必須要宣告他有可能會這麼做

finally:無論如何都要執行的部分

異常時多型的,以異常的父類來宣告會丟擲的異常

如果不想處理異常,可以把它duck掉來避開,但這是在踢皮球

異常處理規則:如果只帶有finally的try必須要宣告異常