對(duì)于剛剛步入Java領(lǐng)域的新童鞋,無(wú)論是剛剛畢業(yè)的大學(xué)生,還是想要專(zhuān)行的在職人員,想要學(xué)好Java都有很多的困惑。
? 怎樣學(xué)習(xí)Java語(yǔ)言?
? 在Java學(xué)習(xí)過(guò)程中需要掌握哪些技能?
? Java工程師的職業(yè)發(fā)展規(guī)劃是什么?

一、 想要學(xué)好Java,首要的事要了解Java語(yǔ)言的編程特點(diǎn)。
1. 首先了解Java語(yǔ)言是簡(jiǎn)單的
Java的語(yǔ)言語(yǔ)法與C語(yǔ)言和C++語(yǔ)言很接近,使得Java很容易學(xué)習(xí)和使用。另外,Java丟棄了C++中很難理解的特性。而且,Java語(yǔ)言不使用指針,并提供了自動(dòng)的廢料收集,使得程序猿不用為內(nèi)存管理而擔(dān)憂(yōu)。
2. Java語(yǔ)言是面向?qū)ο蟮?/p>
Java語(yǔ)言提供類(lèi)、接口和繼承等原語(yǔ),為了簡(jiǎn)單起見(jiàn),只支持類(lèi)之間的單繼承,但支持接口之間的多繼承,并支持類(lèi)與接口之間的實(shí)現(xiàn)機(jī)制(關(guān)鍵字為 implements)。
Java語(yǔ)言全面支持動(dòng)態(tài)綁定,而C++語(yǔ)言只對(duì)虛函數(shù)使用動(dòng)態(tài)綁定??傊?,Java語(yǔ)言是一個(gè)純的面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言。
3. Java語(yǔ)言是分布式的
Java語(yǔ)言支持Internet應(yīng)用的開(kāi)發(fā),在基本的Java應(yīng)用編程接口中有一個(gè)網(wǎng)絡(luò)應(yīng)用編程接口(java net),它提供了用于網(wǎng)絡(luò)應(yīng)用編程的類(lèi)庫(kù),包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(遠(yuǎn)程方法激活)機(jī)制也是開(kāi)發(fā)分布式應(yīng)用的重要手段。
4. Java語(yǔ)言是健壯的
Java的強(qiáng)類(lèi)型機(jī)制、異常處理、廢料的自動(dòng)收集等是Java程序健壯性的重要保證。對(duì)指針的丟棄是Java的明智選擇。Java的安全檢查機(jī)制使得Java更具健壯性。
5. Java語(yǔ)言是安全的
Java通常被用在網(wǎng)絡(luò)環(huán)境中,為此,Java提供了一個(gè)安全機(jī)制以防惡意代碼的攻擊。java培訓(xùn)講師表示,除了Java語(yǔ)言具有的許多安全特性以外,Java對(duì)通過(guò)網(wǎng)絡(luò)下載的類(lèi)具有一個(gè)安全防范機(jī)制(類(lèi)ClassLoader),如分配不同的名字空間以防替代本地的同名類(lèi)、字節(jié)代碼檢查,并提供安全管理機(jī)制(類(lèi)SecurityManager)讓Java應(yīng)用設(shè)置安全哨兵。
6. Java語(yǔ)言是體系結(jié)構(gòu)中立的
Java程序(后綴為java的文件)在Java平臺(tái)上被編譯為體系結(jié)構(gòu)中立的字節(jié)碼格式(后綴為class的文件), 然后可以在實(shí)現(xiàn)這個(gè)Java平臺(tái)的任何系統(tǒng)中運(yùn)行。這種途徑適合于異構(gòu)的網(wǎng)絡(luò)環(huán)境和軟件的分發(fā)。
7. Java語(yǔ)言是可移植的
這種可移植性來(lái)源于體系結(jié)構(gòu)中立性,另外,Java還嚴(yán)格規(guī)定了各個(gè)基本數(shù)據(jù)類(lèi)型的長(zhǎng)度。Java系統(tǒng)本身也具有很強(qiáng)的可移植性,Java編譯器是用Java實(shí)現(xiàn)的,Java的運(yùn)行環(huán)境是用ANSI C實(shí)現(xiàn)的。
8. Java語(yǔ)言是解釋型的
如前所述,Java程序在Java平臺(tái)上被編譯為字節(jié)碼格式, 然后可以在實(shí)現(xiàn)這個(gè)Java平臺(tái)的任何系統(tǒng)中運(yùn)行。在運(yùn)行時(shí),Java平臺(tái)中的Java解釋器對(duì)這些字節(jié)碼進(jìn)行解釋執(zhí)行,執(zhí)行過(guò)程中需要的類(lèi)在聯(lián)接階段被載入到運(yùn)行環(huán)境中。
9. Java是高性能的
與那些解釋型的高級(jí)腳本語(yǔ)言相比,Java的確是高性能的。事實(shí)上,Java的運(yùn)行速度隨著JIT(Just-In-Time)編譯器技術(shù)的發(fā)展越來(lái)越接近于C++。
10. Java語(yǔ)言是多線(xiàn)程的
在Java語(yǔ)言中,線(xiàn)程是一種特殊的對(duì)象,它必須由Thread類(lèi)或其子(孫)類(lèi)來(lái)創(chuàng)建。通常有兩種方法來(lái)創(chuàng)建線(xiàn)程:
其一,使用型構(gòu)為T(mén)hread(Runnable) 的構(gòu)造子將一個(gè)實(shí)現(xiàn)了Runnable接口的對(duì)象包裝成一個(gè)線(xiàn)程;
其二,從Thread類(lèi)派生出子類(lèi)并重寫(xiě)run方法,使用該子類(lèi)創(chuàng)建的對(duì)象即為線(xiàn)程。值得注意的是Thread類(lèi)已經(jīng)實(shí)現(xiàn)了Runnable接口,因此,任何一個(gè)線(xiàn)程均有它的run方法,而run方法中包含了線(xiàn)程所要運(yùn)行的代碼。
線(xiàn)程的活動(dòng)由一組方法來(lái)控制。 Java語(yǔ)言支持多個(gè)線(xiàn)程的同時(shí)執(zhí)行,并提供多線(xiàn)程之間的同步機(jī)制(關(guān)鍵字為synchronized)。
11. Java語(yǔ)言是動(dòng)態(tài)的
Java語(yǔ)言的設(shè)計(jì)目標(biāo)之一是適應(yīng)于動(dòng)態(tài)變化的環(huán)境。Java程序需要的類(lèi)能動(dòng)態(tài)地被載入到運(yùn)行環(huán)境,也可以通過(guò)網(wǎng)絡(luò)來(lái)載入所需要的類(lèi)。這也有利于軟件的升級(jí)。另外,Java中的類(lèi)有一個(gè)運(yùn)行時(shí)刻的表示,能進(jìn)行運(yùn)行時(shí)刻的類(lèi)型檢查。

