首頁 Java java教程 關於 Java 的10個謊言

關於 Java 的10個謊言

Jan 18, 2017 pm 03:21 PM
java

Java程式設計語言

java 是一種可以撰寫跨平台應用軟體的物件導向的程式設計語言,是由Sun Microsystems公司於1995年5月推出的Java程式設計語言和Java平台(即JavaEE(j2ee) , JavaME(j2me), JavaSE(j2se))的總稱。


下面的這些都算是比較高級的問題了,面試中一般也很少問到,因為它們可能會把麵試者拒之門外。不過你可以自己找個時間實踐一下。

1. System.exit(0)會跳過finally區塊的執行

System.setSecurityManager(new SecurityManager() {
        @Override
        public void checkExit(int status) {
            throw new ThreadDeath();
        }
    });
    try {
        System.exit(0);
    } finally {
        System.out.println("In the finally block");
    }
登入後複製

這段程式碼為什麼會輸出In the finally block?為什麼沒有列印出堆疊追蹤資訊呢?

2. String str = “Hello”;其中str是一個字串物件 跟C++不同的是,Java裡的變數要不是基礎類型,就是引用。變數不可能是物件。這意味著像這樣的表達式:

String str = "Hello";
    String text = "Bye";
    str == text; // 比较两个引用,而不是内容
    str = text; // 把text的引用赋值给str
登入後複製

大多數情況下其實沒有太大的區別,不過這麼寫容易引起困惑。

final StringBuilder sb = new StringBuidler();
    sb.append("Hello"); // 这个引用是final类型的,而不是这个实例。
    method(sb); // 可以通过方法来修改这个实例,不过这个变量是无法修改的
登入後複製

3. Java的記憶體外洩跟C++程式設計師理解的一樣

記憶體外洩在維基百科上的定義是」在電腦科學中,如果程式沒有正確地管理好記憶體分配,就會出現記憶體外洩。在在物件導向程式設計中,如果記憶體中的一個物件無法在程式碼中存取不到的話,這就是記憶體外洩。記憶體外洩這個術語在Java中意味著:記憶體中存在著不該存在的對象,通常來說是有些不再使用的資源卻仍儲存在集合中。

4. 多執行緒程式設計很難

如果你沒有經驗的話,多執行緒程式設計的確很難。如果你只是把一堆程式碼丟到一堆線程中去執行,那樣出了問題根本沒辦法解決,只能是一團糟。 但如果你能進行線程的按需分配,控制線程間的交互,使用一些團隊中的成員也能明白的簡單的模式,問題就變得簡單多了。當然還有一個挑戰就是你得讓團隊中的所有人都遵循你的這個規則:-)

5. 不用關心不同操作間性能的不同

最近聽說有個問題,它涉及到了整數的相加,記憶體訪問,取模,以及輸出到控制台。儘管在這些操作裡面,每一個都比前面一個要慢一個數量級,但這哥們就是想優化這裡面最快的操作,加法,還用了些更昂貴的操作來替換它。 如果你真的想要優化效能,你最好用一個廉價的操作來替換掉那些昂貴的操作,如果你的瓶頸在硬體這塊,比方說要從硬碟裡面讀取大量的文件,修改軟體的程式碼是沒啥用了,因為問題根本不在這。

6. 隨機數都是隨機的

一組特定的隨機數就像是某種模式的數字。這個問題我在這篇文章中已經講到過了。很多人都不相信隨機數產生器產生的數字其實是不隨機的。

7. 應該盡量避免使用浮點數,因為它們會產生隨機錯誤

對於同一個操作而言,浮點數每次都會產生相同的錯誤。錯誤是可預測的,因此也是可控制的。如果你清楚你要做的事情是什麼,並且堅持使用一些簡單的規則,比如說對結果進行舍入操作,那麼浮點數出的錯也不會比BigDecimal要多,除此之外它的可讀性更強,而且效率快了百倍以上(同時產生的垃圾對像也更少了)。

8. 時區是永恆不變的

之所以會有這個誤解是因為,隨著時間的變化,時區是在改變的。這意味著歐洲/倫敦在新紀元的時候是1970/1/1 01:00而不是00:00,為什麼?因為倫敦在1968年到1971年這兩年間的時間內使用的是夏令時間。

在過去的這些年裡面,還有不少時區也發生了變化。莫斯科以前是東三區(GMT+3),現在是東四區(GMT+4)(從2011年3月27日開始)。如果你看下2010年的時間,你會發現它是東三區而不是東四區。

還有些事你聽起來或許會覺得很意外:

1721年的瑞典的2月有30天。

1751年英格蘭的第一天是3月25日,和法國相比差了11天。

美國採用公曆紀年後,它往前追溯了上百年,這樣原先記錄的那些日期都可以用兩種日曆來進行表示(通常為了更精確會同時提供兩個日期)。例如喬治華盛頓的生日從1731年2月11變成了1732年2月22年。

9. 當你在執行緒中讀取一個非volatile變數時,你最終能讀取它更新的那個值。

