Java語言

Java語言

Java是一種簡單的,跨平台的,面向對象的,分散式的,解釋的,健壯的安全的,結構的中立的,可移植的,性能很優異的多執行緒的,動態的語言。當1995年SUN推出Java語言之後,全世界的目光都被這個神奇的語言所吸引。 對Java感興趣,想學習Java不知道怎么學,想從事java工作的人,想認識學習java,可以來群,群號四九一,中間是八九七,最後是一五八,有網際網路Java大牛教學,更有學習資料。

(圖)Java語言Java語言

一 如何學習Java語言

現在很多網上流傳的教程都是很多年前的,遠遠的不適應現在Java新套用的需要,基本上都是一些淘汰貨,很多小夥伴們,從網上找這種破爛,學的還不亦樂乎,也是醉了。綜上所述,我們很多人學不好Java,是因為一開始就選擇錯了,選擇不對,努力白費。為了能夠讓廣大Java學子們在網上學到Java的系統精華知識,通俗易懂的理解這些知識,我們決定現在每天晚上現場直播在網上教大家學習Java,我們的老師,一般的老師不用,我們只讓牛掰的老師講,而你什麼都不需要付出,你只需要來我們這個群里聽就行,開頭的的第一部分是:143.,位於中間的第二部分是:510,處於最後一部分的是:168,學習沒有任何藉口,想強大就要努力,同時這也不是一個單打獨鬥的時代了,大家在這裡一塊學習,打拚出屬於我們的Java新天地。

二 Java新手入門的30個基本概念