二、 Java 完善的生態(tài)系統(tǒng):
Java 擁有數(shù)量眾多的第三方類(lèi)庫(kù),作為一個(gè)開(kāi)發(fā)者,你會(huì)發(fā)現(xiàn)作為一名Java程序員是一件很幸福的事情,因?yàn)楹芏嗍虑閯e人都已經(jīng)幫你做好了,你需要做的只是把別人造好的輪子組裝起來(lái),實(shí)現(xiàn)你的業(yè)務(wù)需求。
Java 擁有非常完善的開(kāi)發(fā)環(huán)境Eclipse,集成了非常多實(shí)用的功能,且操作界面非常友好。
Java 有非常多優(yōu)秀的框架,基于這些框架,可以快速開(kāi)發(fā)出一個(gè)可擴(kuò)展的業(yè)務(wù)系統(tǒng)。
在Java 語(yǔ)言方面,要開(kāi)始學(xué)習(xí)Java 應(yīng)用框架,例如mybatis、Spting,這些框架可以幫助我們更加高效的構(gòu)建Java 工程。在框架學(xué)習(xí)過(guò)程中,我認(rèn)為不僅要學(xué)習(xí)如何基于框架開(kāi)發(fā)系統(tǒng),更要注重框架自身設(shè)計(jì)思想,這對(duì)于開(kāi)發(fā)者提升自己的代碼架構(gòu)能力是非常有幫助的。
在進(jìn)階階段,要注意以下內(nèi)容:
l? 以問(wèn)題為導(dǎo)向: Java 知識(shí)繁雜,以問(wèn)題為導(dǎo)向,作為切入點(diǎn),能夠提高Java 學(xué)習(xí)的效率;
l? 特定場(chǎng)景下的需求解決:每一種架構(gòu)都有典型的應(yīng)用場(chǎng)景,要結(jié)合實(shí)際應(yīng)用場(chǎng)景去分析和解決問(wèn)題;
l? 利用google:作為一名程序員,遇到未知問(wèn)題是很正常的事情,關(guān)鍵利用好google,社區(qū)、論壇;
l? 性能的持續(xù)改進(jìn)和優(yōu)化:在進(jìn)階階段,同學(xué)們應(yīng)該要具備基本的性能調(diào)優(yōu)能力,關(guān)注性能管理;
計(jì)算機(jī)編程是一個(gè)非常注重實(shí)戰(zhàn)的領(lǐng)域,在Java學(xué)習(xí)過(guò)程中,必須要有一個(gè)實(shí)戰(zhàn)項(xiàng)目,來(lái)幫助大家鞏固之前的學(xué)習(xí)成果,這對(duì)于后續(xù)快速上手公司的實(shí)際業(yè)務(wù)有非常大的幫助。
你可以借助一些云平臺(tái),來(lái)熟悉環(huán)境搭建部署的過(guò)程。建議大家學(xué)習(xí)Docker的相關(guān)技術(shù),微服務(wù)是目前系統(tǒng)設(shè)計(jì)中比較流行的架構(gòu),借助Docker快速部署、服務(wù)發(fā)現(xiàn)、服務(wù)編排的特性,可以幫助我們實(shí)現(xiàn)系統(tǒng)的快速發(fā)布和彈性擴(kuò)展。
在實(shí)戰(zhàn)階段,應(yīng)該重點(diǎn)關(guān)注以下幾點(diǎn):
l? 文檔編寫(xiě):編寫(xiě)詳細(xì)設(shè)計(jì)文檔也是程序員必須具備的一項(xiàng)技能,要學(xué)習(xí)設(shè)計(jì)文檔的編寫(xiě)格式,編寫(xiě)規(guī)范。
l? 設(shè)計(jì)模式: 同學(xué)們?cè)趯?shí)戰(zhàn)階段,代碼編寫(xiě)時(shí)要注意設(shè)計(jì)模式,盡可能提高代碼的可讀性、可重復(fù)使用性。
l? 邊界條件的校驗(yàn)和處理:在實(shí)際開(kāi)發(fā)過(guò)程中,系統(tǒng)出現(xiàn)最多的問(wèn)題都集中在邊界條件的校驗(yàn)和處理上,同學(xué)們?cè)趯?shí)際開(kāi)發(fā)過(guò)程中,應(yīng)該要有意識(shí)的考慮這些問(wèn)題。
三、學(xué)習(xí)方向與職業(yè)發(fā)展

