Java學習之旅開篇:運行機制及環境搭建


在寫這篇博客之前,我想對自己進行簡單概括:我從事軟件開發工作已經三年多了,並且一直在從事.NET相關項目的開發。為什么突然間想學習Java呢?有以下幾個原因:

      1. 開發程序三年多來,已經對.NET相關體系完成了基本掌握,但是還不是爐火純青的那種,我不想一直忙碌的奔跑,想停下來看看Java這位與.NET勢均力敵的"大腕"的精妙之處,比較兩者之間各自的優勢與應用領域,以便為以后軟件架構師(主要在擴展知識體系而非語言)做一定准備;

      2. Java更加需要注重個人思維解決問題,而.NET卻提供了豐富的體系結構更注重業務的搭建,對於目前我這個中高級軟件工程師而言,最好的催化劑莫過於對軟件思維的提升,而不是去"拿來"別人搭建的豐富類庫及結構;

      3. 還有比較現實的,為了工作,為了錢錢,為了豐富自己的職業視野等等....

      好了,廢話不多說,開始我們的Java學習之旅吧。我們都知道:Java分為三大應用領域:J2SE、J2EE、J2ME。J2SE是整個Java技術的核心和基礎,同時也是J2EE和J2ME編程框架的基礎。J2EE是企業級開發應用的完整解決方案。J2ME主要應用於移動通信設備和信息家電領域。Java是一種先編譯后解釋的高級語言,Java語言程序經過編譯生成與平台無關的字節碼(*.class文件,不可執行的),字節碼文件經過Java虛擬機(JVM)轉化為特定系統的機器碼解釋執行。也就是說,系統運行平台不針對任何Java程序,只針對JVM,而編譯器生成的字節碼也只針對JVM,提供相同的編程接口,實現了跨平台應用。

     在開發Java程序之前,必須安裝和配置JDK。這里涉及一個概念:JRE(Java運行時環境),前面提到JVM是虛擬機,負責將字節碼文件轉化為針對特定系統的機器碼解釋執行。但除了JVM之外,還需要安裝JRE(包含JVM)提供Java運行環境支持,而JDK又包含JRE,如果你的應用程序是用於開發的話,則安裝JDK;相反僅僅作為運行時,則僅安裝JRE。簡單總結一下,Java程序需要經歷以下兩個步驟:1.將源文件編譯成與平台無關的字節碼;2.將字節碼解釋成特定平台的機器碼。分別對應於javac和java命令,要想使用這兩個命令則需要設置Path環境變量,即將Java安裝路徑(如D:\Java\jdk1.7.0_05\bin)添加到"用戶變量(JAVA_HOME)"中,可以通過"我的電腦"屬性頁設置,也可以運行一下批處理命令autoexec.bat(保存在系統盤根目錄,重啟將自動執行)。

set Path=%Path%;D:\Java\jdk1.7.0_05\bin

如果使用Linux配置環境變量進行開發時,首先必須進入當前用戶(假設叫mirhe)的home路徑下並使用命令(ls -a)查看當前路徑的所有文件(包含隱藏文件),你會發現有一個文件.bash_profile,我們正是在這個文件中配置環境變量。使用無格式的記事本打開該文件並在PATH變量后追加(請注意Linux路徑是用:來進行分割的,而Windows采用;分割):

# 設置PATH環境變量
PATH=.:$PATH:$HOME/bin:/home/mirhe/java/jdk_1.7.0_05/bin

完成設置后關閉該文件,你也可以再文件最后追加以下命令來查看當前的環境變量:

# 導出PATH環境變量
export PATH

重新登錄Linux平台或執行以下命令(source .bash_profile)使PATH環境變量生效。
      可能很多朋友學習Java時還會設置另外一個環境變量CLASSPATH的值,那這個環境變量真的需要設置嗎?它的作用是什么呢?我們都知道當執行"java 類名"時,JRE從哪里去搜索Java類呢?可能朋友會說:在當前路徑下(.)搜索。但是JDK1.4之前版本並未設計這個自動在當前路徑查找字節碼的功能,也即當前路徑下包含"類名.class"的字節碼時,仍然會出現"找不到類"的錯誤。除此之外,還需要將JDK的lib路徑下的dt.jar和tools.jar包含到CLASSPATH中。

classpath的值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar(注意別忘記.;)

但JDK1.5之后版本加入了自動查找字節碼文件的功能,因此不需要設置CLASSPATH變量。有時我們需要臨時改變CLASSPATH變量的值,以便在我們定義的路徑下去查找字節碼文件。

java -classpath dir1;dir2;...;dirN

不過此時會覆蓋此前系統設置的CLASSPATH變量的值,要想不覆蓋則可以將之前的值追加到路徑列表中。

java -classpath %CLASSPATH%;.;dir1;dir2;...;dirN

接下來我們以入門示例(HelloWorld)來說明Java編譯和運行的整個過程。在記事本中(建議使用Notepad++)添加以下代碼:

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}

分別在源文件所在路徑下執行javac HelloWorld.java和java HelloWorld將輸出"Hello World!"。有時為了方便,我們不使用命令行運行程序,而是利用文本編譯器中設置一些快捷方式(在Notepad++中直接編譯運行java代碼以及在Sublime Text 2中編譯和運行Java程序),以更快的運行程序,強烈建議初學者使用輕量級記事本或文本編譯器來練習,搞懂Java程序的運行原理,待比較熟練掌握基礎知識后並需要項目開發實踐時再選用適合自身的IDE

編譯Java: cmd /k javac "$(FULL_CURRENT_PATH)"&PAUSE, 快捷方式: Ctrl + C
運行Java: cmd /k cd /d "$(CURRENT_DIRECTORY)"&java "$(NAME_PART)"&PAUSE, 快捷方式: Ctrl + R
編譯並運行Java: cmd /k javac "$(FULL_CURRENT_PATH)"&cd /d "$(CURRENT_DIRECTORY)"&java "$(NAME_PART)"&PAUSE,快捷方式: Ctrl + E

其中包含一些宏定義:$(FULL_CURRENT_PATH)"——當前帶路徑的文件名(如:C:\Project\HelloWorld.java);$(CURRENT_DIRECTORY)"——當前的路徑(如:C:\Project\);$(NAME_PART)——不帶擴展名的文件名(如:HelloWorld);此外還有:$(FILE_NAME)——完整的文件名(如:HelloWorld.java);$(EXT_PART)——文件的擴展名(如:java)等。

     我們都知道,Java源文件名稱是可以為任意的(除開源代碼中包含public類,則源文件的主文件名與public類相同),因此一個源文件可包含多個類,但最多只能定義一個public類,且主文件名必須與這個public類名一致。因此通常建議:一個Java源文件只定義一個類,並將該類定義成public,保持源文件名與public類名一致


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM