Java裡的資料型別
Java裡的物件是引用,就像C的指標。對引用的賦值實際就是對指標的賦值,物件本身並沒有被賦值。
物件的儲存
暫存器-程式無法感知暫存器的存在。透過CPU對暫存器操作。堆疊-存放物件引用堆-存放物件常量儲存-存不變常量非RAM儲存-存持久化資料基本資料型別:
基本型別大小最小值最大值包裝器型別boolean---Booleanchar16bitUnicode 0Unicode 2e16-1Characterbyte8bit-128+127Byteshort16bit-2e15+2e15-1Shortint32bit-2e31+2e31-1Integerlong64bit-2e63+2e63-1Longfloat32bitFloatdouble64Doublevoid---Void
類類由欄位和方法構成
static關鍵字對於類的欄位,透過new物件的方式為這個欄位分配儲存空間,這樣才能對欄位及方法進行訪問。用static對類的欄位和方法進行修飾後,這樣的欄位和方法稱為靜態欄位和靜態方法。靜態欄位和靜態方法與類的物件不存在繫結關係,即可以在沒有建立物件的情況下,透過類直接訪問靜態欄位和靜態方法。這是由於靜態物件和靜態方法在編譯期就為它們建立了儲存空間。
編寫一個Java程式編譯器:ideal
一些規則java程式檔案的字尾為.java
每個.java檔名最多包含一個public類,也可以沒有public類
當指定某個類為public時,該類的類名必須與檔名相同
關於import寫程式碼時,需要用到其他類庫,最常用的就是java自帶的類庫。使用import來引用類庫。一個import的例子:
import my.example.java.Test
import的行為是,在classpath中指定的路徑裡查詢my/example/java/Test.class檔案,並載入
package多個java程式碼可以透過package關鍵字申明成一個工具包
初始化與清理構造器透過new來建立類的物件。每當呼叫new來建立物件時,java會呼叫構造器物件進行初始化。初始化完畢,意味著這個物件已經準備好對外提供服務了。
如果一個類沒有顯式提供構造器,則編譯器會為該類自動生成一個預設構造器。
構造器採用與類名相同的名稱。
class Rock { Rock() { //This is the constructor System.out.println("This is the constructor"); }}
過載
Java支援構造器和方法的過載(不是重寫override)
區分過載方法的簽名:方法名+引數列表
透過方法的簽名來區分過載,所以返回型別不作為區分過載的因素。
this關鍵字對當前物件的引用
有了this關鍵字可以實現在構造器中呼叫其他過載構造器,如:
class Rock { public int id; Rock(int id) { this.id = id; } Rock() { this(1); }}
初始化
對類變數的初始化有兩種方法:
在申明時直接初始化顯式初始化在構造器內進行初始化初始化順序:
透過new建立物件時,物件的初始化順序:
對申明的變數進行變數的預設值的初始化:變數的申明可以散落在類的定義的不同位置,但初始化時,會按申明的先後順序,完成初始化然後呼叫建構函式進行初始化;呼叫構造器:如果變數未在申明時就完成初始化,則可以透過構造器完成初始化;靜態資料的初始化優先於非靜態資料;初始化例子public class Rock { public int id = 1; //initialization when define public String name; public static String greeting1; public static String greeting2; public static int age = 1000; static{ greeting1 = "Hello"; //explicitly initialization } Rock(String name) { this.name = name; // initialization in constructor greeting2 = "Hi"; } public String location1 = "Shanghai"; public String getName(){ return name; } public String location2 = "China"; public String getLocation(){ return location1 + " - " + location2; } public void greeting(){ System.out.println(this.greeting); } public static void main(String[] args){ Rock r = new Rock("Robin"); System.out.println("Name: " + r.getName()); System.out.println("Location: " + r.getLocation()); r.greeting(); }}
陣列初始化可變引數列表