(1)先廣后深還是先深后廣
對(duì)于博主而言,其實(shí)接觸的技術(shù)點(diǎn)還算比較多的,但是了解的都不深入,個(gè)人性格而言,比較偏向于實(shí)用驅(qū)動(dòng),如果在實(shí)際使用場(chǎng)景有用到再去深入學(xué)習(xí),這樣邊學(xué)邊用才能比較集中注意力。像一些同事,他們喜歡把一樣?xùn)|西研究得很深。
(2)業(yè)務(wù)經(jīng)驗(yàn)也應(yīng)當(dāng)注重
技術(shù)人員必然是技術(shù)優(yōu)先,但是等你到了一定工作年限,其實(shí)業(yè)務(wù)經(jīng)驗(yàn)也是非常重要了。
相信道理大家都懂,但是平時(shí)有沒(méi)有這樣的意識(shí),有沒(méi)有去做又是另外一方面了。平時(shí)也可以多學(xué)習(xí)業(yè)務(wù)方面的知識(shí)。
(3)相同的工作年限為什么當(dāng)過(guò)項(xiàng)目經(jīng)理的人更吃香
因?yàn)樗麄儗?duì)業(yè)務(wù)理解更加深入,代碼質(zhì)量問(wèn)題落在他頭上,項(xiàng)目的人員協(xié)調(diào)與時(shí)間安排規(guī)劃,責(zé)任越大,思考的問(wèn)題就越多,遇到的問(wèn)題處理經(jīng)驗(yàn)就越豐富。把控能力也比較強(qiáng)。
(4)怎樣能進(jìn)入學(xué)習(xí)狀態(tài),并且堅(jiān)持
要想集中注意力學(xué)習(xí)技術(shù),需要安靜的環(huán)境,需要耐得住寂寞,因此你需要沒(méi)有人打擾的環(huán)境,比如在一個(gè)集體居住環(huán)境,幾個(gè)朋友一起住,一般多數(shù)回想著去哪玩,朋友在玩游戲,估計(jì)也是對(duì)你的一種誘惑吧。可以早點(diǎn)到辦公室學(xué)習(xí)或下班學(xué)習(xí)一段時(shí)間再回去?;蛘哌x擇自己一個(gè)人住。
(5)如何把握住學(xué)習(xí)的時(shí)機(jī)
學(xué)習(xí)最能集中注意力的情況是有著比較強(qiáng)的好奇心和求知欲。所以一般一些技術(shù)分享或者老員工討論的問(wèn)題,可能很多概念知識(shí)你都不懂,這時(shí)候你就可以去學(xué)習(xí)了解這些知識(shí)。
或者你工作中遇到的問(wèn)題,盡量刨根問(wèn)底的去弄清楚是什么原因?qū)е碌模灰恍├纤緳C(jī)幫忙解決了就一了了之?;蛘呤瞧渌掠龅降膯?wèn)題,你都可以去了解一下。
(6)你更適合走一條怎樣的職業(yè)道路
剛畢業(yè)不久的猿友,一般都是會(huì)比較心浮氣躁的,對(duì)技術(shù)求知欲很強(qiáng),特別是一些高大上的技術(shù),什么大數(shù)據(jù)、云計(jì)算、架構(gòu)等等,有些偏向于技術(shù)研究,有些偏向于業(yè)務(wù)。
大部分程序員可能都會(huì)選擇偏向于技術(shù)研究的,于是乎對(duì)偏向業(yè)務(wù)的不怎么感冒,因此覺(jué)得天天做這些東西沒(méi)什么意思。這時(shí)候,靜下來(lái)分析一下,你到底適合哪種方向。你能否靜下心來(lái)對(duì)技術(shù)研究很深入,能否耐得住寂寞。