8張圖帶你輕鬆溫習Java知識

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章