java分散式(java入門)

費曉行發表於2018-06-01

【 宣告:版權所有,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】


    說起來,在大學裡面我學過的程式語言只有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

public class hello {

	public static void main(String[] args){

		System.out.println("hello, world");
	}
}

    這個無敵的入門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程式,最後編譯出來是這樣的,

Compiled from "hello.java"
public class hello {
  public hello();
    Code:
       0: aload_0
       1: invokespecial #1                  // Method java/lang/Object."<init>":()V
       4: return

  public static void main(java.lang.String[]);
    Code:
       0: getstatic     #2                  // Field java/lang/System.out:Ljava/io/PrintStream;
       3: ldc           #3                  // String hello, world
       5: invokevirtual #4                  // Method java/io/PrintStream.println:(Ljava/lang/String;)V
       8: return
}


9、jdb除錯

    還是以剛才的hello程式為例,開始的時候輸入jdb hello,接著輸入stop in hello.main,最後輸入run。有了這三步,程式就已經載入好了,後面就可以單步除錯了。不管java語言是這樣,幾乎所有的指令碼語言都可以編譯、除錯、反彙編,這三個工具真的非常重要,希望大家好好掌握和應用。

正在初始化jdb...
> stop in hello.main
正在延遲斷點hello.main。
將在載入類後設定。
> run
執行hello
設定未捕獲的java.lang.Throwable
設定延遲的未捕獲的java.lang.Throwable
>
VM 已啟動: 設定延遲的斷點hello.main

斷點命中: "執行緒=main", hello.main(), 行=7 bci=0
7               System.out.println("hello, world");

main[1]


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開發等等。


    大家可以根據自己的能力和興趣,靈活調整內容,不斷學習和進步。


13、資源

api文件,https://docs.oracle.com/javase/7/docs/api/

java教學視訊,http://www.maiziedu.com/course/348-3765/ 和 http://www.maiziedu.com/course/804/

其他教程,http://www.runoob.com/java/java-filereader.html,

                  http://www.weixueyuan.net/java/rumen/

相關文章