在我們學習Java的過程中,掌握其中的基本概念對我們的學習無論是J2SE,J2EE,J2ME都是很重要的,J2SE是Java的基礎,所以有必要對其中的基本概念做以歸納,以便大家在以後的學習過程中更好的理解java的精髓,在此我總結了30條基本的概念。
Java概述:
目前Java主要套用於中間件的開發(middleware)---處理客戶機於伺服器之間的通信技術,早期的實踐證明,Java不適合pc應用程式的開發,其發展逐漸變成在開發手持設備,網際網路信息站,及車載計算機的開發.Java於其他語言所不同的是程式運行時提供了平台的獨立性,稱許可以在windows,solaris,linux其他作業系統上使用完全相同的代碼.Java的語法與C++語法類似,C++/C程式設計師很容易掌握,而且Java是完全的徹底的面向對象的,其中提出了很好的GC(GarbageCollector)垃圾處理機制,防止記憶體溢出。
Java的白皮書為我們提出了Java語言的11個關鍵特質。
(1)Easy:Java的語法比C++的相對簡單,另一個方面就是Java能使軟體在很小的機器上運行,基礎解釋其和類庫的支持的大小約為40kb,增加基本的標準庫和執行緒支持的記憶體需要增加125kb。
(2)分散式:Java帶有很強大的TCP/IP協定族的例程庫,Java應用程式能夠通過URL來穿過網路來訪問遠程對象,由於servlet機制的出現,使Java編程非常的高效,現在許多的大的webserver都支持servlet。
(3)OO:面向對象設計是把重點放在對象及對象的接口上的一個編程技術.其面向對象和C++有很多不同,在與多重繼承的處理及Java的原類模型。
(4)健壯特質:Java採取了一個安全指針模型,能減小重寫記憶體和數據崩潰的可能型。
(5)安全:Java用來設計網路和分布系統,這帶來了新的安全問題,Java可以用來構建防病毒和防攻擊的System.事實證明Java在防毒這一方面做的很優秀。
(6)中立體系結構:Java編譯其生成體系結構中立的目標檔案格式可以在很多處理器上執行,編譯器產生的指令位元組碼(Javabytecode)實現此特性,此位元組碼可以在任何機器上解釋執行。
(7)可移植:Java中對基本數據結構類型的大小和算法都有嚴格的規定所以可移植很好。
(8)多執行緒:Java處理多執行緒的過程很簡單,Java把多執行緒實現交給底下作業系統或執行緒程式完成.所以多執行緒是Java作為伺服器端開發語言的流行原因之一。
(9)Applet和servlet:能夠在網頁上執行的程式叫Applet,需要支持Java的瀏覽器很多,而applet支持動態的網頁,這是很多其他語言所不能做到的。
基本概念:
1.OOP中唯一關係的是對象的接口是什麼,就像計算機的銷售商她不管電源內部結構是怎樣的,他只關係能否給你提供電就行了,也就是只要知道canornot而不是howandwhy.所有的程式是由一定的屬性和行為對象組成的,不同的對象的訪問通過函式調用來完成,對象間所有的交流都是通過方法調用,通過對封裝對象數據,很大限度上提高復用率。
2.OOP中最重要的思想是類,類是模板是藍圖,從類中構造一個對象,即創建了這個類的一個實例(instance)。
3.封裝:就是把數據和行為結合起在一個包中)並對對象使用者隱藏數據的實現過程,一個對象中的數據叫他的實例欄位(instancefield)。
4.通過擴展一個類來獲得一個新類叫繼承(inheritance),而所有的類都是由Object根超類擴展而得,根超類下文會做介紹。
5.對象的3個主要特點
behavior---說明這個對象能做什麼.
state---當對象施加方法時對象的反映.
identity---與其他相似行為對象的區分標誌.
每個對象有唯一的indentity而這3者之間相互影響.
6.類之間的關係:
use-a:依賴關係
has-a:聚合關係
is-a:繼承關係--例:A類繼承了B類,此時A類不僅有了B類的方法,還有其自己的方法.(個性存在於共性中)
7.構造對象使用構造器:構造器的提出,構造器是一種特殊的方法,構造對象並對其初始化。
例:Data類的構造器叫Data
newData()---構造一個新對象,且初始化當前時間.
Datahappyday=newData()---把一個對象賦值給一個變數happyday,從而使該對象能夠多次使用,此處要聲明的使變數與對象變數二者是不同的.new返回的值是一個引用。
構造器特點:構造器可以有0個,一個或多個參數
構造器和類有相同的名字
一個類可以有多個構造器
構造器沒有返回值
構造器總是和new運算符一起使用.
8.重載:當多個方法具有相同的名字而含有不同的參數時,便發生重載.編譯器必須挑選出調用哪個方法。
9.包(package)Java允許把一個或多個類收集在一起成為一組,稱作包,以便於組織任務,標準Java庫分為許多包.java.langjava.utiljava,net等,包是分層次的所有的java包都在java和javax包層次內。
10.繼承思想:允許在已經存在的類的基礎上構建新的類,當你繼承一個已經存在的類時,那么你就復用了這個類的方法和欄位,同時你可以在新類中添加新的方法和欄位。
11.擴展類:擴展類充分體現了is-a的繼承關係.形式為:class(子類)extends(基類)。
12.多態:在java中,對象變數是多態的.而java中不支持多重繼承。
13.動態綁定:調用對象方法的機制。
(1)編譯器檢查對象聲明的類型和方法名。
(2)編譯器檢查方法調用的參數類型。
(3)靜態綁定:若方法類型為priavtestaticfinal編譯器會準確知道該調用哪個方法。
(4)當程式運行並且使用動態綁定來調用一個方法時,那么虛擬機必須調用x所指向的對象的實際類型相匹配的方法版本。
(5)動態綁定:是很重要的特性,它能使程式變得可擴展而不需要重編譯已存代碼。
14.final類:為防止他人從你的類上派生新類,此類是不可擴展的。
15.動態調用比靜態調用花費的時間要長。
16.抽象類:規定一個或多個抽象方法的類本身必須定義為abstract。
例:publicabstractstringgetDescripition
17.Java中的每一個類都是從Object類擴展而來的。
18.object類中的equal和toString方法。
equal用於測試一個對象是否同另一個對象相等。
toString返回一個代表該對象的字元串,幾乎每一個類都會重載該方法,以便返回當前狀態的正確表示.
(toString方法是一個很重要的方法)
19.通用編程:任何類類型的所有值都可以同object類性的變數來代替。
20.數組列表:ArrayList動態數組列表,是一個類庫,定義在java.uitl包中,可自動調節數組的大小。
21.class類object類中的getclass方法返回ckass類型的一個實例,程式啟動時包含在main方法的類會被載入,虛擬機要載入他需要的所有類,每一個載入的類都要載入它需要的類。
22.class類為編寫可動態操縱java代碼的程式提供了強大的功能反射,這項功能為JavaBeans特別有用,使用反射Java能支持VB程式設計師習慣使用的工具。
能夠分析類能力的程式叫反射器,Java中提供此功能的包叫Java.lang.reflect反射機制十分強大.
1.在運行時分析類的能力。
2.在運行時探察類的對象。
3.實現通用數組操縱代碼。
4.提供方法對象。
而此機制主要針對是工具者而不是套用及程式。
反射機制中的最重要的部分是允許你檢查類的結構.用到的API有:
java.lang.reflect.Field返回欄位.
java.reflect.Method返回方法.
java.lang.reflect.Constructor返回參數.
方法指針:java沒有方法指針,把一個方法的地址傳給另一個方法,可以在後面調用它,而接口是更好的解決方案。
23.接口(Interface)說明類該做什麼而不指定如何去做,一個類可以實現一個或多個interface。
24.接口不是一個類,而是對符合接口要求的類的一套規範。
若實現一個接口需要2個步驟:
1.聲明類需要實現的指定接口。
2.提供接口中的所有方法的定義。
聲明一個類實現一個接口需要使用implements關鍵字
classactionBimplementsComparable其actionb需要提供CompareTo方法,接口不是類,不能用new實例化一個接口.
25.一個類只有一個超類,但一個類能實現多個接口。Java中的一個重要接口:Cloneable
26.接口和回調.編程一個常用的模式是回調模式,在這種模式中你可以指定當一個特定時間發生時回調對象上的方法。
例:ActionListener接口監聽.
類似的API有:java.swing.JOptionPane
java.swing.Timer
java.awt.Tookit
27.對象clone:clone方法是object一個保護方法,這意味著你的代碼不能簡單的調用它。
28.內部類:一個內部類的定義是定義在另一個內部的類。
原因是:
1.一個內部類的對象能夠訪問創建它的對象的實現,包括私有數據。
2.對於同一個包中的其他類來說,內部類能夠隱藏起來。
3.匿名內部類可以很方便的定義回調。
4.使用內部類可以非常方便的編寫事件驅動程式。
29.代理類(proxy):
1.指定接口要求所有代碼
2.object類定義的所有的方法(toStringequals)
30.數據類型:Java是強調類型的語言,每個變數都必須先申明它都類型,java中總共有8個基本類型.4種是整型,2種是浮點型,一種是字元型,被用於Unicode編碼中的字元,布爾型。

