java分布式(java入門)

2020-10-03 JS說程式設計師的那些事

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

相關焦點

  • Java學習(整理的大量資源)
    第一階段:java基礎Java基礎超級重要!!! 學習java基礎語法,確實很乏味,又沒有項目成就感。我當時就走馬觀花地看完了相關語法,就迫不及待地去學習J2EE部分,那種能快速地基於框架,造成系統來了。但是很快由於基礎底子不好,在遇到一些問題,我根本想不出來這是為什麼會出現這個問題?
  • 2020年最新java初學者小白入門學習指南(內附視頻+學習框架)
    對於java小白,入門至關重要,這關係到初學者是從入門到精通還是從入門到放棄。以下圖片內容是小志開發多年,總結出java的學習經驗,整理出的一條學習路徑。【福利】需要免費領取下面學習資料的同學可以私信小編。
  • Java - 註解(Annotation)
    -----------------------------------------Java 註解(Annotation)又稱 Java 標註,是 JDK5.0 引入的一種注釋機制。>enum ElementType { TYPE, /* 類、接口(包括注釋類型)或枚舉聲明 */ FIELD, /* 欄位聲明(包括枚舉常量) */ METHOD, /* 方法聲明 */ PARAMETER, /* 參數聲明 */ CONSTRUCTOR, /*
  • JAVA 分布式 - 分布式介紹
    什麼是分布式系統?要理解分布式系統,主要需要明白一下2個方面:1.分布式系統一定是由多個節點組成的系統。其中,節點指的是計算機伺服器,而且這些節點一般不是孤立的,而是互通的。分布式系統對於用戶而言,他們面對的就是一個伺服器,提供用戶需要的服務而已,而實際上這些服務是通過背後的眾多伺服器組成的一個分布式系統,因此分布式系統看起來像是一個超級計算機一樣。
  • Java初學,學習筆記(一)
    3.運算符 第三章運算符,介紹的是java支持的運算符有哪些,運算符的優先級別及注意事項,還有運算符的作用,本章的習題還是比較有趣的。 4.流程控制 第四章流程控制,介紹java語言中流程控制分成三類:順序結構,選擇(分支)結構,循環結構。包括一些關鍵字的使用,本章會進行講解。
  • 最全的java學習順序和詳細知識點總結(思維導圖)
    java基礎學習篇(一) JAVA是一種面向對象的程式語言。吸收了C++的許多優點,摒棄了C++裡難以理解的多繼承、指針等概念,大大簡化了程序設計,初學者學起來比較容易,常常是編程開發者的入門必選語言。
  • Java性能優化集錦(四)
    ,而不是初始化對象; 2 、實現對象的網絡傳輸( RMI 分布對象); 3 、實現對象的深拷貝。一:對象序列化可以實現分布式對象。主要應用例如: RMI 要利用對象序列化運行遠程主機上的服務,就像在本地機上運行對象時一樣。二: java 對象序列化不僅保留一個對象的數據,而且遞歸保存對象引用的每個對象的數據。
  • 鄭州java入門培訓學費
    鄭州java培訓機構如何選擇? 其實鄭州java培訓機構很多,但是如何選擇一個更好的呢?這個我覺得,個人有個人的想法吧,這個說這個好,那個說那個好。因此,想確定哪一個java培訓班更好,需要你自己去調查一下,知道哪一個適合你,那所學校的課程更好。
  • Java小白入門教程(2)——基本語法&變量
    小小白同學初學Java,不太建議直接使用即成開發工具,建議先熟悉Java的執行流程,以及javac,java等命令。文本編輯器:只能寫文本代碼。如果想要編譯或執行,需要配合dos窗口執行命令。記事本,nodepad++,editplus,sublime text。。。
  • Java從入門到精通的學習建議
    當你敲起 hello world 跑起來,那其實算不上入門。論上入門應該是把 Java 的基礎都掌握吧。javaSE 是 java 的核心和基礎。只有這塊學好在後面閱讀其他代碼、框架才能更加輕鬆容易。隨著網際網路行業的發展, java作為實力派程式語言,崗位人才市的需求一直不減。但敲代碼並不適合所有人,你如果想學習Java,可以先到網上找點Java基礎課程資源,免費試學一段時間,確定自己是否適合學習。對於入門的書籍,其實還是推薦,內容豐富而通俗易懂。跟著書上案例敲demo就很容易入門。
  • Java進階:遠程過程調用(RPC)及回調方法(一)
    javax.rmi.UnicastRemoteObjectUnicastRemoteObject用於按JRMP(Java遠程方法協議)導出和回收遠程對象,以及獲取代理對象。javax.rmi.LocateRegistryLocateRegistry用來從特定主機獲取一個遠程對象的註冊表(remote object registry),或是用來在本地特定埠創建一個接受遠程調用的遠程對象的註冊表。
  • java 8 的新特性(一)
    https://www.runoob.com/java/java8-new-features.htmlLambda 表達式 Lambda 允許把函數作為一個方法的參數(函數作為參數傳遞到方法中)。lambda 表達式的局部變量可以不用聲明為 final,但是必須不可被後面的代碼修改(即隱性的具有 final 的語義)在 Lambda 表達式當中不允許聲明一個與局部變量同名的參數或者局部變量。
  • Java進階:遠程過程調用(RPC)及回調方法(二)
    回調方法在客戶端實例化一個遠程(Remote)對象,調用遠程方法時作為參數傳遞給服務端,服務端通過調用這個遠程對象的方法實現回調。import java.rmi.Remote;import java.rmi.RemoteException;public interface ICallback extends Remote { //供服務端調用,同樣code參數用於標識兩臺 void callback(int code) throws RemoteException;}同樣的 extends
  • Java提高篇——Java中的異常處理(絕對詳細,建議收藏)
    Java異常又可以分為不受檢查異常(Unchecked Exception)和檢查異常(Checked Exceptin)。例如,Java虛擬機運行錯誤(Virtual MachineError),當JVM不再有繼續執行操作所需的內存資源時,將出現 OutOfMemoryError。這些異常發生時,Java虛擬機(JVM)一般會選擇線程終止;還有發生在虛擬機試圖執行應用時,如類定義錯誤(NoClassDefFoundError)、連結錯誤(LinkageError)。
  • java內存溢出之Java heap space(1/8)
    作為一個java程式設計師,大家都應該認識JVM。JVM作為java的核心,實在太重要了。如果某個方法/某段代碼存在內存洩漏的, 每執行一次, 就會(有更多的垃圾對象)佔用更多的內存.但在實際使用過程中, 業務開發人員將一個很大的對象(如佔用內存200MB左右的List)設置為 request 的 Attributes, 傳遞到 JSP 中。
  • 《Java程序設計》課程代碼題(一)
    《斜率計算》輸入兩點坐標(X1,Y1),(X2,Y2),計算並輸出兩點的線的斜率。《數字魔術》從鍵盤輸入一個四位數(整數),請將其四個位數上的數拆出來,分別輸出。同時將其反轉輸出。輸入要求輸入1個四位整數(1000-9999)輸出要求輸出兩行,第1行表示拆分的數,每個數之間用空格隔開;第二行表示拆分後倒序的數輸入
  • Java - 反射(Reflection)
    4.Class 對象只能由系統建立對象,一個類(而不是一個對象)在 JVM 中只會有一個Class實例package com.atguigu.java.fanshe;public class Person { String name; private int age; public String getName() { return
  • 面試清單(Java崗):Java+JVM+資料庫+算法+Spring+設計模式
    (或者 GC 對象的判定方法)java 中垃圾收集的方法有哪些?類加載器雙親委派模型機制?java 內存模型,java 類加載過程?什麼是類加載器,類加載器有哪些?簡述 java 內存分配與回收策率以及 Minor GC 和Major GC02 資料庫2.1 MySQL事務四大特性(ACID)原子性、一致性
  • Java面試題系列之—Java基礎面試題(一)
    JDK:Java Development Kit 的簡稱,java 開發工具包,提供了 java 的開發環境和運行環境。JRE:Java Runtime Environment 的簡稱,java 運行環境,為 java 的運行提供了所需環境。
  • Java新手從入門到精通的學習建議
    當你敲起 hello world 跑起來,那其實算不上入門。論上入門應該是把 Java 的基礎都掌握吧。javaSE 是 java 的核心和基礎。只有這塊學好在後面閱讀其他代碼、框架才能更加輕鬆容易。隨著網際網路行業的發展, java作為實力派程式語言,崗位人才市的需求一直不減。但敲代碼並不適合所有人,你如果想學習Java,可以先到網上找點Java基礎課程資源,免費試學一段時間,確定自己是否適合學習。對於入門的書籍,其實還是推薦,內容豐富而通俗易懂。跟著書上案例敲demo就很容易入門。