自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

學(xué)習(xí) Java 中最困難的部分以及如何克服它們

開(kāi)發(fā) 前端
對(duì)于大多數(shù)初學(xué)者來(lái)說(shuō),充分學(xué)習(xí) Java 的基礎(chǔ)知識(shí)都會(huì)碰到各種挑戰(zhàn)。

今天,我們將看看 Java 編程基礎(chǔ)中一些最難的領(lǐng)域,試圖了解為什么很多人覺(jué)得它們很困難,以及是否有什么需要你做的。

1. 泛型

Java 中的泛型是具有參數(shù)的類(lèi)型。創(chuàng)建泛型類(lèi)型時(shí),你不僅要指定類(lèi)型,還要指定它將使用的數(shù)據(jù)類(lèi)型。 Java學(xué)習(xí)者經(jīng)常提到泛型是Java最難理解的部分之一,當(dāng)你有帶參數(shù)的方法要遵循時(shí),這會(huì)容易得多,但當(dāng)你必須編寫(xiě)自己的方法時(shí)會(huì)感到困惑。

提示和建議

Java 泛型做了 C++ 模板不做的一件事——實(shí)現(xiàn)類(lèi)型安全。C++ 模板的實(shí)現(xiàn)是一個(gè)簡(jiǎn)單的預(yù)處理器技巧,并不能確保類(lèi)型安全。Java 中的泛型類(lèi)似于 C++ 模板,但具有額外的類(lèi)型安全性。類(lèi)型安全是任何良好開(kāi)發(fā)環(huán)境的基本特征。

2. 多線(xiàn)程

Java中的多線(xiàn)程是同時(shí)執(zhí)行兩個(gè)或多個(gè)線(xiàn)程以實(shí)現(xiàn)應(yīng)用程序最大利用CPU的過(guò)程。多線(xiàn)程解決了非常重要的任務(wù),可以讓我們的程序更快,通??旌芏啾?。但它被認(rèn)為是許多新的 Java 學(xué)習(xí)者往往會(huì)陷入困境的主題之一。這一切都是因?yàn)槎嗑€(xiàn)程也會(huì)產(chǎn)生問(wèn)題而不是解決問(wèn)題。多線(xiàn)程會(huì)產(chǎn)生兩個(gè)特定的問(wèn)題:死鎖和競(jìng)爭(zhēng)條件。死鎖是指多個(gè)線(xiàn)程都在等待彼此占有的資源,并且沒(méi)有一個(gè)可以繼續(xù)運(yùn)行的情況。競(jìng)爭(zhēng)條件是多線(xiàn)程系統(tǒng)或應(yīng)用程序中的設(shè)計(jì)錯(cuò)誤,其中系統(tǒng)或應(yīng)用程序的操作取決于部分代碼的執(zhí)行順序。

提示和建議

有一個(gè)簡(jiǎn)單的技巧,那就是使用精心設(shè)計(jì)的消息隊(duì)列(不要自己滾動(dòng))在線(xiàn)程之間傳遞數(shù)據(jù)。困難的部分是嘗試讓多個(gè)線(xiàn)程以某種方式神奇地更新共享對(duì)象。那是它容易出錯(cuò)的時(shí)候,因?yàn)槿藗儾蛔⒁獯嬖诘母?jìng)爭(zhēng)條件。許多人不使用消息隊(duì)列,而是嘗試更新共享對(duì)象并為自己制造問(wèn)題。變得困難的是設(shè)計(jì)一種在多個(gè)隊(duì)列之間傳遞數(shù)據(jù)時(shí)運(yùn)行良好的算法。這很難。但是共存線(xiàn)程的機(jī)制(通過(guò)共享隊(duì)列)很簡(jiǎn)單。”

3. 類(lèi)路徑問(wèn)題

類(lèi)路徑錯(cuò)誤也被認(rèn)為是 Java 開(kāi)發(fā)人員在日常工作中面臨的最受抱怨的問(wèn)題之一。 “類(lèi)路徑問(wèn)題的調(diào)試可能很耗時(shí),并且往往發(fā)生在最糟糕的時(shí)間和地點(diǎn):在發(fā)布之前,并且通常在開(kāi)發(fā)團(tuán)隊(duì)幾乎沒(méi)有訪(fǎng)問(wèn)權(quán)限的環(huán)境中。它們也可能發(fā)生在 IDE 級(jí)別,并成為降低生產(chǎn)力的根源。

提示和建議

“類(lèi)路徑問(wèn)題并不像最初看起來(lái)那樣低級(jí)或難以解決。這完全是關(guān)于某些目錄中存在/不存在的 zip 文件(jar)、如何找到這些目錄以及如何在訪(fǎng)問(wèn)受限的環(huán)境中調(diào)試類(lèi)路徑。通過(guò)了解一些有限的概念,例如類(lèi)加載器、類(lèi)加載器鏈和父優(yōu)先/父后模式,可以有效地解決這些問(wèn)題,”專(zhuān)家解釋說(shuō)。

4. 多態(tài)性和正確使用

談到 OOP 的原理,很多人說(shuō)他們很難理解多態(tài)性。多態(tài)性是程序以相同方式處理具有相同接口的對(duì)象的能力,而無(wú)需有關(guān)對(duì)象特定類(lèi)型的信息。盡管多態(tài)是一個(gè)相當(dāng)基本的主題,但它相當(dāng)廣泛,并且構(gòu)成了 Java 基礎(chǔ)的很大一部分。對(duì)于許多學(xué)生來(lái)說(shuō),多態(tài)是學(xué)習(xí) Java 的第一個(gè)難點(diǎn)。這一切都是因?yàn)樵诓煌纳舷挛闹惺褂昧瞬煌问降亩鄳B(tài)性,這可能會(huì)造成混淆。