您有沒有想過電腦程式是怎樣工作的?您是否曾經想學習編寫自己的電腦程式?無論您是想自己寫出遊戲程式的14歲孩子,還是對計算機編程已經好奇了20年的70歲老人,這篇文章都適合您。在本文中,我將通過教您用Java程式設計語言編程使您了解電腦程式的原理。

在講授計算機編程的知識之前,我首先做如下假設:

我假設您目前對計算機編程一無所知。如果您已經懂一些編程知識的話那么本文的開始部分對您來說就會顯得十分簡單。盡可放心跳過這些章節,從新知識處開始學習。
我假設您對計算機的使用有一些了解。具體說就是我假設您已經知道如何編輯、複製、刪除和重命名檔案,以及如何獲取有關您的系統的信息等等。
為簡單起見,我假設您的機器運行Windows95、98、2000、NT或XP作業系統。使用其他作業系統的用戶將這裡學到的概念運用到自己的系統中應該也是比較容易的。
我假設您有學習的欲望。
進行Java編程需要的所有工具都可以輕鬆在網上免費獲得。網上還有大量的Java學習資料,所以學完本文以後您可以很容易去學習更多內容以繼續提高水平。在這裡學習的Java編程在編譯器、開發環境、閱讀材料等等上沒有任何花銷。學會了Java再學習其他的語言就變得容易了,所以這裡是個不錯的起點。

交待完這些事情,我們就準備好了。讓我們開始吧!!!

Java語言

JavaSun公司在1996年推出的一種程式語言。Java 技術是20世紀業界出現的最重要的技術之一,這種與平台無關的語言導致了編程世界的一場革命。目前Java是網際網路上最流行的程式語言之一。它是一種通過解釋方式來執行的語言,語法規則和C++ 類似。

J2EE,即Java 2 Platform,Enterprise Edition (J2EE)是JAVA平台的企業版。

在1998年jdk發表1.2版的時候,Sun公司使用了新名稱Java 2 platform來稱呼,Java譯成中文就是“Java平台”,修改後的jdk稱為J2sdk即Java 2 (platform) softwareDevelping kit,並分為標準版(Standard Edition)又稱j2se,企業版(Enterprise Edition)又稱j2ee,微型版(MicorEdition)又稱j2me.它們有不同的用途,不過最基本的開發包還是j2se。

java是一種面向對象的程式語言,優點是可移植性比較高,最初設計時就是本著一次編寫到處執行設計的。可以開發各種應用程式和遊戲,不過速度沒有c++快,所以一般是不用java來編寫應用程式和電腦遊戲。
java主要分三塊,j2se:java的基礎核心語言。j2me:java的微型模組,專門針對記憶體小,沒有持續電源等小型設備。j2ee:java的企業模組,專門針對企業資料庫伺服器的連線維護。
手機用到的是用j2me所編出來的小程式。

編輯術語

(圖)Java語言Java語言

