官术网_书友最值得收藏!

第1章 Java程序設(shè)計概述

1.1 Java語言簡介

1.1.1 程序與程序設(shè)計語言

20世紀(jì)30年代中期,美籍匈牙利科學(xué)家馮·諾依曼提出了存儲程序與程序控制的計算機(jī)基本原理,奠定了現(xiàn)代計算機(jī)技術(shù)的基礎(chǔ)。存儲程序是指事先把程序及運(yùn)行中所需的數(shù)據(jù)輸入并存儲在計算機(jī)的內(nèi)存中。程序控制是指計算機(jī)運(yùn)行時自動地逐一取出程序中的一條條指令,加以分析,并執(zhí)行規(guī)定的操作。程序是什么?一般所說的程序,如運(yùn)動會的程序、音樂會的程序等,是指事情安排的先后次序。為了使計算機(jī)能完成某一任務(wù),人們預(yù)先把動作步驟用一系列指令表達(dá)出來,這個指令序列就稱為計算機(jī)程序。

指令是指示計算機(jī)執(zhí)行某種操作的命令,計算機(jī)的指令系統(tǒng)是一臺計算機(jī)所能執(zhí)行的各種不同類型指令的集合,反映了計算機(jī)的基本功能。其中,一條指令對應(yīng)一個最基本的操作,如實(shí)現(xiàn)一個加法運(yùn)算或?qū)崿F(xiàn)一個數(shù)據(jù)的傳送操作。雖然指令系統(tǒng)中指令的個數(shù)有限,每個指令所能完成的功能也只是非?;镜牟僮鳎幌盗兄噶畹慕M合卻能完成許多很復(fù)雜的功能,這也正是計算機(jī)的奇妙之處。

程序是計算機(jī)的靈魂,沒有程序,計算機(jī)可以說是一堆廢物。計算機(jī)首先要求人們在程序設(shè)計上付出大量的創(chuàng)造性勞動,然后才能享受它提供的服務(wù)。為計算機(jī)編制程序是一項具有挑戰(zhàn)性和創(chuàng)造性的工作,計算機(jī)問世的70多年來,人們一直在研究各種各樣的程序,使計算機(jī)完成各種各樣的任務(wù)。

人類的自然語言是人與人交流的工具,程序設(shè)計語言包涵向計算機(jī)描述計算過程所需的詞法和語法規(guī)則,它的主要用途是給計算機(jī)編寫工作順序,編寫程序的過程就稱為“程序設(shè)計”。從計算機(jī)問世至今,人們一直在為研制更好的程序設(shè)計語言而努力著,程序設(shè)計語言的數(shù)量在不斷增多,目前已問世的程序設(shè)計語言非常多,但這其中只有極少數(shù)得到了人們的廣泛認(rèn)可。程序設(shè)計語言在發(fā)展過程中經(jīng)歷了由低級到高級的過程,一般分為機(jī)器語言、匯編語言和高級語言。

1.機(jī)器語言

機(jī)器語言是最原始的程序設(shè)計語言。機(jī)器語言提供了一組二進(jìn)制形式的機(jī)器指令,每個機(jī)器指令能讓計算機(jī)完成一個基本的操作,機(jī)器指令及其含義是由計算機(jī)硬件的設(shè)計者定義的。用機(jī)器語言編寫的程序,可以被計算機(jī)直接識別和執(zhí)行。由于不同類型計算機(jī)系統(tǒng)的機(jī)器語言一般有所不同,所以一種機(jī)器編寫的程序不能直接在另一種機(jī)器上運(yùn)行。

用機(jī)器語言編寫程序非常枯燥和煩瑣,要記住每條指令的二進(jìn)制代碼與含義非常困難,要閱讀和理解機(jī)器語言程序同樣非常困難。

2.匯編語言

匯編語言用符號表示機(jī)器指令的運(yùn)算符與運(yùn)算對象,例如,用“ADD”代替“1010”表示加法操作,用“MOV”代替“0100”表示數(shù)據(jù)傳送。用匯編語言編寫的程序需要經(jīng)過一個專門的翻譯程序的處理,將其中的匯編語言指令逐條翻譯成相應(yīng)的機(jī)器指令后才能執(zhí)行。雖然匯編語言一定程度上克服了機(jī)器語言難以閱讀和記憶的缺點(diǎn),但對大多數(shù)用戶來說,理解和使用仍然是很困難的。

3.高級語言

匯編語言和機(jī)器語言都屬于低級語言,其缺點(diǎn)是依賴于機(jī)器,可移植性、可讀性、可維護(hù)性差。

