Java入門(二)--Java語言介紹

Java歷史

  1. Java的產生
    Java來自於Sun公司的一個叫Green的項目, 其原先的目的是爲家用消費電 子產品開發一個分佈式代碼系統, 這樣我們可以把E-mail發給電冰箱、 電視機等家用電器, 對它們進行控制, 和它們進行信息交流。開始, 準備採用C++,但C++太 複雜, 安全性差, 最後基於C++開發一種新的語言Oak(Java的前身), Oak是一種用於網絡的 精巧而安全的語言, Sun公司曾依此投標一個交互式電視項目, 但結果是被SGI打敗。 可憐的Oak幾乎無家可歸, 恰巧這時Mark Ardreesen開發的Mosaic和Netscape啓發了Oak項 目組成員, 他們用Java編制了HotJava瀏覽器, 得到了Sun公司首席執行官Scott McNealy的 支持, 觸發了Java進軍Internet。 Java的取名也有一些趣聞, 有一天, 幾位Java成員組的 會員正在討論給這個新的語言取什麼名字, 當時他們正在咖啡館喝着Java(爪哇)咖啡,有一 個人靈機一動說就叫Java怎樣, 得到了其他人的讚賞, 於是, Java這個名字就這樣傳開了 。

  2. Java的歷史:
    1995年5月23日,Java語言誕生
    1996年1月,第一個JDK-JDK1.0誕生
    1996年4月,10個最主要的操作系統供應商申明將在其產品中嵌入JAVA技術
    1996年9月,約8.3萬個網頁應用了JAVA技術來製作
    1997年2月18日,JDK1.1發佈
    1997年4月2日,JavaOne會議召開,參與者逾一萬人,創當時全球同類會議規模之紀錄
    1997年9月,JavaDeveloperConnection社區成員超過十萬
    1998年2月,JDK1.1被下載超過2,000,000次
    1998年12月8日,JAVA2企業平臺J2EE發佈
    1999年6月,SUN公司發佈Java的三個版本:標準版、企業版和微型版(J2SE、J2EE、J2ME)
    2000年5月8日,JDK1.3發佈
    2000年5月29日,JDK1.4發佈
    2001年6月5日,NOKIA宣佈,到2003年將出售1億部支持Java的手機
    2001年9月24日,J2EE1.3發佈
    2002年2月26日,J2SE1.4發佈,自此Java的計算能力有了大幅提升
    2004年9月30日18:00PM,J2SE1.5發佈,是Java語言的發展史上的又一里程碑事件。爲了表示這個版本的重要性,J2SE1.5更名爲J2SE5.0

  3. Java與微軟MS的愛恨情仇
    Java誕生的1995年,正是微軟在軟件產業地位達到巔峯的時代,Windows 95發佈時的風光場面給人們留下的深刻印象至今難忘。儘管如此,作爲最卓越的技術領袖,比爾?蓋茨仍然敏銳地注意到Java。當他了解了Java的一些細節之後,給予了這樣的評價:“Java是很長時間以來最優秀的程序設計語言。”基於此,微軟於1996年3月申請並獲得了Java許可證。微軟對於Java的這一熱情態度在當時大大提高了人們對Java的興趣和信心,但也有不少人擔心微軟會依靠自己強大的影響力在標準之外另立標準,從而破壞Java的純潔性。
    果然,從1997年發佈Visual J++的第一個版本開始,微軟就開始在Java中摻入自己的私有擴展。這毫無疑問引起Sun的高度重視。1997年10月,Sun向美國加州地方法院起訴微軟公司違反兩公司就微軟使用Java技術所簽定的合同,指控微軟公司在自己的Java產品中做了“不恰當的修改”,違反了合同中承諾向用戶提供Java兼容產品的條款。這一官司曠日持久,直到2001年1月雙方達成和解,微軟將繼續提供採用Sun開發的Java技術的現有產品(包括測試版)。不過,Sun有限制地僅對包括Java 1.1.4的微軟產品提供許可。到了2001年7月,微軟公佈新版的Windows XP將不再支持Sun的JVM,並且推出了.NET平臺與Java分庭抗禮。
    現在回過頭去看,當時的這一場官司對Java世界產生了深遠的影響。如果沒有這一場官司,也許很多Java程序員都在使用Visual J++,基於WFC開發Windows客戶端程序,同時不得不面對被兩個不同的事實標準所分裂的Java世界。

  4. 資料來源
    Java的產生與歷史
    Java 20年:歷史與未來

