中文字幕一区二区人妻电影,亚洲av无码一区二区乱子伦as ,亚洲精品无码永久在线观看,亚洲成aⅴ人片久青草影院按摩,亚洲黑人巨大videos

適用于初學(xué)者的Java指針

發(fā)布于:2021-01-14 10:05:32

0

201

0

Java 初學(xué)者 指南

編程時(shí)曾經(jīng)感到迷路嗎?不要擔(dān)心!今天,我在這里向您展示Java沒(méi)什么可擔(dān)心的。

我們都是從初學(xué)者開始的。今天,我將解釋Java的基礎(chǔ)知識(shí),從生態(tài)系統(tǒng)到其執(zhí)行等等。我們將花一些時(shí)間探索Hello,World和命令行,最后,我們將深入探討Java初學(xué)者的一些常見錯(cuò)誤以及如何編寫出這些漏洞的代碼。讓我們開始吧!

Java主要基礎(chǔ)架構(gòu)組件

Java開發(fā)工具包(JDK)包含以下組件:Java運(yùn)行時(shí)環(huán)境,工具和工具API和Java語(yǔ)言。Java運(yùn)行時(shí)環(huán)境本身包括Java虛擬機(jī),lang和util基本庫(kù),其他基本庫(kù)。此外,我們還有集成庫(kù),用戶界面工具包和部署。沒(méi)有部署的所有這些都代表Java SE API。

HotSpot JVM的體系結(jié)構(gòu)由類加載器子系統(tǒng),運(yùn)行時(shí)數(shù)據(jù)區(qū)和執(zhí)行引擎表示。我們也有本機(jī)方法庫(kù)。

Java程序流程的執(zhí)行

計(jì)算機(jī)如何準(zhǔn)確地理解代碼?這是相當(dāng)標(biāo)準(zhǔn)的操作順序。

  1. 命令行參數(shù)被解析

  2. 分配了所需的內(nèi)存

  3. 環(huán)境變量已加載

  4. 找到具有要執(zhí)行的main方法的類

  5. 虛擬機(jī)的創(chuàng)建和初始化

  6. 帶有main方法的類已加載

  7. 主方法執(zhí)行

  8. 執(zhí)行完成后,返回結(jié)果

  9. 虛擬機(jī)被破壞

Hello World示例

首先,您需要在名為PatsovHelloWorldExample.java的文件中添加以下文本:

public class PatsovHelloWorldExample {    public static void main( String[] args ) {       System. out .println( "Hello World!" );    } }

根據(jù)您的喜好,您可以選擇使用IDE或文本編輯器。如果您使用過(guò)IDE,那么下一步就是運(yùn)行程序。如果使用文本編輯器創(chuàng)建了文件,則需要在終端中使用“ javac PatsovHelloWorldExample.java”編譯文件,并在終端中再次使用“ java PatsovHelloWorldExample”運(yùn)行。在圖2中,我們可以看到預(yù)期的結(jié)果。

{xunruicms_img_title}

命令行選項(xiàng)

啟動(dòng)JVM時(shí),我們可以傳遞一些其他參數(shù)來(lái)控制

應(yīng)用程序的執(zhí)行和一些環(huán)境變量。語(yǔ)法如下:“ java [這里我們添加一些選項(xiàng)] -jar filToBeExecuted.jar [這里我們將一些參數(shù)傳遞給我們的應(yīng)用程序]

“ java [這里我們添加一些選項(xiàng)] -jar filToBeExecuted.jar [這里我們將一些參數(shù)傳遞給我們的應(yīng)用程序]

一個(gè)帶有真實(shí)參數(shù)的實(shí)際示例是:“ java -classpath MyApplication.jar the.package.ClassWithMainMethod”

其中一些選項(xiàng)是“服務(wù)器”,“客戶端”,“類路徑”和“幫助”。在參數(shù)中,我們可以通過(guò)所需的任何內(nèi)容,具體取決于我們?nèi)绾伍_發(fā)應(yīng)用程序以及要實(shí)現(xiàn)的目標(biāo)。

原始類型

這里,我們有一個(gè)字節(jié),由8位整數(shù)表示,值在[-128,127]之間,還有short數(shù)據(jù)類型,具有16位整數(shù),值分別在[-32 768,32 767]之間。我們有一個(gè)int數(shù)據(jù)類型,它是一個(gè)32位整數(shù),其值在[-2 31,2 31 -1]之間,而long是一個(gè)64位整數(shù),以及浮點(diǎn)數(shù)float和double,其中float是一個(gè)精度為32位IEEE 754浮點(diǎn)數(shù),而double則為雙精度64位IEEE 754浮點(diǎn)數(shù)。我們還有一個(gè)布爾值,它是true或false,而char是一個(gè)16位Unicode字符。