高級語言與人們所習(xí)慣的自然語言、數(shù)學(xué)語言比較接近,與低級語言相比,具有自然直觀、易學(xué)易用等優(yōu)點(diǎn)。目前比較流行的高級語言有:Java、C、C++、Python、PHP等,這些語言具有各自不同的特色、側(cè)重點(diǎn)和適用領(lǐng)域,存在一定的差異。不過,高級語言本質(zhì)上是相通的,掌握了一門經(jīng)典語言之后,再學(xué)習(xí)其他語言會非常容易。

用高級語言編寫的程序不能直接被計算機(jī)執(zhí)行。每種高級語言都有自己的語言處理程序,語言處理程序的功能是將用高級語言編寫的程序轉(zhuǎn)換成計算機(jī)能直接執(zhí)行的機(jī)器語言程序。轉(zhuǎn)換方式有兩種:解釋方式和編譯方式。在解釋方式下,解釋程序逐條地讀取源程序語句,將語句解釋成機(jī)器指令并提交給計算機(jī)硬件執(zhí)行。這類似于新聞發(fā)布會中的翻譯,演講者講一句,翻譯者翻譯一句。編譯方式下,語言處理程序?qū)⒃闯绦蛭募g成計算機(jī)系統(tǒng)可以直接執(zhí)行的機(jī)器指令程序文件。

目前比較流行的程序設(shè)計語言中,C語言采用編譯方式,Basic語言采用解釋方式。Java語言是一種比較特殊的高級語言,它采用先編譯、再解釋的執(zhí)行方式。也就是先把Java語言的源程序編譯成字節(jié)碼程序,然后在運(yùn)行時由Java解釋器對字節(jié)碼程序進(jìn)行解釋執(zhí)行。

1.1.2 Java語言的發(fā)展

Java語言的前身是Oak語言,由Sun公司的一個研究小組開發(fā)完成,其研制的初衷是希望用Oak開發(fā)的應(yīng)用程序可以在智能家電上跨平臺運(yùn)行。盡管Oak是一種跨平臺、精巧而安全的語言,但由于智能家電的發(fā)展沒有預(yù)想得那么快,而Sun公司又在投標(biāo)一個交互式電視大項目時敗北,所以O(shè)ak語言舉步維艱,幾乎走向末路。

1995年開始,互聯(lián)網(wǎng)的蓬勃發(fā)展給Oak帶來了新的機(jī)遇。Internet上的計算機(jī)硬件和操作系統(tǒng)往往種類多樣,例如,Sun工作站的硬件是SPARC體系,操作系統(tǒng)是UNIX,而PC機(jī)的硬件是Intel體系,操作系統(tǒng)是Windows或Linux。Internet上迫切需要一種跨平臺的編程語言,使程序在網(wǎng)絡(luò)中的各種計算機(jī)上能夠正常運(yùn)行??紤]到Oak具有跨平臺的特征,Sun公司將Oak語言的應(yīng)用背景轉(zhuǎn)向網(wǎng)絡(luò)市場,將Oak更名為Java。

1996年1月,Sun公司發(fā)布了Java的第一個開發(fā)工具包(JDK 1.0),這是Java發(fā)展歷程中的重要里程碑,標(biāo)志著Java成為了一種獨(dú)立的開發(fā)工具。9月,約8.3萬個網(wǎng)頁應(yīng)用了Java技術(shù)來制作。

后來,Sun公司發(fā)布了第二代Java平臺(簡稱Java2)的3個版本:J2ME(Java2 Micro Edition,Java2平臺的微型版),應(yīng)用于移動、無線及有限資源的環(huán)境;J2SE(Java 2 Standard Edition,Java 2平臺的標(biāo)準(zhǔn)版),應(yīng)用于桌面環(huán)境;J2EE(Java 2Enterprise Edition,Java 2平臺的企業(yè)版),應(yīng)用于基于Java的應(yīng)用服務(wù)器。Java2平臺的發(fā)布,標(biāo)志著Java的應(yīng)用開始普及。2005年6月,J2EE、J2SE和J2ME分別更名為Java EE,Java SE和Java ME。2009年4月,甲骨文公司通過收購Sun公司獲得了Java的版權(quán)。2014年,甲骨文公司發(fā)布了Java8。

由于符合Internet時代的發(fā)展要求,Java語言獲得了巨大的成功,已經(jīng)成為軟件開發(fā)領(lǐng)域內(nèi)最流行的開發(fā)語言之一,近幾年,市場對Java程序開發(fā)人才的需求一直旺盛。TIOBE編程語言排行榜是反映程序設(shè)計語言當(dāng)前流行程度的一個指標(biāo),該排行榜每月更新一次。在該榜單上,Java語言多年來大多位于第一名,如表1-1所示。

表1-1 程序設(shè)計語言市場占有率(2018年8月)

1.1.3 Java語言的特點(diǎn)