記住,我假定您不懂編程。下面是一些術語,它們將有助於您的理解:
電腦程式——電腦程式是一組指令,告訴計算機應該怎么做。指令可以告訴計算機將幾個數相加,或比較兩個數字並根據比較的結果作出決定,如此之類。電腦程式只是面向計算機的一組指令而已,正如菜譜是廚師的指令,樂譜是樂師的指令一樣。計算機準確地執行這些指令的同時也就完成了有用的工作,如計算支票簿收支,或者在螢幕上顯示一個遊戲,或運行一個字處理程式。
程式語言——為了能使計算機辨識您給它的指令,這些指令需要以一種計算機能夠理解的語言書寫,即程式語言。有很多計算機程式語言:Fortran、Cobol、Basic、Pascal、C、C++、Java、Perl,正如有很多人類語言一樣。它們都是用不同的方式來表達類似的概念。
編譯器——使用人可以閱讀的程式語言(如Java)寫好程式後,還要用編譯器將其翻譯成計算機可執行的形式。您很可能在您的計算機上見到過EXE檔案。這些EXE檔案就是編譯器輸出的結果。它們是執行檔——從人可讀的程式翻譯而成的機器可讀的程式。
使用Java語言編程就需要一個Java編譯器。下一節將指導您下載並安裝一個編譯器。一旦有了編譯器我們就可以開始學習編程了。下載和安裝過程將會持續幾個小時,大部分時間用來下載幾個很大的檔案。您還需要有大約40兆位元組的空閒磁碟空間(開始前請確定有足夠的空間)。

編輯器

(圖)Java語言Java語言

為了在您的機器上配置起一個Java開發環境——您將使用一個“開發環境”來“開發”(編寫)程式——您需要完成以下這些步驟:
下載一個包含Java開發環境(編譯器和其他工具)的大檔案。
下載一個包含Java文檔的大檔案。
如果您的機器上還沒有安裝WinZip(或可執行相同功能的程式),那么您需要下載一個包含WinZip的大檔案並安裝之。
安裝Java開發環境。
安裝文檔。
調整環境變數。
全面測試。
為了方便,開始前最好在您的臨時目錄中創建一個新目錄用於保存將要下載的檔案。我們將它稱為下載目錄。
步驟1——下載Java開發環境
進入網頁http://java.sun.com/j2se/1.4.2/download.html。點擊“下載J2SE SDK”連結下載SDK(軟體開發工具包)軟體。網頁會顯示一個許可協定。點擊“接受”。選擇您的作業系統,然後將檔案保存到下載目錄中。這是一個巨大的檔案,用電話數據機下載需要好幾個小時。接下來的兩個檔案也很大。

步驟2——下載Java文檔
選擇作業系統後點擊SDK1.4.1文檔的連結。

步驟3——下載並安裝WinZip
如果您的機器上沒有安裝某個的版本的WinZip或其他解壓縮軟體,請到網頁http://www.winzip.com/上下載WinZip的試用版。運行EXE檔案安裝。很快我們將使用它來安裝文檔。

步驟4——安裝開發工具包
運行第一步下載的j2sdk-1_4_1-*.exe檔案。他將自動解壓並安裝開發工具包。

步驟5——安裝文檔
閱讀安裝說明文檔。它會要求您將文檔檔案移至剛才開發工具包的安裝目錄。將文檔解壓縮,檔案就會被安排到適當的位置。

步驟6——調整環境變數
按照此頁的要求,您需要改變路徑變數。最簡單的辦法是打開一個MS-DOS視窗鍵入PATH看看當前的路徑變數是什麼,然後用記事本打開autoexec.bat按要求修改PATH環境變數。

步驟7——測試
現在您應該可以打開另一個MS-DOS視窗並鍵入javac了。如果一切設定妥當,那么您將看到螢幕將輸出兩行文字告訴您如何使用javac。這意味著一切已經準備就緒了。如果您看到“錯誤的命令或檔案名稱”這條訊息,則說明還沒有準備好。請重新閱讀安裝說明檢查哪裡出了問題。確定PATH被正確設定並可用。回頭重新閱讀上面的步驟,問題不解決不要輕易放棄。

現在您已自豪地擁有一台能夠編譯Java程式的機器了。您已經準備好開始編寫軟體了!

順便指出,剛才您解壓縮的內容包括一個demo(演示)目錄,其中包含許多精緻的例子。所有的例子都可以立即執行,所以您不妨找到這個目錄試運行一下其中的某些例子。許多例子都會發聲,所以請打開揚聲器。要運行例子,找到名如example1.html的網頁檔案並使用您常用的瀏覽器打開即可。