提示和建議

除了學(xué)習(xí)它之外,沒(méi)有其他方法可以處理多態(tài)性?!昂?jiǎn)單的重載:+ 可以表示整數(shù)加法、浮點(diǎn)加法和(在某些語(yǔ)言中)字符串連接。子類(lèi)型多態(tài)性:如果 B 是(繼承自)A 的子類(lèi)型,則 B 類(lèi)型的任何值都可以在需要 A 類(lèi)型值的上下文中使用。參數(shù)多態(tài)性:可以使用類(lèi)型參數(shù)對(duì)類(lèi)型進(jìn)行參數(shù)化,這樣你就可以在不同的上下文可以提供不同的類(lèi)型參數(shù),因此你將參數(shù)化類(lèi)型實(shí)例化為不同的具體類(lèi)型。這也稱(chēng)為“模板”或“泛型”,在 OO 語(yǔ)言中通常使用尖括號(hào)(例如 T)指定。接口多態(tài)。這基本上是一種機(jī)制,你將子類(lèi)型多態(tài)性限制為實(shí)現(xiàn)某個(gè)接口的子類(lèi)型或?qū)?shù)多態(tài)性限制為實(shí)現(xiàn)某個(gè)接口的類(lèi)型參數(shù)?!?/p>

5. 反射

反射是一種在程序運(yùn)行時(shí)探索有關(guān)程序數(shù)據(jù)的機(jī)制。反射使你可以探索有關(guān)字段、方法和類(lèi)構(gòu)造函數(shù)的信息。它還允許你使用在編譯時(shí)不存在但在運(yùn)行時(shí)可用的類(lèi)型。反射和用于發(fā)布錯(cuò)誤信息的邏輯一致模型使得創(chuàng)建正確的動(dòng)態(tài)代碼成為可能。但是對(duì)于很多人來(lái)說(shuō),要弄清楚如何使用反射并不那么容易。

提示和建議

“在反射和 Java 的情況下,反射允許設(shè)計(jì)為靜態(tài)類(lèi)型的 Java 進(jìn)行動(dòng)態(tài)類(lèi)型。動(dòng)態(tài)類(lèi)型本質(zhì)上并不是邪惡的。它允許程序員打破某些 OOP 原則,但同時(shí)它允許許多強(qiáng)大的功能,如運(yùn)行時(shí)代理和依賴(lài)注入。Java 讓你可以使用反射擊中自己的腳。但是,你必須非常明確地將槍對(duì)準(zhǔn)你的腳,取下保險(xiǎn)裝置并扣動(dòng)扳機(jī)?!?/p>

6. 輸入/輸出流

流允許你使用任何數(shù)據(jù)源:Internet、計(jì)算機(jī)的文件系統(tǒng)或其他東西。流是一種通用工具。它們?cè)试S程序從任何地方接收數(shù)據(jù)(輸入流)并將其發(fā)送到任何地方(輸出流)。他們的任務(wù)是相同的:從一個(gè)地方獲取數(shù)據(jù)并將其發(fā)送到另一個(gè)地方。流有兩種類(lèi)型:輸入流(用于接收數(shù)據(jù))和輸出流(用于發(fā)送數(shù)據(jù))。使許多人難以理解使用流的原因是 Java 有多個(gè) I/O 流類(lèi)。

提示和建議

“Java 有這么多 I/O 流類(lèi),主要是由于兩個(gè)促成因素。首先是遺產(chǎn),由于歷史原因,一些類(lèi)仍然存在,并且由于它們不被認(rèn)為是有害的,因此它們沒(méi)有被棄用。第二,靈活性。不同的應(yīng)用程序有不同的要求,因此,你有多種選擇,具體取決于你的要求。有用的抽象在你閱讀時(shí)會(huì)帶來(lái)清晰性,并且只需幾行代碼,你就可以做很多事情?!?/p>


責(zé)任編輯:華軒 來(lái)源: 今日頭條
相關(guān)推薦

2021-04-16 14:05:32

云計(jì)算

2020-09-01 15:57:12

云安全云遷移云計(jì)算

2020-07-17 15:57:24

物聯(lián)網(wǎng)IoT網(wǎng)絡(luò)

2020-11-30 15:11:51

大數(shù)據(jù)

2020-03-09 22:21:15

物聯(lián)網(wǎng)技術(shù)操作系統(tǒng)

2013-12-20 09:30:20

桌面云云計(jì)算技術(shù)桌面云挑戰(zhàn)

2020-04-07 09:59:40

人工智能AI機(jī)器學(xué)習(xí)

2014-02-18 09:33:56

微軟納德拉

2020-10-23 10:18:25

遠(yuǎn)程工作

2024-12-26 07:41:47

Java類(lèi)型ArrayList

2020-04-26 09:32:13

物聯(lián)網(wǎng)安全技術(shù)

2020-08-16 08:39:38

數(shù)據(jù)科學(xué)數(shù)據(jù)數(shù)據(jù)集

2022-09-14 11:15:33

多云混合云云數(shù)據(jù)庫(kù)

2011-01-19 13:46:17

Scala

2023-05-05 14:45:05

2018-03-09 09:53:37

國(guó)產(chǎn)內(nèi)存紫光半導(dǎo)體

2022-03-07 10:23:01

IT服務(wù)ITSMIT服務(wù)管理

2020-12-03 09:59:43

5G

2018-10-21 15:29:37

2020-03-18 09:03:47

物聯(lián)網(wǎng)安全黑客
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)