第1章 Java程序設計概述
1.1 Java語言簡介
1.1.1 程序與程序設計語言
20世紀30年代中期,美籍匈牙利科學家馮·諾依曼提出了存儲程序與程序控制的計算機基本原理,奠定了現代計算機技術的基礎。存儲程序是指事先把程序及運行中所需的數據輸入并存儲在計算機的內存中。程序控制是指計算機運行時自動地逐一取出程序中的一條條指令,加以分析,并執行規定的操作。程序是什么?一般所說的程序,如運動會的程序、音樂會的程序等,是指事情安排的先后次序。為了使計算機能完成某一任務,人們預先把動作步驟用一系列指令表達出來,這個指令序列就稱為計算機程序。
指令是指示計算機執行某種操作的命令,計算機的指令系統是一臺計算機所能執行的各種不同類型指令的集合,反映了計算機的基本功能。其中,一條指令對應一個最基本的操作,如實現一個加法運算或實現一個數據的傳送操作。雖然指令系統中指令的個數有限,每個指令所能完成的功能也只是非常基本的操作,但一系列指令的組合卻能完成許多很復雜的功能,這也正是計算機的奇妙之處。
程序是計算機的靈魂,沒有程序,計算機可以說是一堆廢物。計算機首先要求人們在程序設計上付出大量的創造性勞動,然后才能享受它提供的服務。為計算機編制程序是一項具有挑戰性和創造性的工作,計算機問世的70多年來,人們一直在研究各種各樣的程序,使計算機完成各種各樣的任務。
人類的自然語言是人與人交流的工具,程序設計語言包涵向計算機描述計算過程所需的詞法和語法規則,它的主要用途是給計算機編寫工作順序,編寫程序的過程就稱為“程序設計”。從計算機問世至今,人們一直在為研制更好的程序設計語言而努力著,程序設計語言的數量在不斷增多,目前已問世的程序設計語言非常多,但這其中只有極少數得到了人們的廣泛認可。程序設計語言在發展過程中經歷了由低級到高級的過程,一般分為機器語言、匯編語言和高級語言。
1.機器語言
機器語言是最原始的程序設計語言。機器語言提供了一組二進制形式的機器指令,每個機器指令能讓計算機完成一個基本的操作,機器指令及其含義是由計算機硬件的設計者定義的。用機器語言編寫的程序,可以被計算機直接識別和執行。由于不同類型計算機系統的機器語言一般有所不同,所以一種機器編寫的程序不能直接在另一種機器上運行。
用機器語言編寫程序非常枯燥和煩瑣,要記住每條指令的二進制代碼與含義非常困難,要閱讀和理解機器語言程序同樣非常困難。
2.匯編語言
匯編語言用符號表示機器指令的運算符與運算對象,例如,用“ADD”代替“1010”表示加法操作,用“MOV”代替“0100”表示數據傳送。用匯編語言編寫的程序需要經過一個專門的翻譯程序的處理,將其中的匯編語言指令逐條翻譯成相應的機器指令后才能執行。雖然匯編語言一定程度上克服了機器語言難以閱讀和記憶的缺點,但對大多數用戶來說,理解和使用仍然是很困難的。
3.高級語言
匯編語言和機器語言都屬于低級語言,其缺點是依賴于機器,可移植性、可讀性、可維護性差。
高級語言與人們所習慣的自然語言、數學語言比較接近,與低級語言相比,具有自然直觀、易學易用等優點。目前比較流行的高級語言有:Java、C、C++、Python、PHP等,這些語言具有各自不同的特色、側重點和適用領域,存在一定的差異。不過,高級語言本質上是相通的,掌握了一門經典語言之后,再學習其他語言會非常容易。
用高級語言編寫的程序不能直接被計算機執行。每種高級語言都有自己的語言處理程序,語言處理程序的功能是將用高級語言編寫的程序轉換成計算機能直接執行的機器語言程序。轉換方式有兩種:解釋方式和編譯方式。在解釋方式下,解釋程序逐條地讀取源程序語句,將語句解釋成機器指令并提交給計算機硬件執行。這類似于新聞發布會中的翻譯,演講者講一句,翻譯者翻譯一句。編譯方式下,語言處理程序將源程序文件翻譯成計算機系統可以直接執行的機器指令程序文件。
目前比較流行的程序設計語言中,C語言采用編譯方式,Basic語言采用解釋方式。Java語言是一種比較特殊的高級語言,它采用先編譯、再解釋的執行方式。也就是先把Java語言的源程序編譯成字節碼程序,然后在運行時由Java解釋器對字節碼程序進行解釋執行。
1.1.2 Java語言的發展
Java語言的前身是Oak語言,由Sun公司的一個研究小組開發完成,其研制的初衷是希望用Oak開發的應用程序可以在智能家電上跨平臺運行。盡管Oak是一種跨平臺、精巧而安全的語言,但由于智能家電的發展沒有預想得那么快,而Sun公司又在投標一個交互式電視大項目時敗北,所以Oak語言舉步維艱,幾乎走向末路。
1995年開始,互聯網的蓬勃發展給Oak帶來了新的機遇。Internet上的計算機硬件和操作系統往往種類多樣,例如,Sun工作站的硬件是SPARC體系,操作系統是UNIX,而PC機的硬件是Intel體系,操作系統是Windows或Linux。Internet上迫切需要一種跨平臺的編程語言,使程序在網絡中的各種計算機上能夠正常運行。考慮到Oak具有跨平臺的特征,Sun公司將Oak語言的應用背景轉向網絡市場,將Oak更名為Java。
1996年1月,Sun公司發布了Java的第一個開發工具包(JDK 1.0),這是Java發展歷程中的重要里程碑,標志著Java成為了一種獨立的開發工具。9月,約8.3萬個網頁應用了Java技術來制作。
后來,Sun公司發布了第二代Java平臺(簡稱Java2)的3個版本:J2ME(Java2 Micro Edition,Java2平臺的微型版),應用于移動、無線及有限資源的環境;J2SE(Java 2 Standard Edition,Java 2平臺的標準版),應用于桌面環境;J2EE(Java 2Enterprise Edition,Java 2平臺的企業版),應用于基于Java的應用服務器。Java2平臺的發布,標志著Java的應用開始普及。2005年6月,J2EE、J2SE和J2ME分別更名為Java EE,Java SE和Java ME。2009年4月,甲骨文公司通過收購Sun公司獲得了Java的版權。2014年,甲骨文公司發布了Java8。
由于符合Internet時代的發展要求,Java語言獲得了巨大的成功,已經成為軟件開發領域內最流行的開發語言之一,近幾年,市場對Java程序開發人才的需求一直旺盛。TIOBE編程語言排行榜是反映程序設計語言當前流行程度的一個指標,該排行榜每月更新一次。在該榜單上,Java語言多年來大多位于第一名,如表1-1所示。
表1-1 程序設計語言市場占有率(2018年8月)