程式解析

(圖)Java語言Java語言

那么剛才您到底都做了些什麼呢?首先,您編寫了一個極其簡單的Java程式。該程式是能在網路瀏覽器中運行的Java程式,它和能在您的機器上獨立運行的Java應用程式不同。(Java應用程式稍微複雜一些,而且也不如小程式流行,所以我們從小程式開始。)然後我們使用javac編譯了這個小程式。接著我們創建了一個極其簡單的網頁來“包含”這個小程式。最後我們用appletviewer運行了小程式,當然您也可以方便地使用瀏覽器運行。
程式本身約有10行:

import java.awt.Graphics;public class FirstApplet extends java.applet.Applet{ public void paint(Graphics g) { g.drawLine(0, 0, 200, 200); }} 這大概是您能創建的最簡單的Java小程式了。要完全理解此程式您需要學習很多知識,尤其是在面向對象編程技術的方面。既然我假定您毫無編程經驗,因此我請您將注意力暫時集中到程式中的一行上:

g.drawLine(0, 0, 200, 200);

本程式的工作就是這一行完成的。它畫出對角線。程式的其他部分都是為這行而做的準備工作,我們可以暫時忽略這些準備工作。這行代碼告訴計算機從左上角(0,0)到右下角(200, 200)畫一條線。然後計算機就按照我們的指令畫線。這就是計算機編程的基本要素了!

(還要注意的是,在上面的第五步我們將HTML頁面中小程式的視窗設定為寬200高200。)

本程式中我們調用了一個drawLine方法(或稱函式),並且傳入了四個參數(0, 0, 200, 200)。該行以一個分號結束。分號的作用相當於句子結尾的句號。該行開始處的g.說明我們調用的是特定對象g的方法drawLine(該行再上面一行表明g是屬於Graphics類的對象——我們將在本文後面具體介紹類和類的方法)。

方法就是一條命令,它告訴計算機完成某件事情。本例中的drawLine告訴計算機在指定的兩點(0, 0)和(200, 200)之間畫一條線。您可以認為視窗的原點(0,0)位於左上角,X和Y軸的正向分別指向原點右側和下側。螢幕上一個點(像素)就是數軸上的一個單位。試著用不同數字代替四個參數。改變一兩個參數,保存修改,然後用javac重新編譯並用appletviewer重新運行每次修改的結果。看看您能發現什麼。

除了drawLine還有什麼其他函式呢?可以通過查閱Graphics類的文檔來獲得信息。在您安裝JAVA開發工具包並將文檔檔案解壓縮的過程中,一個名為java.awt.Graphics.html的檔案就被安裝到了您的機器上。此檔案即是Graphics類的說明文檔。這個檔案在我的機器上的具體路徑是D:jdk1.1.7docsapijava.awt.Graphics.html。在您機器上這個路徑很可能會略有不同,但基本相似,這取決於您安裝的具體位置。找到此檔案並打開。檔案的開始部分有一節叫做“方法索引”。它列出了這個類支持的所有方法。drawLine方法是其中之一,但是還有許多別的方法。您可以畫出的內容包括但不限於:

直線
圓弧
橢圓
多邊形
矩形
字元串
字元
請閱讀這些不同方法的說明並加以試驗,從中發現您可以用它們做什麼。例如,試試下面的代碼:

g.drawLine(0, 0, 200, 200);
g.drawRect(0, 0, 200, 200);
g.drawLine(200, 0, 0, 200);

它將畫出一個有兩條對角線的方框(別忘將視窗拉大以查看全圖)。試著畫一些其他圖形。閱讀文檔並嘗試使用setcolor方法改變顏色。例如:

import java.awt.Graphics;
import java.awt.color;
public class FirstApplet extends java.applet.Applet
{
public void paint(Graphics g)
{
g.setColor(Color.red);
g.fillRect(0, 0, 200, 200);
g.setColor(Color.black);
g.drawLine(0, 0, 200, 200);
g.drawLine(200, 0, 0, 200);
}
}

(圖)Java語言Java語言

注意程式的第二行增添了import語句。程式運行的結果如下:

現在您可能在想:“他怎么知道要用Color.red而不是簡單的red,他又是怎么知道要增添第二個import行的呢?”這是通過例子學來的。因為我剛向您展示了一個調用setColor方法的例子,所以您現在知道了要改變顏色就用Color.後接顏色的名字作為setColor方法的參數,並且要在程式開始處添加適當的import語句。如果您查閱setColor的文檔,可以通過一個連結查詢到Color類的信息,其中包括一個所有可用顏色名字的列表,還有關於創建新(無名)的顏色的技巧的說明。您閱讀到這些信息,將它們記在腦子裡,就知道如何用Java改變顏色了。這是作為程式設計師的關鍵:學習技巧並記住為寫下一個程式使用。您或者通過例子學習這些技巧,或者通過閱讀說明文檔,或者通過察看示例代碼(如在demo路徑下的那些)。如果您有一個喜歡發現、學習和記憶的大腦,那么您一定會愛上編程的!

程式缺陷及調試

(圖)Java語言Java語言

學習編程的過程中您會注意到自己總是會犯許多錯誤,或者想當然做出一些錯誤的假定,這都會使程式:1)無法通過編譯,或者2)執行時得出奇怪的結果。程式的這些問題稱為程式缺陷(我們常說的bug),而排除它們的過程稱為調試。任何程式設計師約有一半的時間都花在調試程式上。