Java是一種面向?qū)ο蟮某绦蛟O(shè)計語言??傮w上說,Java語言具有簡單易學(xué)、安全性、平臺無關(guān)性、多線程機(jī)制等特點(diǎn)。

Java語言相對簡單易學(xué)。Java的語法和C++非常相似,但是它摒棄了C++中很多低級、困難、容易混淆、容易出錯或不經(jīng)常使用的功能。例如,運(yùn)算符重載、指針運(yùn)算、程序的預(yù)處理、結(jié)構(gòu)體、多重繼承,與經(jīng)典的程序設(shè)計語言C++相比,Java更加簡單易學(xué)。

Java語言具有較好的安全性。一方面,指針和釋放內(nèi)存等功能被Java摒棄,從而避免了非法內(nèi)存操作的可能性;另一方面,Java程序在執(zhí)行過程中會經(jīng)過多次監(jiān)測。首先,必須經(jīng)過字節(jié)碼校驗(yàn)器的檢查,然后,Java解釋器將決定程序中類的內(nèi)存布局,隨后,Java類裝載器負(fù)責(zé)把來自網(wǎng)絡(luò)的類裝載到單獨(dú)的內(nèi)存區(qū)域中,避免程序之間相互干擾。此外,用戶還可以限制來自網(wǎng)絡(luò)的類對本地文件系統(tǒng)的訪問。

平臺無關(guān)性是Java語言的最重要的特性。所謂平臺,是指程序運(yùn)行的硬件和軟件環(huán)境。一般的高級語言程序,如果要在不同的平臺上運(yùn)行,需要編譯成不同的可執(zhí)行代碼。而Java語言允許編程者一次性編寫程序代碼,并可以在不同的平臺上運(yùn)行。從IBM的大型機(jī)到Sun公司的UNIX服務(wù)器,再到Windows的PC,甚至在移動電話和嵌入式系統(tǒng)中,Java程序都能運(yùn)行,且不需要針對每個計算機(jī)硬件和操作系統(tǒng)配置的不同而改動程序代碼。

Java虛擬機(jī)(Java Virtual Machine,JVM)是實(shí)現(xiàn)平臺無關(guān)性的關(guān)鍵,是由Java系統(tǒng)提供的一個軟件,其任務(wù)是執(zhí)行Java程序。編譯系統(tǒng)先對Java源程序進(jìn)行編譯處理,生成一種與平臺無關(guān)的字節(jié)碼程序(也就是.class文件)。這種字節(jié)碼程序本身并不能直接在計算機(jī)系統(tǒng)上運(yùn)行,而必須通過JVM來解釋執(zhí)行。因此,一般認(rèn)為Java語言既不是純粹的編譯型語言,也不是純粹的解釋型語言。

目前,各種類型的計算機(jī)系統(tǒng)基本都有各自對應(yīng)的Java虛擬機(jī),負(fù)責(zé)將Java字節(jié)碼程序轉(zhuǎn)換為對應(yīng)平臺計算機(jī)的機(jī)器碼,從而可以執(zhí)行。正是Java虛擬機(jī),使Java程序在一次編譯之后,便能在不同硬件和操作系統(tǒng)平臺上執(zhí)行。它之所以稱為虛擬機(jī),是因?yàn)椴]有某個計算機(jī)系統(tǒng)可以直接執(zhí)行Java程序,而是依賴Java虛擬機(jī)這樣一個軟件,將計算機(jī)變成一個可以執(zhí)行Java程序的虛擬計算機(jī)。

高級程序設(shè)計語言經(jīng)歷了從面向過程到面向?qū)ο蟮陌l(fā)展。面向?qū)ο蠹夹g(shù)較好地解決了面向過程的軟件開發(fā)中出現(xiàn)的種種問題,比原有的面向過程的語言有更好的可維護(hù)性、可重用性和可擴(kuò)展性,有利于提高程序的開發(fā)效率。C++從C發(fā)展而來,具備了面向?qū)ο蟮奶卣?,也保留著對C的兼容。Java是一種較為純粹面向?qū)ο蟪绦蛟O(shè)計語言。

主站蜘蛛池模板: 绥棱县| 泰和县| 汝南县| 普安县| 股票| 仙桃市| 当雄县| 新竹县| 大洼县| 濮阳县| 拉孜县| 二手房| 伊春市| 乡宁县| 明光市| 团风县| 禹城市| 渝北区| 新巴尔虎右旗| 秀山| 巴楚县| 句容市| 巴中市| 玉溪市| 温宿县| 上林县| 江西省| 佛冈县| 泾源县| 庆城县| 云龙县| 安陆市| 咸宁市| 宜丰县| 榆树市| 临城县| 敦煌市| 南漳县| 河南省| 瓦房店市| 禄丰县|