前幾天這個問題在StackOverflow上出現過兩回了。一般來說,JIT編譯器優化程式碼的時候會將這個執行緒沒有修改到的非volatile類型的欄位進行內聯。一旦這個程式碼被編譯了(你可以透過-XX:+PrintCompilation看到),你在另一個執行緒對這個欄位進行的修改它很可能就永遠看不到了。加上隨機的同步區塊或列印語句可以延後這個最佳化的執行,或是擾亂JIT編譯器,讓它不去執行這個最佳化。

10. Java面試題都是正確的

有很多Java面試題要么是過時了(超過10年沒有更新了,和現在的Java版本已經脫節),要么是誤導大家的,甚至可能是錯的。不幸的是這些答案都沒有檢查過就被到處傳來傳去。

我會參考Stackoverflow上面的答案,因為這裡的答案同行審查做的更好些。總的來說,像rose india這樣的網站就不要上了,上面的答案的品質差的離譜。如果你喜歡刨根究底的話,可以看看上面一篇文章裡有多少拼字錯誤(類別名稱以及專業術語)或錯誤的言論。存在這些問題的一個原因在於沒有一個有效的回饋機制來修正這些錯誤。

以上就是關於 Java 的10個謊言的內容,更多相關內容請關注PHP中文網(www.php.cn)!


本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

突破或從Java 8流返回? 突破或從Java 8流返回? Feb 07, 2025 pm 12:09 PM

Java 8引入了Stream API,提供了一種強大且表達力豐富的處理數據集合的方式。然而,使用Stream時,一個常見問題是:如何從forEach操作中中斷或返回? 傳統循環允許提前中斷或返回,但Stream的forEach方法並不直接支持這種方式。本文將解釋原因,並探討在Stream處理系統中實現提前終止的替代方法。 延伸閱讀: Java Stream API改進 理解Stream forEach forEach方法是一個終端操作,它對Stream中的每個元素執行一個操作。它的設計意圖是處

PHP:網絡開發的關鍵語言 PHP:網絡開發的關鍵語言 Apr 13, 2025 am 12:08 AM

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7

PHP與Python:了解差異 PHP與Python:了解差異 Apr 11, 2025 am 12:15 AM

PHP和Python各有優勢,選擇應基於項目需求。 1.PHP適合web開發,語法簡單,執行效率高。 2.Python適用於數據科學和機器學習,語法簡潔,庫豐富。

PHP與其他語言:比較 PHP與其他語言:比較 Apr 13, 2025 am 12:19 AM

PHP適合web開發,特別是在快速開發和處理動態內容方面表現出色,但不擅長數據科學和企業級應用。與Python相比,PHP在web開發中更具優勢,但在數據科學領域不如Python;與Java相比,PHP在企業級應用中表現較差,但在web開發中更靈活;與JavaScript相比,PHP在後端開發中更簡潔,但在前端開發中不如JavaScript。

Java程序查找膠囊的體積 Java程序查找膠囊的體積 Feb 07, 2025 am 11:37 AM

膠囊是一種三維幾何圖形,由一個圓柱體和兩端各一個半球體組成。膠囊的體積可以通過將圓柱體的體積和兩端半球體的體積相加來計算。本教程將討論如何使用不同的方法在Java中計算給定膠囊的體積。 膠囊體積公式 膠囊體積的公式如下: 膠囊體積 = 圓柱體體積 兩個半球體體積 其中, r: 半球體的半徑。 h: 圓柱體的高度(不包括半球體)。 例子 1 輸入 半徑 = 5 單位 高度 = 10 單位 輸出 體積 = 1570.8 立方單位 解釋 使用公式計算體積: 體積 = π × r2 × h (4

PHP與Python:核心功能 PHP與Python:核心功能 Apr 13, 2025 am 12:16 AM

PHP和Python各有優勢,適合不同場景。 1.PHP適用於web開發,提供內置web服務器和豐富函數庫。 2.Python適合數據科學和機器學習,語法簡潔且有強大標準庫。選擇時應根據項目需求決定。

創造未來:零基礎的 Java 編程 創造未來:零基礎的 Java 編程 Oct 13, 2024 pm 01:32 PM

Java是熱門程式語言,適合初學者和經驗豐富的開發者學習。本教學從基礎概念出發,逐步深入解說進階主題。安裝Java開發工具包後,可透過建立簡單的「Hello,World!」程式來實踐程式設計。理解程式碼後,使用命令提示字元編譯並執行程序,控制台上將輸出「Hello,World!」。學習Java開啟了程式設計之旅,隨著掌握程度加深,可創建更複雜的應用程式。

PHP:許多網站的基礎 PHP:許多網站的基礎 Apr 13, 2025 am 12:07 AM

PHP成為許多網站首選技術棧的原因包括其易用性、強大社區支持和廣泛應用。 1)易於學習和使用,適合初學者。 2)擁有龐大的開發者社區,資源豐富。 3)廣泛應用於WordPress、Drupal等平台。 4)與Web服務器緊密集成,簡化開發部署。

See all articles