javaSE 基礎筆記之java概述


第一章  Java概述

學習目標:

²        理解 Java 是什么

²        了解 Java 能干什么

²        理解 Java 有什么

²        了解 Java 的歷史、現狀和特點

²        理解 Java 從代碼到運行的過程

²        理解  Java 虛擬機的功能

²        理解垃圾收集是如何進行的

²        理解 Java 代碼安全性

²        掌握 Java 開發環境配置

²        編寫、編譯並運行簡單的 Java 程序

一:Java 是什么 


                                           

通常我們認為,Java 是:

Ø         一種計算機編程語言

Ø         一種軟件開發平台

Ø         一種軟件運行平台

Ø         一種軟件部署環境

什么意思呢,分別解釋一下。

 

1Java是一種計算機編程語言 

                                                                

  1.1:語言                                                                     

    要准確地給語言下一個定義很困難,對我們來說也沒有必要,但是大家都知道漢語、英

語等是語言。 語言是用來干什么的呢?很明顯語言是用來交流的, 比如大家現在看這些文字,

其實就是我們通過這些文字在交流。

 

  1.2:計算機編程                                                                     

    所謂計算機編程就是:把我們的要求和想法,按照能夠讓計算機看懂的規則和約定,編

寫出來的過程,就是編程。編程的結果就是一些計算機能夠看懂並能夠執行和處理的東西,

我們把它叫做軟件或者程序。事實上,程序就是我們對計算機發出的命令集(指令集)

 

   1.3Java是一種計算機編程語言                                                             

    我們說Java 是一種計算機編程語言,首先是說:Java 是一種語言,也就是Java 是用來

交流的,那么用來誰和誰交流呢?很明顯就是人和計算機交流了,換句話說把我們的要求和

想法用 Java 表達出來,那么計算機能看懂,就能夠按照我們要求運行,而這個過程就是我

們說的使用Java 編程,所以我們講Java 是一種計算機編程語言。

為了讓計算機看懂,Java 會有一系列的規則和約定,這些就是Java 的語法。

 

2Java是一種軟件開發平台                                                       

    2.1:什么是軟件開發                                                                     

    可以簡單地理解為:編程的結果是軟件或者程序,而編程的過程就是軟件開發。軟件開

發的基本步驟包括:需求分析、概要設計、詳細設計、編碼、測試、維護等階段。

 

    2.2:什么是開發平台                                                                    

    在軟件開發的過程中, 我們需要很多的工具來輔助我們的工作,不可能什么都從頭自己

做。我們把編程的環境和相應的輔助工具統稱為開發環境,開發平台就是用來提供這個開發

環境的。

 

    2.3Java是一種開發平台                                                                   

      Java 不單純是一個編程的語言,它自身提供了一系列開發 Java 所需要的環境和工具,

來進行編譯、解釋、文檔生成、打包等,比如:javac.exejava.exe 等等,這些我們后面會

講到,現在不明白也沒有關系。所以我們講Java 是一個開發平台

 

 

     3Java是一種軟件運行平台                                                           

     3.1:什么是軟件的運行平台                                                          

    如同我們需要陽光、空氣、水和食物才能正常存活一樣,軟件最終要能夠運行,也需要

一系列的外部環境,來為軟件的運行提供支持,而提供這些支持的就是運行平台。

 

     3.2Java是一種運行平台                                                            

     Java 本身提供 Java 軟件所需要的運行環境,Java 應用可運行在安裝了 JRE(Java

Runtime Environment)的機器上,所以我們說 Java是一個運行平台。

JREJava Runtime EnvironmentJava運行環境。

 

4Java是一種軟件部署環境                                                       

     4.1:什么是軟件的部署                                                         

     簡單地講,部署就是安裝,就是把軟件放置到相應的地方,並且進行相應的配置(一般

稱作部署描述) ,讓軟件能夠正常運行起來。

 

     4.2Java是一種軟件部署環境                                                        

     Java 本身是一個開發的平台, 開發后的Java 程序也是運行在Java 平台上的。 也就是說,