1.1.3 Java語言的特點
Java是一種面向對象的程序設計語言。總體上說,Java語言具有簡單易學、安全性、平臺無關性、多線程機制等特點。
Java語言相對簡單易學。Java的語法和C++非常相似,但是它摒棄了C++中很多低級、困難、容易混淆、容易出錯或不經常使用的功能。例如,運算符重載、指針運算、程序的預處理、結構體、多重繼承,與經典的程序設計語言C++相比,Java更加簡單易學。
Java語言具有較好的安全性。一方面,指針和釋放內存等功能被Java摒棄,從而避免了非法內存操作的可能性;另一方面,Java程序在執行過程中會經過多次監測。首先,必須經過字節碼校驗器的檢查,然后,Java解釋器將決定程序中類的內存布局,隨后,Java類裝載器負責把來自網絡的類裝載到單獨的內存區域中,避免程序之間相互干擾。此外,用戶還可以限制來自網絡的類對本地文件系統的訪問。
平臺無關性是Java語言的最重要的特性。所謂平臺,是指程序運行的硬件和軟件環境。一般的高級語言程序,如果要在不同的平臺上運行,需要編譯成不同的可執行代碼。而Java語言允許編程者一次性編寫程序代碼,并可以在不同的平臺上運行。從IBM的大型機到Sun公司的UNIX服務器,再到Windows的PC,甚至在移動電話和嵌入式系統中,Java程序都能運行,且不需要針對每個計算機硬件和操作系統配置的不同而改動程序代碼。
Java虛擬機(Java Virtual Machine,JVM)是實現平臺無關性的關鍵,是由Java系統提供的一個軟件,其任務是執行Java程序。編譯系統先對Java源程序進行編譯處理,生成一種與平臺無關的字節碼程序(也就是.class文件)。這種字節碼程序本身并不能直接在計算機系統上運行,而必須通過JVM來解釋執行。因此,一般認為Java語言既不是純粹的編譯型語言,也不是純粹的解釋型語言。
目前,各種類型的計算機系統基本都有各自對應的Java虛擬機,負責將Java字節碼程序轉換為對應平臺計算機的機器碼,從而可以執行。正是Java虛擬機,使Java程序在一次編譯之后,便能在不同硬件和操作系統平臺上執行。它之所以稱為虛擬機,是因為并沒有某個計算機系統可以直接執行Java程序,而是依賴Java虛擬機這樣一個軟件,將計算機變成一個可以執行Java程序的虛擬計算機。
高級程序設計語言經歷了從面向過程到面向對象的發展。面向對象技術較好地解決了面向過程的軟件開發中出現的種種問題,比原有的面向過程的語言有更好的可維護性、可重用性和可擴展性,有利于提高程序的開發效率。C++從C發展而來,具備了面向對象的特征,也保留著對C的兼容。Java是一種較為純粹面向對象程序設計語言。
- Puppet 4 Essentials(Second Edition)
- Objective-C應用開發全程實錄
- Mastering Objectoriented Python
- 騰訊iOS測試實踐
- 簡單高效LATEX
- CentOS 7 Linux Server Cookbook(Second Edition)
- 網店設計看這本就夠了
- JavaScript by Example
- 基于Swift語言的iOS App 商業實戰教程
- AutoCAD VBA參數化繪圖程序開發與實戰編碼
- Linux操作系統基礎案例教程
- 運用后端技術處理業務邏輯(藍橋杯軟件大賽培訓教材-Java方向)
- 深度學習:Java語言實現
- Learning Modular Java Programming
- Processing創意編程指南