java分散式(java入門)
【 宣告:版權所有,歡迎轉載,請勿用於商業用途。 聯絡信箱: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/
相關文章
- JAVA 分散式 - 分散式介紹Java分散式
- [分散式]Netty入門分散式Netty
- Java入門--運算子和表示式Java
- Java入門:Lambda常用表示式解析Java
- java分散式(類特性)Java分散式
- 分散式框架Dubbo入門分散式框架
- JAVA入門程式Java
- redis分散式鎖-java實現Redis分散式Java
- Java 入門基礎Java
- JAVA泛型入門Java泛型
- java菜鳥入門Java
- JAVA入門必學Java
- 分散式日誌元件GrayLog入門分散式元件
- 基於java的分散式爬蟲Java分散式爬蟲
- java實現分散式專案搭建Java分散式
- 【入門】分散式Session一致性入門簡介分散式Session
- SpringCloud入門及建立分散式專案SpringGCCloud分散式
- Seata搭建與分散式事務入門分散式
- Java語言入門:該如何學習JavaJava
- Java 集合類入門篇Java
- Java入門簡述(3)Java
- 奇偶個數(Java入門)Java
- Java註解(入門級)Java
- Java入門系列之finalJava
- Java:Web Service初入門JavaWeb
- 學Java怎麼入門?Java
- 自學Java如何入門?Java
- 嵌入式狗的 JAVA 入門筆記4 進階。。Java筆記
- 分散式入門,怎樣用PyTorch實現多GPU分散式訓練分散式PyTorchGPU
- Java入門系列-04-java中的變數Java變數
- Java入門到實踐系列(1)——Java簡介Java
- Java入門知識_Java初學者須知Java
- 學習java怎麼入門?怎樣學Java?Java
- 分散式訓練從入門到放棄分散式
- [Java分散式架構實戰]Java+MySQL開發規範Java分散式架構MySql
- Java入門系列-27-反射Java反射
- Java初學者入門指南Java
- Java入門----猜拳小遊戲Java遊戲