欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

程序員最容易犯的錯,你中了幾個?-創(chuàng)新互聯(lián)

Java語言最開始是為了交互電視機而開發(fā)的,隨著時間的推移,他已經(jīng)廣泛應(yīng)用各種軟件開發(fā)領(lǐng)域?;诿嫦?qū)ο蟮脑O(shè)計,屏蔽了諸如C,C++等語言的一些復(fù)雜性,提供了垃圾回收機制,平臺無關(guān)的虛擬機技術(shù),Java創(chuàng)造了一種前所未有的開發(fā)方式。另一方面,得益于Java提出的“一次編碼,到處運行”的口號,讓Java更加出名。但是Java中的異常也是處處發(fā)生,下面我就列出了我認(rèn)為的Java開發(fā)最容易出現(xiàn)的5個錯誤。

創(chuàng)新互聯(lián)主營朝陽網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,app軟件定制開發(fā),朝陽h5微信小程序開發(fā)搭建,朝陽網(wǎng)站營銷推廣歡迎朝陽等地區(qū)企業(yè)咨詢

1、重復(fù)造輪子
一個明顯的錯誤就是Java程序員習(xí)慣性的忽略已經(jīng)存在的大量的庫。在你決定造一個輪子之間,我建議你試著先搜一下是否有已經(jīng)存在庫。例如日志方面,有l(wèi)ogback,新log4j,網(wǎng)絡(luò)方面,有Netty或者Akka。有一些庫,已經(jīng)逐步變成了標(biāo)準(zhǔn),比如Java8中加入的Joda-Time。
下面講述的是我上一個項目中的個人經(jīng)歷。有一部分用于HTML轉(zhuǎn)義的代碼是一個開發(fā)自己完成的。這個代碼正常工作了多年,但是又一次遇到了一個用戶輸入,代碼陷入了死循環(huán)。這個用戶發(fā)現(xiàn)應(yīng)用沒有反應(yīng),又重新輸入了一遍,服務(wù)器因為這個死循環(huán)掛了。如果這個開發(fā)使用已有的HTML轉(zhuǎn)義工具,比如Google Guava項目提供的HtmlEscaper,這個嚴(yán)重的問題可能就不會出現(xiàn)。并且現(xiàn)在市面上流行的大部分的開源庫,背后都有團(tuán)隊和社區(qū)在支持,類似這樣的錯誤,都能夠及時的被修復(fù)。
2、在Switch-Case中錯誤的使用break
這是一個很尷尬的問題,但是仍然在實際開發(fā)中經(jīng)常出現(xiàn)。瀑布特性在switch語句中有時會非常有用,但是必要的break關(guān)鍵字的缺失,有時會帶來災(zāi)難性的后果。比如在下面的代碼中,如果在case 0中忘記放一個break關(guān)鍵字,代碼會繼續(xù)向下執(zhí)行,就會在Zero之后再輸出一個One:
public static void switchCasePrimer() {
int caseIndex = 0;
switch (caseIndex) {
case 0:
System.out.println("Zero");
case 1:
System.out.println("One");
break;
case 2:
System.out.println("Two");
break;
default:
System.out.println("Default");
}
}

最好的解決辦法是使用多態(tài),并把不同的處理代碼放到子類中。當(dāng)然,類似這樣的錯誤,也可以通過類似FindBugs或者PMD這樣的工具檢查出來。
3、忘記釋放資源
一旦打開一個文件,或者建立一個網(wǎng)絡(luò)連接,一個非常重要的習(xí)慣是記得關(guān)閉資源。并且一定記得,如果在使用類似這樣的資源過程中出現(xiàn)了錯誤,在異常處理中,也需要做對應(yīng)的關(guān)閉操作。可能有人會說,F(xiàn)ileInputStream對象在GC的時候,Java終結(jié)器(finalizer)會自動調(diào)用其close()方法,但是我們知道,我們無法預(yù)知GC在什么時候開始,所以我們無法預(yù)知在執(zhí)行GC之前,會有多少資源無法及時關(guān)閉。為了避免這種情況,Java7推出的try-with-resources語法,是值得每個開發(fā)使用的。
private static void printFileJava7() throws IOException {
try(FileInputStream input = new FileInputStream("file.txt")) {
int data = input.read();
while(data != -1){
System.out.print((char) data);
data = input.read();
}
}
}

try-with-resources語法適用于所有實現(xiàn)了AutoClosable接口的類。它能保證每一個資源及時的關(guān)閉。
4、內(nèi)存泄露
Java使用自動內(nèi)存管理,所以大部分時間,我們都不會去關(guān)心內(nèi)存的分配和釋放,但是,這并不意味著Java開發(fā)人員需要忽略內(nèi)存。在Java應(yīng)用中,內(nèi)存的問題也經(jīng)常出現(xiàn)。我們知道,對象如果沒有被引用了,這個對象就會被釋放,但是并不意味著,就不會出現(xiàn)內(nèi)存泄露的問題。在Java中,造成內(nèi)存泄露的原因有很多,但最容易出現(xiàn)的情況就是對象引用無法釋放,因為GC在回收堆內(nèi)存的時候,如果一個對象仍然被其他對象引用,這個對象空間是不會被回收的,舉個例子,如果在類中,有一個靜態(tài)字段引用到一個集合,假如我們沒有手動的在使用完成這個集合之后,將他設(shè)置為null,那么這個集合及這個集合中的對象,是永遠(yuǎn)不會被回收的,因為類靜態(tài)字段是不會被GC的。
比如還有一種造成內(nèi)存泄露的原因,就是一組對象互相引用對方,就是我們經(jīng)常說的循環(huán)引用,因為循環(huán)引用,所以GC不能確定這些互相引用的對象是否還有繼續(xù)存活的必要。還有一種情況,就是使用JNI時的非堆內(nèi)存泄露。
一個典型的內(nèi)存泄露例子:
final ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(1);final Deque numbers = new LinkedBlockingDeque<>();final BigDecimal divisor = new BigDecimal(51);

