Java技術概覽

Java主要用來幹什麼?

換句話來說就是Java可以用在什麼地方?Java是一種編程語言,能幹的事情當然就是用來寫程序了,這不是廢話嗎?沒錯,但關鍵的問題是寫什麼樣的程序?所以,首先大家需要了解的是都有什麼類型的程序。都有哪些類型呢?這個問題很難說得清楚,因爲分類方式不同,得到的結果也是不一樣的。

從運行機制上來分,可以大致分爲兩種類型:

l           基於桌面的應用軟件

這是大家非常熟知的一種軟件類型,從開始菜單中所看到的絕大部分的軟件,都是屬於桌面應用軟件。特點就是不需要互聯網連接,本機運行,速度快,方便使用硬件資源等。

l           基於網絡的應用軟件

這個網絡可以理解爲互聯網或局域網,這種軟件的典型特點就是它的運行需要服務器和客戶端的支持。我們打開瀏覽器(客戶端),訪問網站(服務器),能夠看到各種信息,做各種各樣的工作,就是非常典型的互聯網應用。軟件的絕大部分功能運行在服務器端,客戶端只負責與用戶打交道,獲取用戶的輸入,將用戶的輸入傳遞到服務器,服務器處理用戶的輸入,完成之後,將處理結果返回到客戶端,客戶端負責把處理結果呈現出來。

軟件的分類實在是太多了,比如硬件運行需要硬件的驅動程序,這種跟硬件打交道的程序一般用C語言來編寫。我們在開始菜單中看到的各式各樣的桌面應用軟件則大部分是由C++/VB/Dephi等語言來編寫的。

在基於網絡的應用軟件中,最常見的應用就是基於Web的應用。大家經常使用QQ軟件,你怎麼用的呀?首先下載QQ軟件,然後安裝,然後就可以跟別的QQ用戶聊天了!它也是一種網絡應用,但不是基於Web的應用。所謂基於Web的應用,一般來說客戶端就是瀏覽器,通過瀏覽器來訪問的應用軟件稱爲Web應用。當然,騰訊公司已經推出了基於WebQQ軟件,大家不妨也可以體驗一下,只要打開瀏覽器,訪問相應的網址,你用瀏覽器也可以上QQ了!體驗的結果告訴我們,這種方式非常方便,我們無需下載任何QQ軟件到本機,也無需安裝除了瀏覽器之外的其它程序,也避免了因爲軟件升級而需要重新安裝客戶端帶來的麻煩。正是因爲基於Web的應用軟件具備方便部署、統一維護,對於軟件的用戶來說,無需安裝,只要能夠連接到服務器就可以使用等等諸多優點,所以,現在最熱門的軟件開發領域就是基於Web的應用軟件的開發。

 

在基於Web的應用軟件開發領域,又可以分爲兩大類:互聯網領域和企業應用領域

l           互聯網領域:

換句直白的話來說,就是網站開發。主流技術是PHP/ASPJAVA技術,在這個領域不是主流。主要是因爲相對於PHP/ASP的開發簡單/入門容易來說,JAVA顯得太過於笨重,JAVA適合於大型應用,比如對事務處理能力要求較高的電子商務網站。阿里巴巴已經從早期的PHP轉移到了JAVA

l           企業應用領域

在企業應用開發領域,JAVA技術是絕對的主流。企業和政府,這兩大有錢的主,早就已經開始了轟轟烈烈的信息化進程,企業的各種業務,政府部門的各種繁雜事務,都需要藉助於計算機來解放人的勞動,提供工作的效率。給企業和政府開發的各種應用軟件,絕大部分都是用JAVA語言來開發的。

 

由此可知,JAVA語言的熱門方向就是企業級的應用軟件開發。

 

當然,手機的軟件開發方面,JAVA技術也在佔據越來越重要的地位。不管怎麼樣,學習JAVA技術,在很長一段時間裏面,都是會大有用武之地的。

 

