日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java的网络编程有用吗_十大有用但又偏执的Java编程技术

發布時間:2023/12/3 java 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java的网络编程有用吗_十大有用但又偏执的Java编程技术 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

java的網絡編程有用嗎

經過一段時間的編碼(以我為例,大約20年左右,當您玩得開心時光飛逝),人們開始接受這些習慣。 因為,你知道...

任何可能出錯的事情都會發生。

這就是為什么人們會采用“防御性編程”的原因,即偏執狂的習慣有時會變得很有意義,有時會變得晦澀難懂和/或聰明,甚至在想到編寫者時也會有些怪異。 這是我個人列出的十大有用但又偏執的Java編程技術。 我們走吧:

1.首先將字符串文字

通過將String文字放在equals()比較的左側,防止偶然的NullPointerException從來不是一個壞主意,如下所示:

// Bad if (variable.equals("literal")) { ... }// Good if ("literal".equals(variable)) { ... }

這是顯而易見的。 將表述從次優版本改為好版本不會丟失任何內容。 如果我們只有真正的期權 ,對嗎? 不同的討論…

2.不要相信早期的JDK API

在Java的早期,編程一定是一個很大的難題。 這些API仍然很不成熟,您可能會碰到如下一段代碼:

String[] files = file.list();// Watch out if (files != null) {for (int i = 0; i < files.length; i++) {...} }

看起來偏執嗎? 也許吧, 但是閱讀Javadoc :

如果此抽象路徑名不表示目錄,則此方法返回null。 否則,將返回一個字符串數組,該字符串數組用于目錄中的每個文件或目錄。

是的,對。 不過,最好確保添加另一張支票:

