堆栈溢出回答了我们不知道的Java首要问题
您不應該錯過的堆棧溢出問題集合:
這不是秘密; 我們都使用堆棧溢出。 它掌握了生命,宇宙以及幾乎所有與代碼相關的內容的答案。 該平臺為開發人員,工程師和其他人員提供了一個找到他們所面臨問題的答案的地方,或者至少使他們處于解決方案的正確軌道上。
Java是Stack Overflow上最受歡迎的類別之一,總共提出了將近150萬個問題,并且每天增加數百個問題。 它為您在日常任務中偶然發現的問題提供了一些非常有趣的答案,以及對您不知道應該問的問題的答案。
我們總是可以學習到一些新的東西,而這正是我們決定要尋找的東西:對我們所不知道的問題的有趣答案。 讓我們來看看。
Java難題
堆棧溢出是尋找答案的地方,但它也是解決更多問題和謎語的好地方。 來自荷蘭的軟件開發人員Kevin Cruijssen發布了以下問題:
為什么array [idx ++] + =“ a”在Java 8中增加一次idx,而在Java 9和10中增加兩次?
為了證明這一點,他創建了以下代碼:
import java.util.*; public class Main {public static void main(String[] args) {int size = 3;String[] array = new String[size];Arrays.fill(array, "");for(int i = 0; i <= 100; ) {array[i++%size] += i + " ";}for(String element: array) {System.out.println(element);}} }在Java 8中運行它,我們得到以下輸出:
1 4 7 10 13 16 19 22 25 28 31 34 37 40 43 46 49 52 55 58 61 64 67 70 73 76 79 82 85 88 91 94 97 100 2 5 8 11 14 17 20 23 26 29 32 35 38 41 44 47 50 53 56 59 62 65 68 71 74 77 80 83 86 89 92 95 98 101 3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99但是,在Java 10中,我們得到以下信息:
2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 64 66 68 70 72 74 76 78 80 82 84 86 88 90 92 94 96 98 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 64 66 68 70 72 74 76 78 80 82 84 86 88 90 92 94 96 98 100 102 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 64 66 68 70 72 74 76 78 80 82 84 86 88 90 92 94 96 98 100在繼續閱讀之前,您可以嘗試猜測這里發生了什么嗎? 是什么導致了版本之間的不同輸出的神秘Java屬性?
準備不知所措:這是javac中的一個錯誤,該錯誤始于JDK9。根據正式的錯誤報告,當對字符串操作數應用“ + =”時,可能會產生一些副作用,如上面的代碼所示。
喬恩·韋爾尼 ( Jorn Vernee )將此答案向前推進了一步,并查看了此行的相應字節碼:
array [i ++%size] + = i +”“;
這是輸出:
21: aload_222: iload_323: iinc 3, 126: iload_127: irem28: aload_229: iload_330: iinc 3, 133: iload_134: irem35: aaload36: iload_337: invokedynamic #5, 0 // makeConcatWithConstants:(Ljava/lang/String;I)Ljava/lang/String;42: aastore好的一面是,此問題已修復,并將與其他一些不錯的功能一起在JDK 11中部署。
NullPointerException的重要性
您花了多少時間瀏覽日志,試圖查找異常并處理它們? 我們已經知道答案了-太久了。 確實,Stack Overflow提供了一個地方,我們可以在這里查詢和搜索有關問題的正確答案,并且在大多數情況下,過去有人已經遇到過同樣的問題。
開發人員遇到的最常見的異常之一是NullPointerException。 實際上,這是Java生產環境中最常見的例外。 一個引起我們注意的問題是有人試圖通過問“ 什么是NullPointerException,以及如何解決它? ”來找到問題的根本原因。 ?!?
投票最多的答案將其分解為步驟,因此更容易理解過程中發生的情況。 它首先聲明一個對象的指針,再聲明一個引用變量。
Integer num; num = new Integer(10);第一行是指針,由于我們沒有說明要指向的內容,因此Java將其設置為null。 僅在第二行中創建對象類型Integer,并將指針變量num分配給該對象。
在聲明變量但未創建對象之后,在第一行發生NullPointerException。 如果在創建對象之前嘗試取消引用num,則將獲得NullPointerException。 在大多數情況下,編譯器會發現問題,并告知“ num可能尚未初始化”,但有時您編寫的代碼不會直接創建該對象。
你怎么解決呢? Stack Overflow上最受關注的方法之一是在整個代碼中添加空檢查。 但是,您最終會得到太多如下所示的代碼行:
if (someobject != null) {someobject.doCalc(); }同樣, Stack Overflow可以幫助我們提高此代碼的效率。 在合同無效的情況下,或者在代碼無效的情況下,在代碼中檢查null是有意義的。
第一個建議很簡單:不要使用null作為響應。 但是,如果null為有效響應,則必須對其進行檢查。 使用返回集合的方法會更容易。 我們可以返回空集合(或數組)而不是null。
如果不使用集合,則可以使用Null Object模式。 在此模式中,我們使用一個實現預期接口的對象,其方法主體為空。 要將其放入代碼中,請進行以下比較:
Parser parser = ParserFactory.getParser(); if (parser == null) {// now what?// this would be an example of where null isn't (or shouldn't be) a valid response } Action action = parser.findAction(someInput); if (action == null) {// do nothing } else {action.doSomething(); }對此:
ParserFactory.getParser().findAction(someInput).doSomething();如果是我們提到的第二種情況,null不是有效的響應,則可以使用assert語句。 因此,它看起來像這樣:
assert <condition> //or assert <condition> : <object>您還可以通過其他方法來處理NullPointerExceptions以及為何它如此重要的解釋- 看看 。
Java 10中的局部變量類型推斷
Java 10中最受關注的更改之一是引入了局部變量類型推斷,這為Java添加了一些語法功能,從而簡化了它并改善了開發人員的體驗。
Java 10允許我們聲明變量而不必指定關聯的類型。 所以:
List<String> list = new ArrayList<String>(); Stream<String> stream = getStream();將被以下新的簡化語法取代:
var list = new ArrayList(); var stream = getStream();這種變化導致了一個有趣的問題。 Kotlin和Java中的var有什么區別? 正如阿列克謝·羅曼諾夫(Alexey Romanov)解釋的那樣,它們的含義有很大不同。
在Kotlin中,var表示“這是一個可變變量”,并且可以在推斷類型和顯式類型時使用。 另一方面,Java中var的含義是“這是具有推斷類型的變量”,并且可用于可變變量和最終變量。
最重要的是,Java中的var只能用于局部變量。 而Kotlin中的var也用于屬性。
最后的想法
堆棧溢出不僅僅是一個問答站點。 這是一個社區,人們可以互相幫助,進行熱烈的討論,然后開始玩樂。
如果您需要一段代碼的幫助或遇到無法解決的有趣謎語,那么這是理想的選擇。 這些問題僅占您所能找到的一小部分,如果您已經看到值得認為的問題,我們想知道! 在下面的評論中發布您最喜歡的答案或未回答的問題。
翻譯自: https://www.javacodegeeks.com/2018/07/stack-overflow-top-java-questions.html
總結
以上是生活随笔為你收集整理的堆栈溢出回答了我们不知道的Java首要问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 鼠标滑轮无法使用怎么解决的教程(鼠标滑轮
- 下一篇: 电脑微信聊天内容保存在哪个文件夹微信聊天