Java技術包括什麼東西?

按照應用領域的不同,JAVA平臺技術分爲三大類別:

Java SE – Java標準版,主要用來開發桌面應用軟件,服務器軟件等

Java EE – Java企業版,它以Java SE爲基礎,提供了衆多的技術規範,制定了企業級應用開發的標準

Java ME – Java精簡版,它是對Java SE的精簡,主要用於手機/PDA等設備上的軟件開發,此版本並非簡單的JAVA SE的子集,而是還有一些專門用於這些設備的API(稱爲Profile

 

JavaSEJAVA技術的基礎,我們必須在掌握這個技術的基礎上,纔有可能精通其它方面的技術。JavaEEJAVA技術的核心,也是我們要學習的重點內容。如果有志於手機軟件(比如手機遊戲)方面的開發,那麼掌握Java ME也是非常有必要的,隨着手機的大規模普及,以及對手機功能的開拓,這方面的軟件開發人才需求,也在逐漸增加。

 

Java技術開發軟件,我們需要什麼?

要理解這個問題,我們首先要理解用Java開發軟件的基本過程,不管你開發的是桌面應用軟件還是基於Web的企業應用或者是在手機上運行的JAVA程序,它們都有一些共通的過程,同時也有很大的區別。

 

如果大家用其它語言比如CC++VB開發過程序,那麼對這個過程會比較容易理解。用那些語言來開發程序的時候,通常是:

 

編寫程序代碼 à 將程序代碼編譯爲可執行程序 à 運行程序

 

這裏面關鍵的步驟是“將程序代碼編譯爲可執行程序”。其中的關鍵是理解什麼是“可執行程序”。大家印象中的可執行程序應該就是一個.exe文件(基於Windows操作系統),然後鼠標點擊就可以運行了。這個可執行文件當然就是相對於不同的操作系統和硬件能夠執行的二進制文件了。不同的操作系統和硬件,編譯出來的二進制可執行文件是不一樣的。所以一個在Windows操作系統下面編譯出來的可執行文件拿到Linux操作系統下面是不能運行的(廢話)。

 

所以,對於C/C++這種語言編寫的程序,如果想要在不同的操作系統中運行,就需要拿到不同的操作系統中重新編譯爲可執行程序之後,才能運行。代碼中的某些邏輯在不同的硬件平臺上(與編譯器也有關係)也有可能是不同的。比如C語言中的int類型,在16位機上是2byte,在32位機上是4byte,在64位機上是8byte。所以,要實現C/C++這些語言的真正跨平臺是非常困難的。

 

Java則不同,Java語言在設計之初的目標之一就是實現真正的跨平臺。

 

l           Java程序開發的共通過程是:

 

編寫程序代碼 à 將程序代碼編譯爲.class文件 à 運行Java虛擬機程序讀取.class文件並執行它

 

不同的操作系統或計算機平臺,將會有不同的Java虛擬機程序(JVM – Java Virtual Machine )。SUN公司制定了Java虛擬機標準,同時它也提供了虛擬機程序供大家免費下載。在http://java.sun.com的官方網站上,你可以選擇到不同硬件平臺/操作系統的虛擬機程序。(我們以後的開發和運行都會在大家熟悉的windows平臺上進行。)

 

當然,因爲Java虛擬機實際上是一個標準,所以任何人都可以按照這個標準來編寫虛擬機,比如IBMBEA等大公司就有他們自己的虛擬機。不過在絕大多數情況下,我們將選擇SUN公司自身的JAVA虛擬機。

 

所以:

如果我們要開發JAVA程序,那麼我們需要一個編譯器和一個Java虛擬機,簡單來講,我們需要一個JDK,在初始階段,可以簡單認爲:

Java編譯器+Java虛擬機=JDK

JDK,是Java Development KitJava開發工具包)的縮寫。

 