if (file.isDirectory()) {String[] files = file.list();// Watch outif (files != null) {for (int i = 0; i < files.length; i++) {...}} }

mm! 編碼Java列表時,違反了我們的10條最佳最佳實踐中的規則5和6。 因此,請做好準備并添加該null檢查!

3.不要相信“ -1”

我知道這很偏執。 String.indexOf()的Javadoc明確指出……

返回此對象表示的字符序列中字符第一次出現的索引;如果未出現字符,則返回-1。

因此, -1是理所當然的,對吧? 我說不。 考慮一下:

// Bad if (string.indexOf(character) != -1) { ... }// Good if (string.indexOf(character) >= 0) { ... }

誰知道。 也許他們需要在某個時間點進行ANOTHER編碼,以便說,如果不區分大小寫地檢查, otherString包含otherString …也許是返回-2的好例子? 誰知道。

畢竟, 關于十億美元的錯誤 ,我們已經進行了數十億次討論,這是NULL 。 為什么我們不應該開始討論-1 ,它在某種程度上是原始類型int的替代null ?

4.避免意外分配

是的 它發生得最好(盡管不是我。請參閱#7)。

(假設這是JavaScript,但是我們也要對語言保持偏執)

// Ooops if (variable = 5) { ... }// Better (because causes an error) if (5 = variable) { ... }// Intent (remember. Paranoid JavaScript: ===) if (5 === variable) { ... }

再次。 如果您的表達式中有文字,請將其放在左側。 當您要添加另一個=符號時,您不會在這里偶然出錯。

5.檢查空AND長度

只要有集合,數組等,請確保其存在且不為空。

// Bad if (array.length > 0) { ... }// Good if (array != null && array.length > 0) { ... }

您永遠不知道這些數組從何而來。 也許來自早期的JDK API?

6.所有方法均為最終方法

您可以告訴我所有關于您的開放/封閉原則的信息,這些都是胡扯。 我不信任您(正確地擴展了我的課程),我也不信任自己(不偶然地擴展了我的課程)。 這就是為什么所有未明確打算用于子類型化(即僅接口)的事物都是嚴格final 。 另請參閱我們的《 編碼Java的10條最佳實踐》列表中的第9條。

// Bad public void boom() { ... }// Good. Don't touch. public final void dontTouch() { ... }

是。 這是最終的。 如果那對您不起作用,請對其進行修補或檢測,或重寫字節碼。 或發送功能請求。 我敢肯定,您要覆蓋上述內容并不是一個好主意。

7.所有變量和參數均為最終變量

就像我說的。 我不信任自己(不會意外覆蓋我的價值觀)。 話雖如此,我一點也不相信自己。 因為…

…這就是為什么所有變量和參數也都設為final 。

// Bad void input(String importantMessage) {String answer = "...";answer = importantMessage = "LOL accident"; }// Good final void input(final String importantMessage) {final String answer = "..."; }

好吧,我承認。 盡管我應該這樣做,但我確實很少經常申請。 我希望Java像Scala一樣正確 ,人們只需在各處輸入val ,甚至都無需考慮可變性-除非他們通過var顯式(很少!)使用它。

8.重載時不要相信泛型

是。 這有可能發生。 您相信您寫的是一個超級棒的API,它完全搖擺并且完全直觀,并且隨之而來的是一些用戶,它將所有內容原始廣播到Object直到織補編譯器停止執行,然后突然他們會鏈接錯誤的方法,以為這是您的錯誤(總是如此)。

考慮一下:

// Bad <T> void bad(T value) {bad(Collections.singletonList(value)); }<T> void bad(List<T> values) {... }// Good final <T> void good(final T value) {if (value instanceof List)good((List<?>) value);elsegood(Collections.singletonList(value)); }final <T> void good(final List<T> values) {... }

因為,您知道……您的用戶,他們喜歡

// This library sucks @SuppressWarnings("all") Object t = (Object) (List) Arrays.asList("abc"); bad(t);

相信我。 我已經看到了一切。 包括像

偏執是很好的。

9.始終打開默認開關

切換...這些滑稽的陳述之一,我不知道該敬畏地嚇呆還是哭泣。 無論如何,我們被switch困住了,所以我們最好還是在需要的時候把它弄對。 即

// Bad switch (value) {case 1: foo(); break;case 2: bar(); break; }// Good switch (value) {case 1: foo(); break;case 2: bar(); break;default:throw new ThreadDeath("That'll teach them"); }

因為將value == 3引入軟件的那一刻,它一定會來! 而且不要說enum ,因為它也會發生在enums !

10.用花括號切換

實際上, switch是最醉人的說法,任何人在喝醉或打賭時都被允許進入一種語言。 考慮以下示例:

// Bad, doesn't compile switch (value) {case 1: int j = 1; break;case 2: int j = 2; break; }// Good switch (value) {case 1: {final int j = 1;break;}case 2: {final int j = 2;break;}// Remember:default: throw new ThreadDeath("That'll teach them"); }

在switch語句中,所有case語句之間僅定義了一個作用域。 實際上,這些case語句甚至不是真正的語句,它們就像標簽,并且switch是goto調用。 實際上,您甚至可以將case語句與令人驚訝的FORTRAN 77 ENTRY語句進行比較, FORTRAN 77 ENTRY語句的神秘之處僅在于其強大功能。

這意味著無論我們是否發出break ,都會為所有不同情況定義變量final int j 。 不是很直觀。 這就是為什么通過一個簡單的block在每個case語句中創建一個新的嵌套作用域始終是一個好主意的原因。 (但不要忘記塊內的break !)

結論

偏執狂編程有時看起來很奇怪,因為代碼往往比實際需要的更為冗長。 您可能會想,“哦,這永遠不會發生”,但是正如我所說。 經過20年左右的編程,您只是不想修復僅由于該語言太老又有缺陷而導致的那些愚蠢的,不必要的小錯誤。 因為你知道

現在輪到你了!

您在編程中最偏執的怪癖是什么?

翻譯自: https://www.javacodegeeks.com/2015/08/top-10-useful-yet-paranoid-java-programming-techniques.html

java的網絡編程有用嗎

總結

以上是生活随笔為你收集整理的java的网络编程有用吗_十大有用但又偏执的Java编程技术的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产成人精品一区二区三区在线观看 | 九九夜 | www欧美在线 | av网站在线观看不卡 | 国产精品免费看 | 成人免费小视频 | 午夜激情网 | av在线播放地址 | 黄网在线看 | 人人妻人人澡人人爽精品 | 日韩中文字幕av电影 | 182tv福利视频 | 男女做那个视频 | 男性影院 | 黄色免费看视频 | 黄免费在线观看 | 永久av在线 | 亚洲av永久中文无码精品综合 | 精品产国自在拍 | 五十路息子 | 欧美日本亚洲韩国国产 | 欧美日韩一级二级 | 日日骚一区 | 日本成人动漫在线观看 | 爱福利视频一区 | 成人毛片在线观看 | youjizz日韩 | 亚洲草逼 | 日本韩国欧美一区二区 | 欧美午夜精品一区二区蜜桃 | 欧美日韩日本国产 | 欧美大片免费高清观看 | 天天射天天射 | 日韩图色 | 日韩中文字幕在线免费观看 | 亚洲不卡在线视频 | 欧美成人精品在线观看 | 亚洲狠狠爱| 奇米四色在线观看 | 久久中文字幕国产 | 亚洲视频在线观看免费视频 | 精品久久久久久久久久久国产字幕 | av午夜在线 | 中文字幕第四页 | 精品久久久久久国产 | 天堂网av在线 | 国产剧情av在线 | 国产永久视频 | 人人爽人人做 | 激情综合图区 | 中文字幕黄色片 | 成年人黄色录像 | av成人免费在线观看 | h视频在线免费观看 | 国产又粗又大又黄 | 玉丸(双性调教) | 成人试看120秒体验区 | 国产一级特黄a高潮片 | 午夜爽爽爽视频 | 日韩中文网 | 国产按摩一区二区三区 | 色www.| 韩国伦理片观看 | 日韩黄大片| 久久久久噜噜噜亚洲熟女综合 | 日韩中文字幕一区二区三区 | 免费的黄色的视频 | 亚洲88av| 国产区一区二区三 | 亚洲一道本| 神马久久久久久久 | 日韩美女爱爱 | 日韩第一色 | 日本色悠悠 | 日本一区二区三区在线播放 | 久久艹免费视频 | 欧美伊人久久 | 亚洲av无码国产精品麻豆天美 | 中文一区二区在线观看 | 亚洲欧美日韩国产成人精品影院 | 精品国产午夜 | 狠狠躁夜夜躁人人爽天天高潮 | 狠狠干在线观看 | 人人爽人人干 | 日韩中文字幕不卡 | 伊人开心网 | 91呦呦| 日韩免费一区二区三区 | www伊人| 国产免费不卡 | 欧美日韩性视频 | 国产成人精品综合在线观看 | www精品视频 | 日韩成年视频 | 日韩免费在线 | 超级碰在线视频 | 亚洲av男人的天堂在线观看 | 在线免费国产视频 | 精品人妻伦一二三区免费 |