您有的是時間和機會製造自己的程式缺陷,但為了使我們對可能出現的各種錯誤更加熟悉一些,現在讓我們人為製造一些程式缺陷。試著刪除您的程式中某行結尾的分號,然後用javac編譯。編譯器會給出一條錯誤訊息。這叫做編譯錯誤。您必須排除所有的編譯錯誤才能執行程式。試著將一個函式的名字寫錯,或者忽略一個“{”不寫,或者刪掉一行import語句等等,這些可以讓您熟悉許多種編譯錯誤訊息。初次看到某種類型的編譯錯誤時您可能很是煩惱,但是經過上面這樣用故意造成的已知錯誤多次試驗以後,您就會熟悉許多常見錯誤了。

程式缺陷還包括執行(或運行時)錯誤,發生於程式可以通過編譯,但是在運行的時候不能給出預想的輸出的情況。例如,下面代碼將繪製一個帶兩條交叉對角線的紅色矩形:

g.setColor(Color.red); g.fillRect(0, 0, 200, 200); g.setColor(Color.black); g.drawLine(0, 0, 200, 200); g.drawLine(200, 0, 0, 200);但是下面的代碼只能產生紅色的矩形(兩條直線被它覆蓋了):

g.setColor(Color.black);
g.drawLine(0, 0, 200, 200);
g.drawLine(200, 0, 0, 200);
g.setColor(Color.red);
g.fillRect(0, 0, 200, 200);

兩段代碼幾乎完全一樣,但是執行後產生的結果卻大不相同。如果您希望看到兩條對角線,則第二段代碼就包含了一個缺陷。

這裡是另一個例子:

g.drawLine(0, 0, 200, 200);
g.drawRect(0, 0, 200, 200);
g.drawLine(200, 0, 0, 200);

上面的代碼生成一個具有黑色輪廓線和兩條對角線的方框。而下面這段代碼只產生一條對角線:

g.drawLine(0, 0, 200, 200);
g.drawRect(0, 0, 200, 200);
g.drawLine(0, 200, 0, 200);

同樣,如果您希望看到兩條對角線,則第二段代碼包含一個缺陷(請查看第二段代碼找出錯誤)。這類錯誤因其隱蔽性可能需要花很多時間才能找到。

您將有充裕的時間練習查找自己程式中的缺陷。程式設計師平均要花大約一半的時間進行程式缺陷的排查。程式發生缺陷錯誤的時候不要灰心——它們是程式設計師編程生涯的一個正常的組成部分。

變數

所有的程式都使用變數臨時存儲各種數據。例如,當程式運行到某個階段時請求用戶輸入一個數字,則您要用一個變數存儲輸入數據供以後使用。
變數必須在程式中被定義(或聲明)後才能使用,您必須為每個變數確定一個具體類型。例如,您可能聲明某變數為保存數字的類型,又聲明另一個變數為保存人名的類型。(因為Java要求在使用變數前顯式定義變數並聲明變數值的類型,所以Java被稱為是一個強類型的語言。有些語言則沒有這些要求。一般說來,在創建大型程式時,強類型有助於減少程式錯誤。)

import java.awt.Graphics;import java.awt.Color;public class FirstApplet extends java.applet.Applet{ public void paint(Graphics g) { int width = 200; int height = 200; g.drawRect(0, 0, width, height); g.drawLine(0, 0, width, height); g.drawLine(width, 0, 0, height); }}這個程式中我們聲明了兩個名為width和height的變數。我們將其類型聲明為int。一個int型的變數可以保存一個整數(如1、2、3等)。我們將兩個變數都初始化為200。我們也完全可以這樣寫:

int width;
width = 200;
int height;
height = 200;

第一種形式只是輸入起來稍快一些。

將變數賦予初值的過程稱為初始化變數。一種常見的程式錯誤是忘記初始化變數。為重現此錯誤,試刪除代碼的初始化部分(“= 200”)然後重新編譯程式觀察後果。您會看到編譯器將發現這個問題。順便指出,這是編譯器的一個非常好的特性。它將為您節省許多時間。

Java支持兩種變數:簡單(初級)變數和類。

int是簡單變數的類型。這種變數可以保存一個數字,此外別無他長。您只要聲明一個int變數,設定它為某個值後使用即可。另一方面,類可以包含多個成員和方法,這些方法能簡化類的使用。一個易於理解的類的好例子就是Rectangle類,讓我們從它開始。

我們一直使用的那個程式有一個局限:他總是假定視窗大小是200乘200像素。為什麼我們不問問視窗“您的尺寸有多大?”,然後據此調整我們的矩形和對角線的大小呢?如果您回頭查看Graphics 類的說明文檔(java.awt.Graphics.html——那個列出了所有可用的繪圖函式的檔案),您會發現其中有一個叫做getClipBounds的函式。點擊此函式名瀏覽它的完整說明。這個函式沒有參數但是會返回一個Rectangle類型的值。返回的矩形包含了繪圖區的寬度和高度。若在此文檔頁面中點擊Rectangle就會被轉到Rectangle類(java.awt.Graphics.html)的文檔頁面。查看頁首的變數索引您會發現這個類包含四個名字分別為x、y、width和height的變數。因此我們將要做的就是用getClipBounds得到代表畫板邊界的矩形,然後從這個矩形中提取寬度和高度數據,將它們保存在前一個例子中創建的width和height變數中,如下所示:

import java.awt.Graphics;
import java.awt.Color;
import java.awt.Rectangle;

public class FirstApplet extends java.applet.Applet
{

public void paint(Graphics g)
{
int width;
int height;
Rectangle r;

r = g.getClipBounds();
width = r.width - 1;
height = r.height - 1;

g.drawRect(0, 0, width, height);
g.drawLine(0, 0, width, height);
g.drawLine(width, 0, 0, height);
}
}

當運行上面程式的時候您會發現矩形和對角線恰好充滿繪圖區域。而且改變視窗大小時矩形和對角線還會自動重畫適應新的視窗大小。這段代碼引入了五個新概念,讓我看一看:

首先,因為我們使用了Rectangle類,所以要在程式的第三行引進 java.awt.Rectangle。
我們在本程式中聲明了三個變數:兩個(width和height)int型的,一個(r)Rectangle 型的。
我們使用了getClipBounds函式獲得繪圖區域的大小。此函式沒有參數所以我們也就不傳入參數(使用“()”),但是它返回一個Rectangle。我們寫下的代碼“r = g.getClipBounds();”其意思是說:“請將返回的矩形賦值給變數 r。”
變數r是Rectangle類型的,它其實包含四個變數:x、y、width和height(通過閱讀Rectangle類的說明文檔可以知道這些變數名)。要訪問它們需使用“.”(點)操作符。因此表達式“r.width”的意思就是“從變數 r 中取出名為width的變數”。這個值被保存到我們的名為width的局部變數中。在此過程中我們減去了一個1。試試不做減法會是什麼結果。再試試減去五會是什麼結果。
最後,我們在繪圖函式中使用了width和height。
學到這裡常常提出的一個問題就是:“我們真有必要聲明width和height變數嗎?”答案是否定的。我們可以在繪圖函式參數的位置直接輸入r.width - 1。創建變數只是為了使程式更容易閱讀,因此這是一個應該養成的好習慣。

Java支持多種簡單變數類型。三種最常見的類型是:

int——整型數值(1、2、3……)
float——十進制小數(如 3.14159)
char——字元值(a、b、c……)
可以用簡單類型進行數學運算。Java能夠識別 +(加)、-(減)、*(乘)、/(除)和幾種其他的運算。這裡有一個在程式中使用這些運算符的例子。假設您要計算一個半徑為3米的圓球的體積。可用下面的代碼完成:

float diameter = 10;
float radius;
float volume;

radius = diameter / 2.0;
volume = 4.0 / 3.0 * 3.14159 * radius * radius * radius;

第一行運算的意義是:“將diameter變數的值除以2.0,結果保存在radius變數中。”可見“=”符號在這裡的意義就是:“將右側計算的結果保存到左側的變數之中。”

重複

(圖)Java語言Java語言

計算機尤其擅長的工作之一就是進行重複的計算或操作。在前面的幾節中我們看到了如何編寫“順序代碼塊”,所以下面我們將討論如何使一個順序代碼塊重複地執行。

例如,我讓您畫出下面的圖形:

不妨先畫出所有的水平線,像這樣:

繪製這些線的一種方法是編寫一個順序代碼塊:

import java.awt.Graphics;public class FirstApplet extends

(圖)Java語言Java語言

java.applet.Applet{ public void paint(Graphics g) { int y; y = 10; g.drawLine(10, y, 210, y); y = y + 25; g.drawLine(10, y, 210, y); y = y + 25; g.drawLine(10, y, 210, y); y = y + 25; g.drawLine(10, y, 210, y); y = y + 25; g.drawLine(10, y, 210, y); y = y + 25; g.drawLine(10, y, 210, y); y = y + 25; g.drawLine(10, y, 210, y); y = y + 25; g.drawLine(10, y, 210, y); y = y + 25; g.drawLine(10, y, 210, y); }}(對於一些新程式設計師來說,“y = y + 25;”這條語句初看起來很奇怪。它的意思是說:“將變數y當前的值加上25,結果仍存回到y。”因此如果在該行執行之前y的值是10,則該行執行後y的值將立即變成35。)

看過以上代碼的多數人會立刻注意到有兩行代碼被一遍遍重複了。在我們這個特例中,重複現象還不是很嚴重。但可以想像如果需要繪製包含上千個行和列的格線時,用這種方法編程將會是多么勞累。解決此問題的辦法就是循環,如下所示:

import java.awt.Graphics;public class FirstApplet extends java.applet.Applet{ public void paint(Graphics g) { int y; y = 10; while (y <= 210) { g.drawLine(10, y, 210, y); y = y + 25; } }}運行程式時您會看到它會繪製九條200像素長的水平線。

while語句是Java中的一種循環語句。該語句告訴Java按照如下方式工作:執行到while語句時,Java查看括弧中的表達式後判斷:“y是否小於等於210?”

如果答案是肯定的,Java將進入用花括弧({})包圍的代碼塊。循環發生在代碼塊的結尾處。當Java執行到結尾的花括弧時就返回到前面的while語句處回答同樣的問題。這種循環過程可能要進行許多次。
如果答案是否定的,Java將跳過用花括弧包圍的代碼塊繼續執行。
因此您可以看到,程式開始運行時y的初值是10。10小於210,所以Java進入花括弧代碼塊,繪製從(10,10)到(210, 10)的直線,將y設為35,然後回溯到while語句。35小於210,所以Java進入花括弧代碼塊,繪製從(10,35)到(210, 35)的直線,將y設為60,然後回溯到while語句。此過程一直重複直到y終於超過了210,然後程式結束。
在程式中加入第二個循環即可完成格線的繪製,如下所示:

import java.awt.Graphics;

public class FirstApplet extends java.applet.Applet
{

public void paint(Graphics g)
{
int x, y;
y = 10;
while (y <= 210)
{
g.drawLine(10, y, 210, y);
y = y + 25;
}
x = 10;
while (x <= 210)
{
g.drawLine(x, 10, x, 210);
x = x + 25;
}
}
}

可見一個while語句包含三部分:

一個初始化步驟,將y設為10。
一個求值步驟,在while語句的括弧中。
while語句的某處會有一個增量步驟,遞增y的值。
Java支持另一種比while語句更為緊湊的方式完成同樣的工作。這就是for語句。如果您有如下的while語句:

y = 10;
while (y <= 210)
{
g.drawLine(10, y, 210, y);
y = y + 25;
}

(圖)Java語言Java語言

那么等價的for語句看起來就是這樣子:

for (y = 10; y <= 210; y = y + 25)
{
g.drawLine(10, y, 210, y);
}

可見for語句的全部工作是將初始化、求值和增量步驟精簡到一個短行之中。它只是縮短了您編寫代碼的長度,僅此而已。

關於循環順便提出下面兩點值得注意的地方:

許多情況下將y初始化為210然後在循環中每次遞減25同樣是很容易的。求值部分的問題將變為:“y是否大於等於10?”您可以選擇兩種方法中的任何一種。多數人覺得用加法比用減法更舒服一些。但您可能有不同的感覺。
增量步驟十分重要。假如您無意間漏寫了循環中“y=y+25;”這行,於是y的值將不會改變——它總是等於10。因此它永遠不會超過210,循環也就會無限地進行下去(直到你關閉計算機或程式視窗時才停止)。這種情況稱為無限循環,是一種常見的編程錯誤。

相關詞條

相關搜尋

熱門詞條

聯絡我們