如果我們只是單純想運行一個Java程序,那麼,我們只需要一個JRE,在初始階段,可以簡單認爲:

JRE=Java虛擬機

JREJava Runtime EnvironmentJava運行環境)的縮寫。

 

所以,也可以簡單認爲:

JDK = JRE + Java編譯器

 

上面的總結只是爲了大家能夠快速理解JAVA技術,忽略了很多其它方面的內容。比如JDK實際上除了Java編譯器和Java虛擬機之外,還包含了Java調試器,Java反編譯器,Java文檔生成器等等很多其它的東西;JRE除了Java虛擬機之外,還包括了用於在瀏覽器中運行Java程序的插件等等。

 

有很多公司或組織爲Java開發了JDK/JRE,比如SUN/IBM/BEA等,現在最流行最常用當然就是SUN公司開發的JDK了,所以,我們後面所有的課程,都將基於SUN公司的JDK來開發。

 

l           JAVA開發基於Web的應用軟件

這是我們學習的重點。即用Java EE開發基於Web的企業應用軟件。這種軟件與普通的JavaSE程序不同,對於普通的JavaSE程序,我們只需一個編譯器編譯代碼,並用一個虛擬機運行.class文件即可。而基於Web的軟件,我們至少還需要一個JavaEE應用服務器和一個瀏覽器。JavaEE應用服務器是一種“看守進程”,啓動之後,將長時間運行(幾天、幾個月、幾年),一旦客戶端通過瀏覽器訪問(HTTP協議)服務器,服務器將運行相關的.class文件來執行各種功能,並將結果返回到瀏覽器(也是通過HTTP協議)顯示。(可演示)

 

SUN公司JDK版本發佈的歷史

l           1995年,JDK1.0

l           1998年,JDK1.2,稱Java2(開始真正流行起來)

l           1999年,Java技術被劃分爲J2SEJ2EEJ2ME

l           2000年,J2SE 1.3

l           2002年,J2SE 1.4

l           2005年,J2SE 1.5正式發佈,同時也公佈了JavaSE 6(此時尚未正式發佈),此後,Java2時代(從JDK1.2JDK1.4稱爲Java2,無Java3Java4的說法)結束,不再叫J2SE/J2EE/J2ME,而是改稱JavaSE/JavaEE/JavaME

l           20061129Java SE 6.0正式發佈

l           ????年,Java SE 7(已發佈測試版,從https://jdk7.dev.java.net/ 可以獲知開發進度和下載)

 

歷史上1.4版本是最廣泛應用的,但歷史有點久遠了;1.6已經是非常穩定的版本,但很多現在企業中常見的應用服務器可能還不支持這個版本;1.5則是已經得到廣泛支持的穩定的版本。所以,我們選擇1.5這個版本。

 

當然,我們無需過多關心JDK的版本,凡是已經發布的版本,都是非常穩定的。而且,對於JAVA語言的核心來說,版本之間的差異並不大,我們基於1.5來學習,同時也需要關注1.41.5之間的差異,以及瞭解1.6中的新特性即可。

 

SayHello – 第一個JAVA程序

下面我們開始開發第一個Java程序,由此開始來了解Java編程。

1、  獲取JDK

a)         可以從java.sun.com網站上下載

2、  安裝JDK

3、  編寫SayHello.java

4、  編譯SayHello.java à SayHello.class

a)         運行javac.exe來編譯:javac SayHello.java

-          'javac' 不是內部或外部命令,也不是可運行的程序

-          或批處理文件。

b)        因爲無法找到javac.exe這個編譯程序

c)        所以可以使用set PATH=”c:/xx/xx/bin”;%PATH% 命令,來把javac.exe程序所在的目錄添加到PATH環境變量中,以便windows操作系統能夠搜索到javac.exe。最好添加在最前面(理由後面再說)。

d)        之所以添加雙引號,是因爲路徑中有空格(如果沒有空格,可以不添加雙引號)

