1、字符串不變性
String s = "abcd";
s = s.concat("ef");
2、equals()方法、hashCode()方法的區別
HashCode被設計用來提高性能。equals()方法與hashCode()方法的區別在於:
如果兩個對象相等(equal),那麼他們一定有相同的哈希值。
如果兩個對象的哈希值相同,但他們未必相等(equal)。
3、Java異常類的層次結構
圖中紅色部分爲受檢查異常。它們必須被捕獲,或者在函數中聲明爲拋出該異常。
4、集合類的層次結構
注意Collections和Collection的區別。(Collections包含有各種有關集合操作的靜態多態方法)
5、Java同步
Java同步機制可通過類比建築物來闡明。
6、別名
別名意味着有多個變量指向同一可被更新的內存塊,這些別名分別是不同的對象類型。
B[] b = new B[10];
A[] a = b;
a[0] = new A();
b[0].methodParent();
a、b都指向內存區域,到運行時再確定實際要調用的是誰
class A {
public void methodParent() {
System.out.println("method in Parent");
}
}
class B extends A {
public void methodParent() {
System.out.println("override method in Child");
}
public void methodChild() {
System.out.println("method in Child");
}
}
public class Main {
public static void main(String[] args) {
B[] b = new B[10];
A[] a = b;
a[0] = new A();
b[0].methodParent();
}
}
這段代碼如果運行將會報錯
Exception in thread "main" java.lang.ArrayStoreException: aliasingtest.A
at aliasingtest.Main.main(Main.java:26)
需要修改
B[] b = new B[10];
A[] a = b;
a[0] = new B();
b[0].methodParent();
因爲B[] b = new B[10];已經定義了數據類型爲B,Java 是強類型語言
7、堆和棧
class A {
int x;
int y;
}
...
public void m1() {
int i = 0;
m2();
}
public void m2() {
A a = new A();
}
圖解表明了方法和對象在運行時內存中的位置。
8、Java虛擬機運行時數據區域
圖解展示了整個虛擬機運行時數據區域的情況。
各個線程棧區數據不共享,堆區、方法區、運行時常量區數據共享。
棧數據包括:局部變量數據組、操作棧、常量池數據引用
轉自:https://blog.csdn.net/zivensonice/article/details/51465531