開發后的 Java 程序也是部署在Java 平台上的,這個尤其在后面學習JavaEEJava 的企業版)

的時候,體現更為明顯。

 

二:Java 能干什么  


                                          

   Java 能做的事情很多,涉及到編程領域的各個方面。

1:桌面級應用:尤其是需要跨平台的桌面級應用程序。

先解釋一下桌面級應用:簡單的說就是主要功能都在我們本機上運行的程序,比如

wordexcel等運行在本機上的應用就屬於桌面應用。

 

2:企業級應用

    先解釋一下企業級應用: 簡單的說就是大規模的應用,一般使用人數較多, 數據量較大,

對系統的穩定性、安全性、可擴展性和可裝配性等都有比較高的要求。

這是目前 Java 應用最廣泛的一個領域,幾乎一枝獨秀。包括各種行業應用,企業信息

化,也包括電子政務等,領域涉及:辦公自動化OA,客戶關系管理 CRM,人力資源 HR

企業資源計划 ERP、知識管理 KM、供應鏈管理 SCM、企業設備管理系統 EAM、產品生命

周期管理 PLM、面向服務體系架構SOA、商業智能BI、項目管理 PM、營銷管理、流程管

WorkFlow、財務管理……等等幾乎所有你能想到的應用。

 

3:嵌入式設備及消費類電子產品

    包括無線手持設備、智能卡、通信終端、醫療設備、信息家電(如數字電視、機頂盒、

電冰箱) 、汽車電子設備等都是近年以來熱門的 Java 應用領域,尤其是手機上的 Java 應用

程序和Java 游戲,更是普及。

 

4:除了上面提到的,Java還有很多功能:如進行數學運算、顯示圖形界面、進行網絡操作、

進行數據庫操作、進行文件的操作等等。

 

三:Java 有什么     


 

                                    

        Java 體系比較龐雜,功能繁多,這也導致很多人在自學 Java 的時候總是感覺無法建立

全面的知識體系, 無法從整體上把握Java 的原因。 在這里我們先簡單了解一下Java 的版本。

具體的Java 體系知識結構,將在后面詳細講述。

Java 分成三種版本,分別是Java 標准版(JavaSE)Java 微縮版(JavaME)Java 企業版(JavaEE)

每一種版本都有自己的功能和應用方向。