5、  運行SayHello.class

a)         java SayHello 你的姓名 其它信息

b)        用空格來分開不同的參數,放在類名後面的參數,稱爲“程序參數”(Program arguments

 

基本概念:

Java源文件以.java爲擴展名

Java源文件中只能包含一個定義爲publicclass(類)

那個被定義爲public的類的名稱,必需與.java文件的名稱一致(大小寫也必須一致)

Java虛擬機將讀取這個.class文件,並執行其中的指令

 

 

JDK/JRE/JVM/java.exe/javac.exe介紹

我們下載的JDK安裝包包含的內容,如下圖所示:

 

 

在安裝的時候,如果選擇同時安裝JRE,則安裝完成之後,目錄結構如下圖:

 

 

l           private JRE

jdk1.6.0_18目錄下面有一個子目錄jre,這就是private JRE所在的目錄。所謂私有JRE,即JDK中的工具包需要用到的JRE。這個jre目錄名稱是固定的,不能更改。爲什麼JDK中的工具包需要用到JRE呢?比如javac.exe,這是JDK工具包中的編譯器,用來將JAVA源文件編譯爲.class文件,這個編譯器實際上是用Java語言編寫的,它的主要執行類位於Program Files/Java/jdk1.6.0_18/lib/tools.jar下面,這時候javac.exe就會使用私有JRE來運行tools.jar這個包裏面編譯器類,來對JAVA源文件進行編譯。實際上,在JDK安裝目錄下面的bin目錄中的大部分.exe文件,都僅僅只是一個外殼(包裝器)而已。

l           public JRE

公共JRE在安裝過程中可以選擇爲別的位置。它包括各種瀏覽器的插件,以便於能夠在瀏覽器中執行JAVA小應用程序(Applet)。公共JRE在安裝過程中,會把一部分動態鏈接庫(DLL文件)和java.exe拷貝到c:/windows/system32目錄下面。此目的是爲了方便客戶在安裝完JRE之後,無需改動PATH環境變量(搜索路徑)即可運行JAVA程序。那麼,如果我們在安裝完JRE之後(無論是單獨安裝JRE,還是在安裝JDK的同時選擇安裝公共JRE都是一樣的),不作任何環境變量的配置,直接打開控制檯,運行java命令,會如何呢?控制檯將會執行在c:/windows/system32目錄下的java.exe外殼程序,它將會找到公共JRE中的jvm.dll(這纔是真正的JAVA虛擬機)以及其它需要的動態鏈接庫,運行Java虛擬機,Java虛擬機會自動加載公共JRE下面的一個rt.jar包,它是Java核心類庫所在。

c:/windows/system32/目錄下的java.exe程序是如何得知公共JRE所在的位置的呢?這主要通過註冊表。

 

註冊表信息:

 

 

點開Java Development Kit下面的1.6,可以看到有JavaHome的定義(指向jdk1.6.0_18目錄):

 

點開Java Runtim Environment下面的1.6可以看到JavaHome(指向了jre6目錄)

 

由上可知,java.exe通過註冊表(通過CurrentVersion得到當前版本號,通過版本號找到JavaHome)找到了公共JRE所在,也就找到了JAVA虛擬機的所在。

 

所以,我們首先要搞清楚哪個java.exe被執行了,其次要搞清楚java.exe找到了哪個JRE!這兩件事情弄清楚了,很多其它的問題,也就有答案了。

 

client JREserver JRE

執行命令:java –version

 

C:/Documents and Settings/Lee>java -version

java version "1.6.0_18"

Java(TM) SE Runtime Environment (build 1.6.0_18-b07)

Java HotSpot(TM) Client VM (build 16.0-b13, mixed mode, sharing)

 

執行命令:java –server –version

C:/Documents and Settings/Lee>java -server -version

java version "1.6.0_18"

Java(TM) SE Runtime Environment (build 1.6.0_18-b07)

Java HotSpot(TM) Server VM (build 16.0-b13, mixed mode)

 

這兩個命令分別指示java.exe這個外殼程序,加載專用於客戶端桌面應用程序的JVM,或者是加載專用於服務器端的JVM,這就要求JREbin目錄下要有clientserver兩個目錄。兩個不同的JVM,分別針對桌面應用和服務器應用進行了不同的優化,所以,應根據相應情況選擇。

 

不管是client還是server JVM都進行了性能上的優化,這種優化技術稱爲HotSpotHotSpot性能優化技術是從JDK1.3.1版本開始使用的,它是取代之前版本的虛擬機所用的JIT技術的。

關於HotSpot性能優化技術的介紹:

原文:http://java.sun.com/products/hotspot/whitepaper.html

翻譯:http://lifethinker.javaeye.com/blog/215401

 

如果我們在安裝JDK的同時安裝了JRE,那麼,你需要將JDK下面的bin目錄添加到PATH的最前面,否則,你運行java –server –version的時候,將提示錯誤信息(演示一遍)

 

在以後的學習中,我們將逐步深入Java虛擬機的內核,瞭解Java虛擬機的運作機制,掌握面向對象的分析和設計方法。

 

概念總結

Java虛擬機和Java API在一起組成了一個“平臺”,這個組合,除了被稱爲“Java運行時環境(JRE,Java Runtime Environment)”之外,也稱爲Java平臺(從版本1.2開始到版本1.5止,稱爲Java2平臺)。所謂Java API,即Java提供的核心類庫(.class文件)。

 

不同的虛擬機和Java API組合,就成爲不同的Java平臺。

 

Java SE,全稱爲Java Platform Standard EditionJava平臺標準版),主要用於桌面應用開發,它根據不同的計算機硬件及操作系統,提供了多個不同的虛擬機軟件,同時這個版本也包含了標準的Java API

 