scheduledExecutorService.scheduleAtFixedRate(() -> {
BigDecimal number = numbers.peekLast();
if (number != null && number.remainder(divisor).byteValue() == 0) {
System.out.println("Number: " + number);
System.out.println("Deque size: " + numbers.size());
}
}, 10, 10, TimeUnit.MILLISECONDS);

scheduledExecutorService.scheduleAtFixedRate(() -> {
    numbers.add(new BigDecimal(System.currentTimeMillis()));
}, 10, 10, TimeUnit.MILLISECONDS);

try {
scheduledExecutorService.awaitTermination(1, TimeUnit.DAYS);
} catch (InterruptedException e) {
e.printStackTrace();
}

在上面的例子中,我們創(chuàng)建了兩個定時任務(wù)。第一個定時任務(wù),從deque中獲取了最后的一個數(shù)字”numbers”并判斷,如果這個數(shù)字能被51整除,則打印該數(shù)字和deque的大小。第二個定時任務(wù),不斷的向deque中添加數(shù)據(jù)。兩個任務(wù)都間隔10ms執(zhí)行。如果這個代碼執(zhí)行,你會發(fā)現(xiàn),deque的大小會持續(xù)的增加,直到deque中的數(shù)據(jù)占滿整個堆空間。為了阻止這種情況的發(fā)生,我們可以使用pollLast方法來代替peekLast方法,因為pollLast方法會在拿到最后一個元素之后,把這個元素從deque中移除。
5、過度產(chǎn)生垃圾數(shù)據(jù)
過度產(chǎn)生垃圾數(shù)據(jù)的意思,是程序運行中大量產(chǎn)生短聲明周期的對象。這回導(dǎo)致GC頻繁的執(zhí)行,從內(nèi)存中回收空間,GC的執(zhí)行是需要完成堆掃描的,這對系統(tǒng)的性能影響是非常大的。下面是一個小例子:
String oneMillionHello = "";for (int i = 0; i < 1000000; i++) {
oneMillionHello = oneMillionHello + "Hello!";
}
System.out.println(oneMillionHello.substring(0, 6));

在Java中,字符串是不可變的,所以每一次循環(huán)都會創(chuàng)建一個新的字符串對象。為了改進(jìn)這種代碼,我們可以使用StringBuilder來代替:
StringBuilder oneMillionHelloSB = new StringBuilder();
for (int i = 0; i < 1000000; i++) {
oneMillionHelloSB.append("Hello!");
}
System.out.println(oneMillionHelloSB.toString().substring(0, 6));

第二個版本的代碼,在執(zhí)行的時候會提高不少的性能。

以上總結(jié)了5個Java開發(fā)人員最常犯的錯誤,是我基于大量的github上的開源項目,Stack overflow上的問題,還有一些流行的google搜索的分析,希望分享能給你帶來幫助。

創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國云服務(wù)器,動態(tài)BGP最優(yōu)骨干路由自動選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務(wù)部署。公司持有工信部辦法的idc、isp許可證, 機房獨有T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確進(jìn)行流量調(diào)度,確保服務(wù)器高可用性。佳節(jié)活動現(xiàn)已開啟,新人活動云服務(wù)器買多久送多久。

網(wǎng)頁題目:程序員最容易犯的錯,你中了幾個?-創(chuàng)新互聯(lián)
網(wǎng)站網(wǎng)址:http://aaarwkj.com/article32/ppipc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動態(tài)網(wǎng)站、搜索引擎優(yōu)化、網(wǎng)站排名、網(wǎng)站建設(shè)品牌網(wǎng)站制作、網(wǎng)站收錄

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)
国产传媒免费在线播放| 蜜臀av成人精品蜜臀av| 中文字幕国产精品欧美| 色哟哟亚洲精品一区二区| 91亚洲精品一区二区三区| 中文字幕韩国三级电影| 成人黄色动作片在线观看| av全欧国男人在线天堂| 丰满人妻被黑人猛烈进入| 亚洲精品一区二区三区网站| 日本高清不卡免费在线观看视频一二三区| 亚洲伊人av第一页在线观看| 国产91高清视频在线观看| 萌白的所有视频在线观看| 亚洲国产欧美在线91| 国产一区二区精品不卡| 亚洲男女内射在线视频| 日韩一区二区三区成人| 日韩在线观看视频有码| 欧美av在线免费观看| 中文字幕人妻久久精品一区| 国产免费av剧情演绎| 人人狠狠综合久久亚洲| 日本福利写真在线观看| 国产精品粉嫩在线播放| 欧美午夜福利在线视频| 亚洲av成人在线一区二区| 日本一区欧美二区精品| 中文字幕日本人妻少妇| 深夜十八禁在线免费观看| 免费日韩黄片在线观看| 快播av手机在线播放| 免费特黄特黄的欧美大片| 最新国产激情福利网站| 国产龙熟女高潮一区二区| 亚洲国产精品久久久精品| 未满十八禁止在线播放| 黄色片黄色片美女黄色片亚洲黄色片 | 国产精品一区二区在线观看| 日韩高清一级黄色大片网站| 五月婷婷六月丁香伊人网|