1Java標准版: JavaSE(Java Standard Edition                                                  

     JavaSE(Java  Standard  Edition) Sun公司針對桌面開發以及低端商務計算解決方案而開

發的版本,例如:我們平常熟悉的Application 桌面應用程序。這個版本是個基礎,它也是

我們平常開發和使用最多的技術,Java 的主要的技術將在這個版本中體現。本書主要講的

就是JavaSE

2Java微縮版:JavaME(Java Micro Edition                                    

    JavaME(Java Micro Edition) 是對標准版JavaSE 進行功能縮減后的版本,於1999 6

Sun Microsystems第一次推向Java團體。它是一項能更好滿足 Java開發人員不同需求

的廣泛倡議的一部分。Sun Microsystems JavaME 定義為“一種以廣泛的消費性產品為目標

的高度優化的Java 運行時環境,包括尋呼機、移動電話、可視電話、數字機頂盒和汽車導

航系統。

    JavaME 是致力於消費產品和嵌入式設備的開發人員的最佳選擇。盡管早期人們對它看好而

Java 開發人員團體中的熱衷人士也不少,然而,JavaME 最近才開始從其影響更大的同屬產

JavaEEJavaSE 的陰影中走出其不成熟期。

    JavaME在開發面向內存有限的移動終端(例如尋呼機、 移動電話)的應用時,顯得尤其實用。

因為它是建立在操作系統之上的,使得應用的開發無須考慮太多特殊的硬件配置類型或操作

系統。因此,開發商也無須為不同的終端建立特殊的應用,制造商也只需要簡單地使它們的

操作平台可以支持JavaME 便可。

3Java企業版:JavaEEJava Enterprise Edition

     JavaEE(Java Enterprise Edition)是一種利用 Java 平台來簡化企業解決方案的開發、部

署和管理相關的復雜問題的體系結構。JavaEE技術的基礎就是核心 Java平台或 Java平台的標

准版,JavaEE 不僅鞏固了標准版中的許多優點,例如“編寫一次、隨處運行”的特性、方便存

取數據庫的 JDBC APICORBA 技術以及能夠在 Internet 應用中保護數據的安全模式等等,

同時還提供了對EJB(Enterprise  Java  Beans) Java  Servlets  API JSP(Java  Server  Pages)

以及XML技術的全面支持。其最終目的就是成為一個能夠使企業開發者大幅縮短投放市場時

間的體系結構。

    JavaEE體系結構提供中間層集成框架來滿足無需太多費用而又需要高可用性、高可靠性以

及可擴展性的應用的需求。通過提供統一的開發平台,JavaEE 降低了開發多層應用的費用和復

雜性,同時提供對現有應用程序集成強有力支持,完全支持 Enterprise Java Beans,有良

好的向導支持打包和部署應用,添加了目錄支持,增強了安全機制,提高了性能。

JavaEE 是對標准版進行功能擴展,提供一系列功能,用來解決進行企業應用開發中所面臨

的復雜的問題。具體的我們會放到后面JavaEE 的課程去講。

4:三個版本之間的關系

  JavaEE(JavaEE) 幾乎完全包含JavaSE 的功能,然后在JavaSE 的基礎上添加了很多新的功能。

  JavaME(JavaME)主要是JavaSE的功能子集,然后再加上一部分額外添加的功能。

如下圖所示:

 

 

      JavaAPI類庫之中有一組所謂的核心類(CoreClass,即 java.*),在核心類之外還有

所謂的擴充類(Extended  Class,即javax.*)。根據對這兩種類的支持程度,進而區分出幾

種不同的Java 版本。

    我們必須以Java Standard Edition(JavaSE)作為基准,這個版本做了所有 Java標准規格

之中所定義的核心類,也支持所有的 Java基本類。JavaSE定位在客戶端程序的應用上。

JavaSE 往外延伸,其外面為 Java Enterprise Edition(JavaEE),此版本除了支持所有的

標准核心類外,而且還增加了許多支持企業內部使用的擴充類,支持 ServletJSP

javax.servlet.* 類、支持 Enterprise Java Bean javax.ejb.* 類。當然,JavaEE 必定支

持所有的Java 基本類。JavaEE定位在服務器端(server-side)程序的應用上。

   從JavaSE向內看,是Java  Micro  Edition(JavaME),它所支持的只有核心類的子集合,在JavaME

CLDC的規格之中,只支持java.lang.* java.io.* 、以及 java.util.* 這些類。此版本

也增加了一些支持“微小裝置”的擴充類,如 javax.microedition.io.* 類。然而,此版

本並不支持所有的 Java 基本類,就標准的 JMECLDC 也就是能在 PalmOS 上執行的

KVM(KVirtualMachine)來說,它就不支持屬於浮點數(floatdouble) Java 基本類。JavaME

定位在嵌入式系統的應用上。

    最里層,還有一個JavaSmart  Card版本,原本在Java的文件之中並沒有這樣定義,

但是將它畫在JavaME內部是很合理的。因為 SmartCard版本只支持 java.lang.* 這個核心類,

比起JavaME所支持的核心類更少,但它也有屬於自己的擴充類,如 javacard.*javacardx.*

這些類。 SmartCard版本只支持BooleanByte這兩種Java基本類, 此版本定位在SmartCard

的應用上。

 

四:閑話 Java                                                  

1:Java歷史                                                                     

    在上世紀 90 年代初,sun 公司有一個叫做 Green 的項目,目的是為家用消費電子產品

開發一個分布式代碼系統,這樣就可以對家用電器進行控制,和它們進行信息交流。詹姆

斯·高斯林(James  Gosling)等人基於 C++開發一種新的語言 Oak(Java 的前身)。Oak是一

種用於網絡的精巧而安全的語言。 Sun 公司曾依此投標一個交互式電視項目,但結果是被 SGI

打敗,Sun 打算拋棄 Oak。隨着互聯網的發展,Sun 看到了 Oak 在計算機網絡上的廣闊應用

前景,於是改造Oak,在1995 年5月以“Java”的名稱正式發布,從此 Java走上繁榮之路。 

  當然提到 Java 歷史,不得不提的一個故事就是 Java 的命名。開始“Oak”的命名是以

項目小組辦公室外的樹而得名,但是 Oak 商標被其他公司注冊了,必須另外取一個名字,

傳說有一天,幾位 Java成員組的會員正在討論給這個新的語言取什么名字,當時他們正在

咖啡館喝着Java(爪哇)咖啡,有一個人靈機一動說就叫 Java 怎樣,得到了其他人的贊同,

於是,Java這個名字就這樣傳開了。當然對於傳說,了解一下就好了,不必過於認真。

2:Java大事記                                                                    

JavaEE

JavaSE

JavaME

     作為學習Java 的人士,對Java 歷史上發生的大事件有一個了解是應該的。

JDK(Java Software Develop Kit) :Java 軟件開發工具包。JDK 是 Java 的核心,包

括了Java運行環境,一系列 Java開發工具和 Java基礎的類庫。目前主流的 JDK 是 Sun 公

司發布的JDK,除了Sun之外,還有很多公司和組織都開發了自己的 JDK,例如 IBM公司開

發的JDK,BEA 公司的Jrocket,還有GNU組織開發的JDK 等等。

 

時間                                         事件

1995年5 月23日                         Java 語言誕生

1996年1 月                                第一個JDK—JDK1.0誕生

1997年2 月18日                          JDK1.1發布

1998年12月8日                           Java2 企業平台J2EE發布

1999年6 月                                Sun發布 Java 三個版本:標准版J2SE,企業版 J2EE,微型版J2ME

2004年9 月30日                          JavaSE5.0發布

2006年12 月                              JavaSE6.0發布

 

3:Java特點                                                                     

   簡單地說,Java 具有如下特點:簡單的、面向對象、平台無關、多線程、分布式、安全、高性能、可靠的、解釋型、自動垃圾回收等特點。

   這里只解釋一下平台無關和分布式,其余的在后面會逐步接觸到。

3.1:平台無關

     所謂平台無關指的是:用 Java 寫的程序不用修改就可在不同的軟硬件平台上運行。這

樣就能實現同樣的程序既可以在Windows 下運行,到了 Unix 或者 Linux 環境不用修改就直

接可以運行了。Java主要靠Java虛擬機(JVM)實現平台無關性。

     平台無關性就是一次編寫,到處運行:Write Once, Run Anywhere

 

3.2:分布式

     分布式指的是:軟件由很多個可以獨立執行的模塊組成,這些模塊被分布在多台計算機

上,可以同時運行,對外看起來還是一個整體。也就是說,分布式能夠把多台計算機集合起

來就像一台計算機一樣,從而提供更好的性能。

 

4:Java標准組織——JCP                                                                     

     JCP(Java Community Process) 是一個開放的國際組織,成立於 1995 年,主要職能

是發展和更新 Java 技術規范、參考實現(RI) 、技術兼容包(TCK) 。Java 技術和 JCP 兩者

的原創者都是 SUN計算機公司。組織成員可以提交 JSR(Java Specification Requests) ,

通過討論、認可、審核以后,將進入到下一版本的規范里面。

也就是說JCP 是目前Java技術發展事實上的控制者和領導者。

 

 

五:Java 如何做到讓機器理解我們想要做的東西                  

用一個圖來描述這個過程會比較容易理解:

 

 

1:編寫代碼

   首先把我們想要計算機做的事情,通過Java 表達出來,寫成Java 文件,這個過程就是編寫代碼的過程。如上圖所示的Hello.java 文件。

2:編譯

        寫完Java 代碼后,機器並不認識我們寫的Java 代碼,需要進行編譯成為字節碼,編譯后的文件叫做 class文件。如上圖所示的 Hello.class文件。

3:類裝載 ClassLoader

       類裝載的功能是為執行程序尋找和裝載所需要的類。ClassLoader能夠加強代碼的安全性,主要方式是:把本機上的類和網絡資源類相分離,

 在調入類的時候進行檢查,因而可以限制任何“特洛伊木馬”的應用。

4:字節碼(byte-code)校驗

功能是對class文件的代碼進行校驗,保證代碼的安全性。

Java 軟件代碼在實際運行之前要經過幾次測試。JVM 將代碼輸入一個字節碼校驗器以

測試代碼段格式並進行規則檢查--檢查偽造指針、 違反對象訪問權限或試圖改變對象類型

的非法代碼。

注意----所有源於網絡的類文件都要經過字節碼校驗器

字節碼校驗器對程序代碼進行四遍校驗,這可以保證代碼符合JVM 規范並且不破壞系統

的完整性。如果校驗器在完成四遍校驗后未返回出錯信息,則下列各點可被保證:

- 類符合JVM規范的類文件格式

- 無訪問限制異常

- 代碼未引起操作數棧上溢或下溢

- 所有操作代碼的參數類型將總是正確的

- 無非法數據轉換發生,如將整數轉換為對象引用

- 對象域訪問是合法的

 

5:解釋(Interpreter)

     可是機器也不能認識 class 文件,還需要被解釋器進行解釋,機器才能最終理解我們所要表達的東西。

 

6:運行

     最后由運行環境中的Runtime對代碼進行運行,真正實現我們想要機器完成的工作。

 

7:說明

     由上面的講述,大家看到,Java通過一個編譯階段和一個運行階段,來讓機器最終理解我們想要它完成的工作,並按照我們的要求進行運行。

在這兩個階段中,需要我們去完成的就是編譯階段的工作,也就是說:我們需要把我們

想要機器完成的工作用Java 語言表達出來,寫成Java 源文件,然后把源文件進行編譯,形

成class文件, 最后就可以在Java 運行環境中運行了。 運行階段的工作由Java 平台自身提供,

我們不需要做什么工作。

 

六:Java 技術三大特性                                         

1:虛擬機                                                                         

Java 虛擬機 JVM(Java Virtual Machine)在 Java 編程里面具有非常重要的地位,約

相當於前面學到的Java 運行環境,虛擬機的基本功能如下:

(1) :通過 ClassLoader尋找和裝載 class文件

(2) :解釋字節碼成為指令並執行,提供class文件的運行環境

(3) :進行運行期間垃圾回收

(4) :提供與硬件交互的平台

      Java虛擬機是在真實機器中用軟件模擬實現的一種想象機器。Java虛擬機代碼被存儲

在 .class文件中;每個文件都包含最多一個public類。Java 虛擬機規范為不同的硬件平台

提供了一種編譯Java技術代碼的規范,該規范使Java 軟件獨立於平台,因為編譯是針對作

為虛擬機的“一般機器”而做。這個“一般機器”可用軟件模擬並運行於各種現存的計算機

系統,也可用硬件來實現。編譯器在獲取Java應用程序的源代碼后,將其生成字節碼,它是

為JVM生成的一種機器碼指令。每個Java解釋器,不管它是Java技術開發工具,還是可運行

applets 的Web瀏覽器,都可執行JVM。

JVM為下列各項做出了定義

-  指令集(相當於中央處理器[CPU] )

-  寄存器

-  類文件格式

-  棧

-  垃圾收集堆

-  存儲區

JVM的代碼格式由緊縮有效的字節碼構成。由 JVM 字節碼編寫的程序必須保持適當的類

型約束。大部分類型檢查是在編譯時完成。任何從屬的 Java 技術解釋器必須能夠運行任何

含有類文件的程序,這些類文件應符合Java 虛擬機規范中所指定的類文件格式。

 

1.1:虛擬機是Java平台無關的保障

正是因為有虛擬機這個中間層, Java 才能夠實現與平台無關。虛擬機就好比是一個Java

運行的基本平台,所有的Java 程序都運行在虛擬機上,如下圖所示:

 

2:垃圾回收                                                                      

2.1:什么是垃圾

在程序運行的過程中, 存在被分配了的內存塊不再被需要的情況,那么這些內存塊對程

序來講就是垃圾。

產生了垃圾, 自然就需要清理這些垃圾,更為重要的是需要把這些垃圾所占用的內存資

源,回收回來,加以再利用,從而節省資源,提高系統性能。

 

2.2:垃圾回收

-  不再需要的已分配內存應取消分配(釋放內存)

-  在其它語言中,取消分配是程序員的責任

-  Java編程語言提供了一種系統級線程以跟蹤內存分配

-  垃圾收集

-  可檢查和釋放不再需要的內存

-  可自動完成上述工作

-  可在JVM實現周期中,產生意想不到的變化

許多編程語言都允許在程序運行時動態分配內存,分配內存的過程由於語言句法不同而

有所變化,但總是要將指針返回到內存的起始位置,當分配內存不再需要時(內存指針已溢

出范圍) ,程序或運行環境應釋放內存。

在C,C++ 或其它語言中,程序員負責釋放內存。有時,這是一件很困難的事情。因為

你並不總是事先知道內存應在何時被釋放。當在系統中沒有能夠被分配的內存時,可導致程

序癱瘓,這種程序被稱作具有內存漏洞。

Java 編程語言解除了程序員釋放內存的責任。它可提供一種系統級線程以跟蹤每一次

內存的分配情況。在 Java 虛擬機的空閑周期,垃圾收集線程檢查並釋放那些可被釋放的內

存。垃圾收集在 Java 技術程序的生命周期中自動進行,它解除了釋放內存的要求,這樣能

夠有效避免內存漏洞和內存泄露(內存泄露就是程序運行期間,所占用的內存一直往上漲,

很容易造成系統資源耗盡而降低性能或崩潰) 。

 

Java 源程序(*.java 文件)

Java 類文件(*.class文件)

javac編譯

平台無關

平台相關

Java虛擬機

被裝載進入虛擬機

Linux  Windows  Unix

解釋執行字節碼文件

 

2.3:提示

(1) :在 Java 里面,垃圾回收是一個自動的系統行為,程序員不能控制垃圾回收的功

能和行為。比如垃圾回收什么時候開始,什么時候結束,還有到底哪些資源需要回收等,都

是程序員不能控制的。

(2) :有一些跟垃圾回收相關的方法,比如:System.gc() , 記住一點,調用這些方法,

僅僅是在通知垃圾回收程序, 至於垃圾回收程序運不運行, 什么時候運行, 都是無法控制的。 

(3) :程序員可以通過設置對象為 null(后面會講到)來標示某個對象不再被需要了,

這只是表示這個對象可以被回收了,並不是馬上被回收。

 

3:代碼安全                                                                     

Java 如何保證編寫的代碼是安全可靠的呢?

(1) :第一關:編寫的代碼首先要被編譯成為 class 文件,如果代碼寫得有問題,編譯期間

就會發現,然后提示有編譯錯誤,無法編譯通過。

(2) :第二關:通過編譯關后,在類裝載的時候,還會進行類裝載檢查,把本機上的類和網

絡資源類相分離,在調入類的時候進行檢查,因而可以限制任何“特洛伊木馬”的應用。

(3) :第三關:類裝載后,在運行前,還會進行字節碼校驗,以判斷你的程序是安全的。

(4) :第四關:如果你的程序在網絡上運行,還有沙箱(Sand Box)的保護,什么是沙箱呢?

就是如果你的程序沒有獲得授權, 只能在沙箱限定的范圍內運行,是不能夠訪問本地資源的,

從而保證安全性。

            如下圖所示:


免責聲明!

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



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