Java EE,全稱爲Java Platform Enterprise EditionJava平臺企業版),主要用於企業級應用開發,它以Java SE作爲基礎,使用Java SE一樣的虛擬機,除了包括標準的Java API之外,還提供了一個Java API的超集(專用於Java EE,比如包含一些在標準Java API中沒有的Servlet/EJB等)。

 

Java ME,全稱爲Java Platform Micro EditionJava平臺微型版/個人版),主要用於消費性的電子產品和嵌入式設備(手機/PDA等),這些產品的存儲容量和計算能力均不能跟計算機相比,因此Java ME的虛擬機也是專爲此種電子產品設計,而且包含的Java API要比標準版的Java API少得多。

 

Java平臺中還有一個不太引人注意的領域:Java Card平臺,它主要用於智能卡。即在智能卡上運行Java程序。

 

JDK,全稱爲Java Development Kit,即Java開發工具包

 

JVM,全稱爲Java Virtual Machine,即Java虛擬機,在不同的語境下,它可能指的是:

l           Java虛擬機規範(一個文檔)

l           或一個具體的實現(一個程序)

l           或一個運行中的虛擬機實例(一個進程)

Java虛擬機規範是由SUN制定的,可以從http://java.sun.com/docs/books/jvms/ 下載。任何人都可以根據這個規範來實現自己的虛擬機產品(稱爲一個具體的實現)。比如我們從SUN的網站下載的JDKJRE中就包含了JVM,那就是一個具體的針對某個硬件和操作系統平臺的實現。當運行一個JAVA程序時,我們就需要啓動一個“Java虛擬機實例”來運行它。如果在同一臺計算機中,我們獨立地運行多個JAVA程序,那麼我們就有了多個“運行中的虛擬機實例”(也可以稱爲“JVM進程”),在windows的進程列表中將可以看到多個“java.exe”,這裏的每個JAVA程序,都運行在它自己的JVM進程中。

發佈了34 篇原創文章 · 獲贊 30 · 訪問量 38萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章