說起來,在大學裡面我學過的程式語言只有c++和java。這其中c++是作為必修課學的,而java是作為選修課學的。至於後面的c、彙編、python、js這些語言,那都是工作了之後才學的。至於這些語言有什麼用,在什麼場景下使用效率最高,其實說實話,當時心裡不是很清楚,等到真正明白過來,基本上已經是工作幾年後的事情了。
asm和c一般用作底層開發,雖然大多數學習都把c語言作為必修課,但是坦率來講,真正高水平的c語言開發工程師其實不多,彙編就更少了,看過nginx和lua代碼的同學應該深有體會。通訊廠商、晶片廠商,還有一些單片機設備、白色家電、黑色家電,這些設備上運行的代碼大多數都是asm和c編寫的。c++和java是上層應用使用較多的程式語言,c++在遊戲和大型軟體開發中使用較多,當然這也和具體公司有關。按我的了解,c++在騰訊就用的比較多,java在阿里巴巴用的不少。使用c++多數是為了兼顧效率和面向對象,而java語言則照顧到網絡開發、網站開發、分布式、android開發等很多方面。另外,合格的java工程要比c++工程師多很多。一個5年的工程師,他可以說精通java,但是同樣的年限下,他一般不會說自己精通c++。而python、js、html這些,也是使用較多的腳本語言。python用於機器學習、網站搭建、軟體原型、測試腳本開發,十分方便。而js,既可以用於前端開發。也可以用於後端開發。自從出現了node.js之後,使用js的場景也越來越多了。甚至於,由於混合編程的流行,使用js和ionic這樣的框架開發app也不是多複雜的事情。
如果只是開發上層應用,java無疑是比較好的選擇。不管是下載、安裝,還是學習資源、學習教程,都非常方便,更不用說五花八門的jsp開發框架了。但是對於我來說,學習java的根本動力就是分布式開發,特別是apache下面的hadoop、hdfs、hbase,這些基本是分布式開發的標配。此外,編寫健壯的java程序相對而言是容易的,而同樣的邏輯用c或者c++程序來開發要複雜的多,單是關於內存的問題就夠讓人頭痛的了。
1、jdk安裝
如果是windows開發,一般使用oracle公司的jdk進行開發。如果是ubuntu開發,既可以選擇openjdk,也可以選擇oracle公司的jdk。jdk一般包括了編譯環境和運行環境兩個部分。
2、ide安裝
很多同學安裝完jdk之後,都喜歡安裝ide,比如說eclipse,或者是netbeans。如果是項目開發,這無可厚非,但是如果自己學習,我還是建議大家安裝一個代碼編輯工具就可以了。比如說sublime就不錯了,在windows、linux、mac上面都可以安裝這個軟體。
3、設置環境變量
設置環境變量比較簡單。一般設置三個系統變量,分別是JAVA_HOME、CLASSPATH、Path。其中JAVA_HOME設置為C:\Program Files (x86)\Java\jdk1.8.0_91,CLASSPATH設置為.;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar;,Path只需要在原來的環境變量下面添加這兩個屬性就可以了,分別是%JAVA_HOME%\bin和%JAVA_HOME%\jre\bin。
4、常用的java工具
常用的命令工具主要有javac、jar、java、javadoc、javap、jdb。javac是編譯工具,它既可以編譯單個文件,也可以編譯多個文件。jar負責生成jar文件,主要是將多個class文件壓縮在一起。java是虛擬機命令,它負責將class文件加載到虛擬機執行。javadoc負責文檔的自動生成,內容來自於java文件中的注釋。javap是反彙編文件,一般添加一個-c選項即可。jdb類似於gdb,可以用它對生成的class文件進行調試。
5、入門demo
這個無敵的入門demo幾乎是各個語言學習的標配。javac hello.java & java hello,這樣可以運行起來了。主要執行的時候是java hello,而不是java hello.class。
6、多個java文件編譯
如果需要對多個文件進行編譯,也可以直接用javac來進行處理。假設有一個目錄test,test中有兩個文件a.java和b.java。那麼在a.java和b.java的開頭,都要添加代碼package test;。然後進行編譯,輸入javac test/*.java。最後執行的時候,只要輸入java test/hello即可。
7、引用第三方庫
如果編譯的過程中使用了第三方庫,那麼只要在javac中添加cp選項即可。比如,像這樣javac -cp test/junit-4.12.jar test/*.java。
8、反彙編java
多使用javap工具是學習java的一個重要方法,它可以清楚地告訴你,代碼最終是編譯成什麼樣子,比如說最簡單的hello程序,最後編譯出來是這樣的,
9、jdb調試
還是以剛才的hello程序為例,開始的時候輸入jdb hello,接著輸入stop in hello.main,最後輸入run。有了這三步,程序就已經加載好了,後面就可以單步調試了。不管java語言是這樣,幾乎所有的腳本語言都可以編譯、調試、反彙編,這三個工具真的非常重要,希望大家好好掌握和應用。
10、生成jar文件,且被引用
假設有test目錄,test下有hello.java文件。首先hello.java的開頭必須有package test;這段代碼。其次,利用javac test/*.java生成class文件。接著,利用jar -cvf test.jar test/*.class創建test.jar文件。此時如果需要引用test.jar,直接利用javac -cp ./test.jar process.java即可。注意,在process.java中添加import test.hello代碼。最後,如果需要執行process,直接輸入java process即可。當然這個時候,如果用解壓工具可以發現,jar文件中除了class文件之外,還有一個META-INF目錄,這個目錄下面有一個manifest.mf文件。
11、參考書籍
建議先學習好一本書的情況再去參考其他的數據,比如說《java編程思想》。如果這本書看完了,那麼可以去參考其他的書籍,比如說《java核心技術》等等。
12、後面的話
一般教程上面學習java是這麼安排的:a、學習基本語法,包括關鍵字、變量、計算、循環、判斷、數組、編譯、調試等等;b、學習類、包、繼承、封裝、多態、嵌套類、抽象類、接口、匿名類等等;c、學習第三方庫,包括多線程、網絡、資料庫、日誌、單元測試、gui、jni開發等等;d、到了這一步,一般會學習java的各個框架,比如structs、spring、hibernate、ibatis、mybatis等等,好一點的培訓機構還說帶一點hadoop、hdfs、hbase這些內容;e、等到上面的知識點都學完了,一般都會開始進行項目實戰了,比如網上商城、爬蟲、分布式監控、android開發等等。