Java開發環境

JDK與JRE

JDK就是Java Development Kit.簡單的說JDK是面向開發人員使用的SDK,它提供了Java的開發環境和運行環境。SDK是Software Development Kit 一般指軟件開發包,可以包括函數庫、編譯程序等。
JRE是Java Runtime Enviroment是指Java的運行環境,是面向Java程序的使用者,而不是開發者。
如果安裝了JDK,會發同你的電腦有兩套JRE,一套位於 \jre 另外一套位於 C:\Program Files\Java\jre1.5.0_15 目錄下,後面這套比前面那套少了Server端的Java虛擬機,不過直接將前面那套的Server端Java虛擬機複製過來就行了。而且在安裝JDK可以選擇是否安裝這個位於 C:\Program Files\Java 目錄下的JRE。如果你只安裝JRE,而不是JDK,那麼只會在 C:\Program Files\Java 目錄下安裝唯一的一套JRE。
JRE的地位就象一臺PC機一樣,我們寫好的Win32應用程序需要操作系統幫我們運行,同樣的,我們編寫的Java程序也必須要JRE才能運行。所以當你裝完JDK後,如果分別在硬盤上的兩個不同地方安裝了兩套JRE,那麼你可以想象你的電腦有兩臺虛擬的Java PC機,都具有運行Java程序的功能。所以我們可以說,只要你的電腦安裝了JRE,就可以正確運行Java應用程序。

  1. 爲什麼Sun要讓JDK安裝兩套相同的JRE?
    這是因爲JDK裏面有很多用Java所編寫的開發工具(如javac.exe、jar.exe等),而且都放置在 \lib\tools.jar 裏。從下面例子可以看出,先將tools.jar改名爲tools1.jar,然後運行javac.exe,顯示如下結果: Exception in thread “main” java.lang.NoClassDefFoundError: com/sun/tools/javac /Main 這個意思是說,你輸入javac.exe與輸入 java -cp c:\jdk\lib\tools.jar com.sun.tools.javac.Main 是一樣的,會得到相同的結果。從這裏我們可以證明javac.exe只是一個包裝器(Wrapper),而製作的目的是爲了讓開發者免於輸入太長的指命。而且可以發現\lib目錄下的程序都很小,不大於29K,從這裏我們可以得出一個結論。就是JDK裏的工具幾乎是用Java所編寫,所以也是Java應用程序,因此要使用JDK所附的工具來開發Java程序,也必須要自行附一套JRE才行,所以位於C:\Program Files\Java目錄下的那套JRE就是用來運行一般Java程序用的。
  2. 如果一臺電腦安裝兩套以上的JRE,誰來決定呢?
    這個重大任務就落在java.exe身上。Java.exe的工作就是找到合適的JRE來運行Java程序。 Java.exe依照底下的順序來查找JRE:自己的目錄下有沒有JRE;父目錄有沒有JRE;查詢註冊表: [HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment] 所以java.exe的運行結果與你的電腦裏面哪個JRE被執行有很大的關係。

詳細參考:
http://developer.51cto.com/art/200808/85286.htm
https://www.zhihu.com/question/20317448
http://www.cnblogs.com/myitm/archive/2011/05/03/2035942.html

JAVA_HOME