對(duì)于貨幣,您將需要使用java.math.BigDecimal類,對(duì)于真正的大整數(shù),您將需要java.math.BigInteger類。

集合

實(shí)際上,所有集合都代表一個(gè)容器,該容器將一些邏輯連接的組件分組為一個(gè)整體。它們通常分為3種類型:用于通用目的(例如ArrayList,LinkedList,TreeMap,TreeSet,HashMap和HashSet),并發(fā)的(例如ConcurrentMap,ArrayBlockingQueue,Vector,LinkedBlockingQueue和PriorityBlockingQueue)和專用的(如EnumSet,CopyOnWriteArraySet和WeakHashMap)。

該系列最適合:

  • 排序

  • 正在搜尋

  • 改組

  • 操作–反向,填充,復(fù)制,交換,批量添加

  • 查找最大值/最小值

常用表達(dá)

為了獲得最佳學(xué)習(xí)效果,建議解決RegEx填字游戲。一些最著名的模式匹配表達(dá)式是:

  • ^ –用于匹配行首,

  • $ –用于匹配行尾,

  • 。–用于匹配除換行以外的任何字符

  • [somecharactershere] –用于指定一組字符,從中只能匹配一個(gè)字符,

  • [^ asd] –用于匹配未列出的任何字符(排除),

  • * –用于匹配之前出現(xiàn)的0個(gè)或多個(gè)表達(dá)式(例如asd *與'as'和'asd'匹配),

  • + –匹配之前出現(xiàn)的1個(gè)或多個(gè)表達(dá)式,

  • ?–匹配之前出現(xiàn)0或1個(gè)表達(dá)式

常見問(wèn)題以及如何避免

問(wèn)題:空指針異常–當(dāng)我們實(shí)際上需要對(duì)象時(shí)嘗試使用null時(shí),會(huì)發(fā)生這種異常

解決方案:如果某個(gè)時(shí)候您的對(duì)象可能變?yōu)閚ull,則應(yīng)考慮在代碼中添加null檢查,尤其是當(dāng)您自己沒(méi)有創(chuàng)建對(duì)象時(shí)。同樣,最好返回空集合而不是null。添加驗(yàn)證以設(shè)置和獲取方法也是一個(gè)好主意。

問(wèn)題:將比較運(yùn)算符(==)與賦值運(yùn)算符(=)混淆。

解決方案:如果您來(lái)自另一種語(yǔ)言,則需要一些時(shí)間來(lái)適應(yīng)。我用來(lái)記住這一點(diǎn)的一個(gè)簡(jiǎn)單技巧是:如果您知道只對(duì)一個(gè)值感興趣(將一個(gè)值分配給另一個(gè)值),則使用單個(gè)“ =”,否則,如果您關(guān)心兩個(gè)變量和值(正在比較它們),您需要使用雙“ ==”

問(wèn)題:使用比較運(yùn)算符(==)代替.equals()來(lái)檢查相等的字符串。

解決方案:不會(huì)使用比較運(yùn)算符(==)檢查所有Java對(duì)象是否相等。相反,我們使用.equals()方法。在Java中,String是不可變的對(duì)象,而不是原始類型。

問(wèn)題:無(wú)法正確使用訪問(wèn)修飾符(私有,受保護(hù),公共和默認(rèn))

解決方案:嘗試以更面向?qū)ο蟮姆绞竭M(jìn)行思考。在實(shí)施之前要多想一點(diǎn)?!拔覒?yīng)該能夠從課堂之外調(diào)用該方法嗎?我有權(quán)這樣做嗎?” 了解有關(guān)信息隱藏,松散耦合和創(chuàng)建應(yīng)用程序?qū)拥母嘈畔ⅰ?/span>

問(wèn)題:通過(guò)實(shí)現(xiàn)現(xiàn)有的庫(kù)和工具來(lái)嘗試徹底改變方向。

解決方案:了解Java標(biāo)準(zhǔn)庫(kù)。與其他程序員進(jìn)行更多配對(duì)編程。閱讀本文,其中包含所有推薦的Java工具。嘗試自己找到工具。了解如何使用Google和Stack Overflow。

問(wèn)題:通過(guò)對(duì)對(duì)象的引用來(lái)更改對(duì)象的狀態(tài)。當(dāng)get方法返回可變對(duì)象時(shí),通常會(huì)發(fā)生這種情況。這是非常不安全的!

解決方案:學(xué)習(xí)正確使用訪問(wèn)修飾符。在get方法中返回不可變的對(duì)象。創(chuàng)建get方法時(shí),請(qǐng)始終考慮是否有可能實(shí)現(xiàn)該對(duì)象,并在返回對(duì)象后對(duì)其狀態(tài)進(jìn)行不希望的更改。了解有關(guān)如何在Java內(nèi)存中定位和引用對(duì)象的信息。不要對(duì)通過(guò)值傳遞和通過(guò)引用傳遞感到困惑!

問(wèn)題:語(yǔ)法錯(cuò)誤,拼寫錯(cuò)誤,使用錯(cuò)誤的重載函數(shù),花費(fèi)太多時(shí)間單擊IDE中的菜單以實(shí)現(xiàn)所需的功能。

解決方案:獲得一個(gè)不錯(cuò)的IDE。語(yǔ)法錯(cuò)誤將在較早時(shí)檢測(cè)出來(lái),您將能夠修復(fù)它們。了解IDE的功能。了解最常見的快捷方式,以便在開發(fā)時(shí)節(jié)省時(shí)間。正確設(shè)置代碼格式。請(qǐng)勿經(jīng)常更改IDE,或者如果可以的話,請(qǐng)不要更改。認(rèn)真學(xué)習(xí)。這將成為您最好的自我延伸。使用有意義的變量名。

問(wèn)題:資源沒(méi)有被釋放。您打開一些連接/文件/資源,然后不關(guān)閉它。

解決方案:這是實(shí)現(xiàn)java.lang.Autocloseable接口的任何類的“ Try-with-resources”語(yǔ)句。在執(zhí)行try塊之后,將自動(dòng)關(guān)閉try()部分中所有打開的資源。下面的例子:

public class TryWithResources {    public static void main(String[] args) {       try (BufferedReader br =          new BufferedReader(             new FileReader(                System. getProperty ( "user.home" ) +                   "/Downloads/text.txt" ))) {          System. out .println(br.readLine());       } catch (IOException e) {          e.printStackTrace();       }    } }

問(wèn)題:將字符串串聯(lián)在一起。不要在家嘗試這個(gè)。僅在家長(zhǎng)咨詢下允許。在每個(gè)字符串連接上,都會(huì)創(chuàng)建一個(gè)新的String對(duì)象(字符串是不可變的)。在某些時(shí)候,您將耗盡內(nèi)存,或者開始執(zhí)行會(huì)花費(fèi)太多時(shí)間。

解決方案:在循環(huán)中串聯(lián)內(nèi)容時(shí),請(qǐng)使用StringBuilder而不是String。

問(wèn)題:循環(huán)執(zhí)行SQL查詢。

解決方案:盡可能優(yōu)化對(duì)數(shù)據(jù)庫(kù)的查詢,因?yàn)閳?zhí)行查詢是一項(xiàng)非常昂貴的操作。嘗試通過(guò)單個(gè)查詢獲取所有必要的信息,然后遍歷結(jié)果。

問(wèn)題:空的catch塊/忽略異常

解決方案:至少可以做的是將異常的堆棧跟蹤信息打印到默認(rèn)輸出。通常,您可以將某些記錄器用作Log4j,并使信息記錄更加容易。

問(wèn)題:調(diào)用run()而不是start()來(lái)啟動(dòng)線程。

解決方案:直接調(diào)用run()是錯(cuò)誤的。這是一個(gè)非常常見的錯(cuò)誤。始終使用start()!另外,建議實(shí)現(xiàn)Runnable接口,而不要繼承Thread類。

問(wèn)題:實(shí)施時(shí)考慮不足。一些結(jié)果可能是:死鎖,從靜態(tài)上下文中調(diào)用非靜態(tài)方法,在迭代集合和所有邏輯錯(cuò)誤時(shí)以不正確的方式刪除項(xiàng)目。

解決方案:思考。設(shè)計(jì)。觀察一下。如果您有一個(gè)小時(shí)來(lái)解決問(wèn)題,請(qǐng)花50分鐘考慮解決方案,并花10分鐘進(jìn)行實(shí)際執(zhí)行。