Java平臺與Java語言的關係:Java平臺包括:核心Java API(包、框架、類庫),Java字節碼(編譯且可執行的形式),Java虛擬機(JVM,執行字節碼的運行機制)。
Groovy、JRuby、JPython也可以編寫出運行在JVM上執行的字節碼。Android使用的是Dalvik虛擬機,執行Dalvik字節碼
Java的運行機制:先編譯成系統無關的字節碼,再在JVM中解釋執行。
JVM工作步驟:創建JVM裝載環境與配置,裝載jvm.dll,初始化jvm.dll,調用JNIEnv實例裝載並處理Class類,運行Java程序。
JRE:Java Runtime Environment。JRE自帶的基礎類庫在JRE/lib/rt.jar中。包括SE版所有類庫
JDK:Java Development Kit。其中的常用工具包括:javac.exe,jar.exe,javadoc.exe,jdb.exe,java.exe,appletviewer.exe,javah.exe,javap.exe,jconsole.exe
JDK>JRE>JVM
GC Garbage Collection。 GC實現無嚴格規定,通常採用有向圖方式記錄、管理堆中所有對象,當對象不可達時,GC有責任回收這些內存空間。爲了GC更高效,注意儘早將不引用的對象賦爲null。finalize會加大GC的工作量,儘量少用,System.gc()用於通知GC運行,但並不保證一定會運行。
JAVA安裝後有jdk與jre(jre1)兩個文件夾,其中jdk下又有一個jre(jre2)文件夾。其中jre2是用來爲JDK中Java編寫的開發工具提供運行環境的。
final關鍵字:不可繼承、不可覆蓋、不可修改(簡單類型不可修改值,引用類型不可修改引用)
instanceof關鍵字:a instanceof someClass在a爲someClass類的對象或其子類對象時返回true,否則返回false
float f = 3.4是不正確的,因爲小數默認爲double類型。必須float f = 3.4f或float f = (float)3.4
成員變量與局部變量:
1. 局部變量必須顯式初始化,而成員變量可默認初始化(除僅被final而不被static修飾時)
2. 成員變量存儲在堆中,局部變量存儲在棧中。
簡單變量與引用變量:
1. 簡單變量存在本中,引用變量分爲引用空間和存儲空間兩部分,引用空間在棧中,存放存儲空間的首地址,存儲空間在堆中。
2. 引用變量相互賦值時傳遞的是地址。
x+=y與x=x+y的區別:+=包含了自動的強制類型轉換。
x?y:z表達式中,y和z應當是相同的數據類型。(如果採用類似someMethod(x?y:z)判斷執行某方法的參數而y與z類型不同,即使someMethod擁有對兩種類型不同的重載,該代碼也無法執行的。必須someMethod存在對y與z共同超類的重載纔可以)。
String的+運算符是如何實現重載的?(使用的是StringBuilder的append()方法)
String s = new String(“abc”)和String s = “abc”的區別
如果String s1 = new String(“abc”); String s2 = new String(“abc”);String s3 = “abc”; String s4 = “abc”;
s1==s2爲false,s3==s4爲true。
s3、s4的賦值,採用的是Java爲字符串提供緩衝池機制,去緩衝池查找相應字符串,否則創建一個新的字符串放在緩衝池中。