作用

  1. 爲了方便引用,比如,你JDK安裝在C:\Program Files\Java\jdk1.6.0目錄裏,則設置JAVA_HOME爲該目錄路徑, 那麼以後你要使用這個路徑的時候, 只需輸入%JAVA_HOME%即可, 避免每次引用都輸入很長的路徑串;
  2. 歸一原則, 當你JDK路徑被迫改變的時候, 你僅需更改JAVA_HOME的變量值即可, 否則,你就要更改任何用絕對路徑引用JDK目錄的文檔, 要是萬一你沒有改全, 某個程序找不到JDK, 後果是可想而知的—-系統崩潰! 比如你開發的時候切換jdk版本。
  3. 第三方軟件會引用約定好的JAVA_HOME變量, 不然, 你將不能正常使用該軟件, 以後用JAVA久了就會知道, 要是某個軟件不能正常使用, 不妨想想是不是這個問題, 比如tomcat。

配置過程

http://blog.csdn.net/javahuangfang/article/details/7482487
http://bbs.csdn.net/topics/340232733
https://www.zhihu.com/question/20779183

Path與ClassPath

作用

  1. 設置CLASSPATH
    這 是一個很有趣,當然也比較折磨初學者的問題, 這個變量設置的目的是爲了程序能找到相應的”.class”文件, 不妨舉個例子: 你編譯一個JAVA程序—A.java, 會得到一個A.class的類文件,你在當前目錄下執行java A, 將會得到相應的結果(前提是你已經設置CLASSPATH爲”.”). 現在, 你把A.class移到別的目錄下(例如:”e:\”), 執行java A, 將會有NoClassDefFindError的異常,原因就是找不到.class文件, 現在你把CLASSPATH增加爲:”.;e:\”再運行java A, 看看會有什麼結果:)~, 一切正常, java命令通過CLASSPATH找到了.class文件!
  2. 設置PATH
    道理很簡單, 你想在任何時候都使用%JAVA_HOME%\bin\java 等來執行java命令嗎, 當然不會, 於是, 你可以選擇把 %JAVA_HOME%\bin添加到PATH路徑下, 這樣, 我們在任何路徑下就可以僅用java來執行命令了.(當你在命令提示符窗口輸入你個代碼時,操作系統會在當前目錄和PATH變量目錄裏查找相應的應用程序, 並且執行.

關於Path的另外一點說明和使用

windows操作系統或者linux都會有這麼一個東西,之所以存在我的理解是:因爲OS要管理的Program非常多,經常存在Pa調用Pb的問題,並且大部分時候Pa、Pb可能在一個目錄下,比如system32,這樣的話,程序調用起來如果每次都是全路徑,很傻,當人用shell的時候再輸入路徑尤其反人類,因此將設置了一個Path的環境變量。OS會在啓動的時候讀取該變量,在shell裏面輸入的時候如果當前路徑找不到就會去Path裏面去找,如果找不到再報錯。Path可以有好多個,每個以分號隔開。
基於此,我們可以把常用的程序(比如QQ,Wechat,Wiz,Foxmail等)的快捷方式放到一個統一的目錄下面,然後將該目錄設置到Path裏面,這樣在Win+R調出來的運行裏面就可以直接輸入快捷方式的名字就可以啓動了。當我們有新的程序時,直接把快捷方式發送到這個目錄,這個程序就可以啓動。當然,可以將快捷方式名字改的簡單點,比如foxmail改爲mail之類的。

Javac與Java

JavaDoc

JDE

Java反編譯工具介紹

Eclipse使用

再論HelloJava

在E:test/com/hello包下編寫如下HelloWorld類:

public class HelloWorld {
    public static void main(String[] args) {
         System.out.println("HelloWorld : hello world");
    }
}

在類所在的目錄下編譯運行:
命令行切換到E:test/com/hello
配置環境變量情況下:
編譯 javac HelloWorld.java
運行 java HelloWorld
結果 HelloWorld : hello world
未配置環境變量情況下:
因爲Program Files中間有空格,所以要加雙引號
編譯 “C:\Program Files\Java\jdk1.8.0_45\bin\javac” helloWorld.java
因爲安裝jdk過程中,會把java.exe文件拷貝到系統環境變量下,所以這裏可以直接用
因爲運行時直接加載的是類的.class文件,所以後綴不帶.java,所以運行時可以沒有源文件。
運行 java HelloWorld
結果 HelloWorld : hello world

帶有包的helloWorld的編譯運行

在E:test/com/hello包下編寫如下HelloWorld類:

package hello
public class HelloWorld {
    public static void main(String[] args) {
         System.out.println("HelloWorld : hello world");
    }
}

在類所在的目錄下編譯運行:
命令行切換到E:test/com
編譯 javac hello/HelloWorld.java
運行時要返回包名所在目錄(即E:test/com)
運行 java hello/HelloWorld(或hello.HelloWorld,親試,兩者都可以)
結果 HelloWorld : hello world
未配置環境變量情況下:
編譯 “C:\Program Files\Java\jdk1.8.0_45\bin\javac” hello/HelloWorld.java
運行 java hello/HelloWorld
結果 HelloWorld : hello world

引用其他類的helloWorld的編譯運行

在同一個包下,引用沒有包名類
在E:test/com/hello包下編寫如下HelloWorld類:

public class Hello {
    public void hello() {
         System.out.println("HelloWorld : hello world");
    }
}

在E:test/com/hello包下編寫如下HelloWorld類:

public class HelloWorld {
    public static void main(String[] args) {
         Hello hello = new Hello();
         hello.hello();
    }
}

在類所在的目錄下編譯運行:
命令行切換到E:test/com/hello
可以直接編譯運行類,會自動編譯引用類
不可以直接運行,運行前必須先編譯。
編譯 javac HelloWorld.java
運行 java HelloWorld
結果 HelloWorld : hello world

引用有包名的helloWorld類的編譯運行

在E:test/other/hello包下編寫如下HelloWorld類:

package hello;
public class Hello {
    public void hello() {
         System.out.println("HelloWorld : hello world");
    }
}

在E:test/com/helloworld包下編寫如下HelloWorld類:

package helloworld;
import hello.Hello;
public class HelloWorld {
    public static void main(String[] args) {
         Hello hello = new Hello();
         hello.hello();
    }
}

切換到包的上級目錄,E:test/com
配置環境變量情況下:
編譯 javac -classpath ../other; helloworld/HelloWorld.java
如果在其他盤比如D:home/hello/Hello.java則
編譯 javac -classpath D:home/; helloworld/HelloWorld.java
運行同樣
運行 java -classpath ../other; helloworld/HelloWorld
結果 HelloWorld : hello world
未配置環境變量情況下:
編譯 “C:\Program Files\Java\jdk1.8.0_45\bin\javac” helloworld/helloWorld.java
運行 java helloworld/HelloWorld
結果 HelloWorld : hello world

引用在jar包中的helloWorld類的編譯運行

在E:test/com/hello包下編寫如下HelloWorld類:

package hello;
public class Hello {
    public void hello() {
         System.out.println("HelloWorld : hello world");
    }
}

把包及包中的類打成jar包Hello.jar,放在任意目錄下,這裏放在E:test/com下
在E:test/com/helloworld包下編寫如下HelloWorld類:

package helloworld;
import hello.Hello;
public class HelloWorld {
    public static void main(String[] args) {
         Hello hello = new Hello();
         hello.hello();
    }
}

切換到包的上級目錄,E:test/com
配置環境變量情況下:
編譯 javac -classpath Hello.jar; helloworld/HelloWorld.java
運行 java -classpath Hello.jar; helloworld.HelloWorld(運行時classpath最後要有分號)
結果 HelloWorld : hello world

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章