OnJava8筆記1--小知識總結(jié)

大名鼎鼎的《Thinking in java》Java8版本發(fā)布了,趕緊趁熱乎精讀一遍,這個(gè)文集是我自己的學(xué)習(xí)筆記,想要系統(tǒng)學(xué)習(xí)的同學(xué)參考價(jià)值不大,適合查漏補(bǔ)缺。
因?yàn)檫@本書前期知識很基礎(chǔ),這里集中記錄自己認(rèn)為比較容易忘的小知識點(diǎn),供自己日后翻閱。

Java更具可移植性的原因

  • Java 確定了每種基本類型的內(nèi)存占用大小。 這些大小不會像其他一些語言那樣隨著機(jī)器環(huán)境的變化而變化。

高精度數(shù)值 BigIntegerBigDecimal

  • 沒有對應(yīng)的基本類型
  • 不能用運(yùn)算符進(jìn)行運(yùn)算,需要內(nèi)部方法
  • 犧牲速度換精度

數(shù)組

  • 數(shù)組直接賦值給另一個(gè)數(shù)組,也只是復(fù)制一個(gè)引用
  • 創(chuàng)建一個(gè)對象數(shù)組,實(shí)際上是引用數(shù)組

可變參數(shù)列表

  • 當(dāng)你指定參數(shù)時(shí),編譯器實(shí)際上會為你填充數(shù)組
  • 既能傳遞不定量參數(shù),也能傳遞一個(gè)數(shù)組
  • 如果列表中沒有任何元素,那么轉(zhuǎn)變?yōu)榇笮?0 的數(shù)組
/**
 * 可變參數(shù)列表
 */
class A {}
public class Code1 {
    public static void print(Object... args) {
        for(Object a: args) {
            System.out.print(a + " ");
        }
        System.out.println();
    }

    public static void main(String[] args) {
        // 單獨(dú)的不定量參數(shù)可以
        print(1, 2, 3);
        print(new A(), new A());
        print("aaa");
        // 一個(gè)數(shù)組也可以
        print((Object[]) new Integer[] {1,2,3});
        // 也可以什么都沒有
        print();
        // 基本類型可以和自動裝箱混用
        print(1,new Integer(2),3);
    }
}
  • 這種不能重載
public static void print1(Integer[] a) {
    System.out.println("int[]");
}
public static void print1(Integer... a) {
    System.out.println("int[]");
}
  • 重載方法中建議不要使用可變參數(shù)列表,容易出錯(cuò)

final

修飾數(shù)據(jù)
  • 數(shù)據(jù)為常量,在編譯時(shí)確定,但不一定知道確定的值

     private final int i4 = rand.nextInt(20);
    
  • 必須在定義常量的時(shí)候進(jìn)行賦值,若是空白 final,必須在構(gòu)造方法中為 final 數(shù)據(jù)賦值

  • 修飾對象時(shí),只是為引用常量,即引用不能被修改,對象本身的內(nèi)部數(shù)據(jù)可以被修改

  • 修飾數(shù)組,和修飾對象是一樣的情況

修飾參數(shù)
  • 在方法中不能改變參數(shù)指向的對象或基本變量
修飾方法
  • final修飾方法,該方法不能被子類重寫(Override)
  • 早期為了提高效率,但現(xiàn)代JVM可以進(jìn)行優(yōu)化,故禁止這種方式
  • 所有private方法都隱式為final方法,因?yàn)樗衟rivate方法都不能被重寫,故private final方法不會添加更多的意義
修飾類
  • 不能被繼承,目的是因?yàn)樵擃惖脑O(shè)計(jì)就是永遠(yuǎn)不需要改動,或者是出于安全考慮不希望它有子類。
final忠告
  • 程序員為了不讓其他人重寫這個(gè)方法,會用final修飾方法,但有時(shí)程序員沒有考慮到很全面,這就限制了方法被重寫(在有需求的情況下)
  • 舉個(gè)例子,java1.0/1,1 中的 Vector 中有很多方法是final的,這就大大限制了Vector的靈活性,這是java早期的缺陷,之后Vector被ArrayList代替。同時(shí),Vector中的很多方法都是既同步,有時(shí)final的,這就導(dǎo)致同步的開銷抹除了final 帶來的好處
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容