Java程序設(shè)計基礎(chǔ)(第2版) 課件 第1、2章 Java簡介、Java語言基礎(chǔ)_第1頁
Java程序設(shè)計基礎(chǔ)(第2版) 課件 第1、2章 Java簡介、Java語言基礎(chǔ)_第2頁
Java程序設(shè)計基礎(chǔ)(第2版) 課件 第1、2章 Java簡介、Java語言基礎(chǔ)_第3頁
Java程序設(shè)計基礎(chǔ)(第2版) 課件 第1、2章 Java簡介、Java語言基礎(chǔ)_第4頁
Java程序設(shè)計基礎(chǔ)(第2版) 課件 第1、2章 Java簡介、Java語言基礎(chǔ)_第5頁
已閱讀5頁,還剩186頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

Java簡介董東計算機與網(wǎng)絡(luò)空間安全學(xué)院1第1章Java簡介1.1面向?qū)ο蟮某绦蛟O(shè)計 1.2開發(fā)環(huán)境 1.3在命令提示符窗口設(shè)計程序 1.4使用jGRASP設(shè)計程序 1.5使用Eclipse設(shè)計程序 1.6Java程序結(jié)構(gòu) 1.7代碼風(fēng)格 1.8注釋2馮?諾伊曼體系結(jié)構(gòu)31.1面向?qū)ο蟮某绦蛟O(shè)計進入九十年代后,計算機的發(fā)展呈現(xiàn)出特征跨平臺網(wǎng)絡(luò)化嵌入式硬件環(huán)境的變化對計算機語言提出了新的要求。比如:能夠運行在各種消費類電子產(chǎn)品上,如手機、平板電腦、洗衣機、空調(diào)、微波爐等。能夠處理多線程;能夠以“面向?qū)ο蟆钡乃季S模式(paradigm)編寫程序,以簡化大規(guī)模復(fù)雜應(yīng)用的開發(fā)。4Java語言設(shè)計理念:編寫一次,到處運行(writeonce,runanywhere)發(fā)展1996年1月,Sun公司發(fā)布了Java的第一個開發(fā)工具箱JDK1.0版本1999年6月,Sun公司發(fā)布了第二代Java平臺(簡稱Java2)2005年6月,Sun公司發(fā)布JavaSE6從此,各種Java版本中不再有“2”:J2SE改為JavaSE;J2EE改為JavaEE;J2ME改為JavaME。2009年,Sun公司被甲骨文(Oracle)公司收購56JavaEE已經(jīng)被轉(zhuǎn)移至Eclipse基金會,并更名為JakartaEE。OpenJDK成為Java標準實現(xiàn)的主要開源參考實現(xiàn)1.1面向?qū)ο蟮某绦蛟O(shè)計面向?qū)ο蟮某绦蛟O(shè)計Object-OrientedProgramming,OOP一種問題求解的范式創(chuàng)建對象,讓對象做些事情某對象p上預(yù)定義了若干功能,稱為“方法”另外一個對象q訪問對象p的功能稱為“方法調(diào)用”或者“消息傳遞”具有相同特征的對象的抽象稱為“類”問題求解在現(xiàn)實生活中無處不在7面向?qū)ο髥栴}求解舉例學(xué)生小明餓了,想要吃飯。這就產(chǎn)生了問題。為了解決這個問題,小明來到餐廳,跟餐廳服務(wù)員說,“要一碗牛肉面”。餐廳服務(wù)員對后臺的廚師大聲喊:“一碗牛肉面!”在這個場景中涉及了三個對象:小明、餐廳服務(wù)員、廚師。這三個對象合作解決“小明肚子餓”的問題。首先小明向餐廳服務(wù)員發(fā)出了消息,啟動了餐廳服務(wù)員的工作;餐廳服務(wù)向廚師發(fā)送消息,啟動了廚師的工作;廚師完成工作后把結(jié)果(一碗面)傳遞給服務(wù)員,服務(wù)員把這一碗面交付給小明,并收款;小明吃到肚子里,“肚子餓”問題解決。8面向?qū)ο蟮膯栴}求解模式就是現(xiàn)實生活中的“對象+消息”。問題求解范式在運行時刻,有很多為了求解同一個問題而相互合作的對象,這些對象之間通過發(fā)送消息實現(xiàn)合作?!皩ο蟆笔乾F(xiàn)實世界的事物在計算機中的映射?,F(xiàn)實世界的任何事物,無論是看得見的還是看不見的,都可以映射到計算機中的“對象”:一本書、一部手機、一輛汽車、一門課等。9面向?qū)ο?/p>

=類

+對象

+消息

+繼承屬性和行為10一輛小汽車屬性發(fā)動機排量(displacement)型號(model)車身顏色(color)行駛速度(speed)功能加速(accelerate)鳴笛(honk)剎車(brake)舉例定義Car類屬性方法定義MyCar類創(chuàng)建汽車對象讓其鳴笛11問題:創(chuàng)建一個汽車對象,并讓其鳴笛。Car.javaMyCar.java類和對象12類圖類圖是統(tǒng)一建模語言(UnifiedModellingLanguage,UML)中重要的圖之一。整個矩形框表示“類”。這個矩形框分成了三部分,分別描述類的名字、類的屬性以及類的行為。類圖不僅可以描述一個類及其組成;還可以描述類與類之間的關(guān)系。類之間的關(guān)系有:繼承(inheritance)關(guān)聯(lián)(association)實現(xiàn)(realization)依賴(dependency)13繼承繼承關(guān)系建?,F(xiàn)實世界中的“is-a”關(guān)系定義和實現(xiàn)一個類的時候,可以在一個已經(jīng)存在的類的基礎(chǔ)之上來進行可以加入若干新的屬性和行為修改原來的屬性和行為使之更適合子類需要14實現(xiàn)一個類實現(xiàn)了另外一個類中聲明的行為。在UML類圖中使用末端是空心三角箭頭的虛線表示。接口(interface)和接口的實現(xiàn)類的配合體現(xiàn)了開閉原則:對擴展開放;對修改封閉。也就是說,要在不改動當前類的情況下增加新的功能。在接口中展示了簡單的API接口;在實現(xiàn)類中提供的復(fù)雜的功能實現(xiàn)。例如駕駛員看到的是方向盤、剎車踏板、油門踏板、車速儀表盤等;而汽車如何傳導(dǎo)信號給剎車片剎車、發(fā)動機如何加速等實現(xiàn)細節(jié)被隱藏了。15封裝封裝性是面向?qū)ο蟮某绦蛟O(shè)計的主要特征之一。對訪問者隱藏對象的狀態(tài)或內(nèi)部表示稱為“封裝”。類私有包私有16多態(tài)通過相同類型的引用把相同的消息發(fā)送給不同的對象產(chǎn)生不同的效果,這種現(xiàn)象稱為“多態(tài)”。17面向?qū)ο蟪绦蛟O(shè)計解決具體問題的一般思路18面向?qū)ο蟪绦蛟O(shè)計

解決具體問題的一般過程19Java程序從靜態(tài)角度看,Java程序就是類的集合;從運行時刻看,Java程序是對象的結(jié)合。設(shè)計Java程序,就是設(shè)計若干類。一般每個類對應(yīng)一個.java磁盤文本文件201.2開發(fā)環(huán)境Java語言的開發(fā)環(huán)境包括:Java開發(fā)工具箱(JavaDevelopmentKit,JDK)編譯器(compiler)解釋器(interpreter)裝入器(loader)調(diào)試器(debugger)集成開發(fā)環(huán)境(IntegratedDevelopmentEnvironment,IDE)EclipseVisualStudioCodejGrasp21jGrasp安裝官方網(wǎng)站下載頁面,下載bundedwithJava21版本/user-cgi/grasp/grasp.pl?;dl=download_jgrasp.html22jGraspbundedOpenJDK2123設(shè)計Java程序的過程設(shè)計若干類,并將其分別保存為相應(yīng)的.java文本文件,即擴展名為.java,文件名與類名相同;編譯這些源文件,生成相應(yīng)的以.class為擴展名的文件。這些.class文件稱為字節(jié)碼文件;啟動Java虛擬機(JVM),將字節(jié)碼文件裝入虛擬機運行;如果在編譯時刻或者運行時刻發(fā)生任何錯誤,則修改源文件,重新編譯和運行。24Java平臺25JDK26/cn/java/technologies/downloads/#jdk21-windows設(shè)置Windows11環(huán)境變量定義JAVA_HOME在資源管理器中打開安裝JavaJDK的目標文件夾,該文件夾稱為JAVA_HOME;設(shè)置資源管理器顯示地址欄以及在地址欄中顯示完整路徑,并從地址欄中復(fù)制該文件夾的完整路徑;從資源管理器中右擊“此電腦”,從彈出菜單中選擇“屬性”;在彈出的“設(shè)置”對話框中選擇“系統(tǒng)|關(guān)于”;單擊“高級系統(tǒng)設(shè)置”鏈接,彈出“系統(tǒng)屬性”對話框;單擊“環(huán)境變量”,單擊“新建”,在彈出對話框中的“變量名”文本框中輸入:JAVA_HOME;在“變量值”文本框中粘貼;三個確定:單擊“確定”按鈕依次關(guān)閉三個對話框。2728123設(shè)置Windows11環(huán)境變量編輯環(huán)境變量PATH打開“環(huán)境變量”對話框,選擇系統(tǒng)變量Path,單擊“編輯”按鈕。在“編輯環(huán)境變量”對話框中單擊“新建”。輸入%JAVA_HOME%\bin三次單擊“確定”按鈕,依次關(guān)閉對話框29設(shè)置Windows11環(huán)境變量30設(shè)置Windows10環(huán)境變量PATH在資源管理器中打開安裝JavaJDK的目標文件夾;設(shè)置資源管理器顯示地址欄以及在地址欄中顯示完整路徑,并從地址欄中復(fù)制bin文件夾的完整路徑;在桌面上右擊“我的電腦”,從彈出菜單中選擇“屬性”;在彈出的“系統(tǒng)屬性”對話框中選擇“高級”選修卡,單擊“環(huán)境變量”按鈕;在彈出的“環(huán)境變量”對話框的“系統(tǒng)變量”列表框中選擇變量PATH,單擊“編輯”;在“編輯系統(tǒng)變量”對話框中單擊“變量值”文本框使其獲得輸入焦點,在鍵盤上按“Home”鍵是插入的定位在行首;使用Ctrl+v粘貼bin文件夾的完整路徑,再鍵入英文標點符號中的分號“;”與其它路徑隔開。單擊“確定”按鈕關(guān)閉所有對話框。311.3在命令提示符窗口設(shè)計程序首先使用文本編輯器,如Windows記事本,編輯若干類,并將其保存為與類的名字相同的.java源文件(sourcecode);然后使用命令javac編譯這些.java源文件,生成相應(yīng)的.class字節(jié)碼文件。最后,使用命令java啟動Java虛擬機(JVM),將字節(jié)碼文件裝入虛擬機運行。32在命令提示符窗口設(shè)計程序33例子設(shè)計一個計算器,能夠完成加減乘除功能設(shè)置被加數(shù)10,加數(shù)2,輸出和1234Calculator.javaTest.java例子設(shè)計程序計算2個平面圖形圓的面積。35計算圓的面積兩個對象:圓半徑不同同樣的方法計算面積創(chuàng)建兩個“圓”對象分別讓這兩個對象計算面積36計算圓的面積告訴計算機什么是“圓”?有半徑radius通過π*r2計算面積37例子38例子39例子40例子41例子42例子43命令提示窗口中文亂碼chcp65001UTF-8.java保存為UTF-844Java項目一般地,一個Java項目中含有若干包;一個Java包中含有若干類。一個類是由若干成員組成,這些成員包括變量和方法。Java程序只能從約定的main方法開始執(zhí)行。45JAR文件46JAR文件47注意Java語言對字母的大小寫敏感。一般一個類對應(yīng)一個.java文件,類名與文件名嚴格相同,包括大小寫。一個源文件中可以有多個類,但至多有一個public的類,并且public的類名必須與文件名相一致。類名的首字母大寫,不建議使用漢字作為類名。481.4jGrasp49控制結(jié)構(gòu)窗口CSDjGrasp界面50設(shè)置CSD字體和字號51先取消默認再設(shè)置新值設(shè)置工作文件夾52新建Java類53編譯和運行54編譯光標插入點所在的源文件main方法開始運行進入調(diào)試狀態(tài)RunI/O窗格1.5使用Eclipse設(shè)計程序 551.6Java程序結(jié)構(gòu)56錯誤類型一個源文件也稱為一個編譯單元(compilationunit)編譯器識別的錯誤稱為編譯時刻錯誤(compile-timeerror)由負責(zé)裝入和啟動虛擬機解釋執(zhí)行程序的命令java所識別出的錯誤稱為運行時刻錯誤(run-timeerror)如果程序在編譯時刻和運行時刻均沒有發(fā)生錯誤,但是運行結(jié)果并不正確,則程序中存在邏輯錯誤(logicalerrors)571.7代碼風(fēng)格命名約定留白塊風(fēng)格58命名約定類名:大駝峰命名法只有一個單詞類名首字母大寫。如果類名中包含多個單詞,則每個單詞的首字母大寫如RuntimeException成員名:小駝峰命名法只有一個單詞的變量名和方法名中的字母均小寫。如果變量名或方法名中含有多個單詞,則除了第一個單詞外,其它單詞首字母大寫如executeQuery()常量名的所有字母大寫。如果名字中含有多個單詞,則使用下劃線隔開。如MAX_VALUE。59名字要有意義StackOverflow的創(chuàng)始人JoelSpolsky說,“起一個好名字應(yīng)該很難,因為,一個好名字需要把要義濃縮在一到兩個詞?!薄癈reatinggoodnamesishard,butitshouldbehard,becauseagreatnamecapturesessentialmeaninginjustoneortwowords.”60留白“留白”是繪畫中的術(shù)語,指在一幅畫中要有空白。源代碼中也要有空白,以形成清晰的邏輯結(jié)構(gòu)。雖然留白不會影響程序的正確性,但影響程序的可讀性。三種留白的方法縮進空行空格61縮進縮進(Indentation)使用平面空間的布局關(guān)系反映了程序部件間的邏輯關(guān)系(比如包含關(guān)系)62publicclassCalculator{privateinta;privateintb;

voidsetA(intx){a=x;}

voidsetB(inty){b=y;}

intadd(){returna+b; }

intminus(){returna-b;}}空行不同代碼片段應(yīng)使用空行隔開。例如每個方法有使用空行與前一個方法隔開。63空格每個二元運算符的前后都有一個空格(blank)。例如:a+b;//Goodstylea+b;//Badstyle提倡使用空格而不是使用制表符(\t)實現(xiàn)代碼風(fēng)格。使用4個空格縮進而不是使用制表符Java語句把空格、制表符,回車、換行都看作空白符(whitespace)。編譯器忽略空白符64塊風(fēng)格塊是使用一對大括號“{}”括起來的一組語句。有兩種塊風(fēng)格:next-line風(fēng)格end-of-line風(fēng)格65塊風(fēng)格next-line風(fēng)格為塊另起一行并把開括號“{”放在新行的行首:66classA{voidaMethod(){//Dosomething}}塊風(fēng)格end-of-line風(fēng)格不為塊另起一行,而是直接把開括號“{”置于行尾:67classA{voidaMethod(){//Dosomething}}關(guān)鍵是保持一致1.8注釋實現(xiàn)注釋(implementationcomments)多行注釋單行注釋文檔注釋(documentationcomments)68多行注釋多行注釋形如/*...*/,即從

/*開始到*/結(jié)束。例如:69/**Thisisamultiplelinecomment.*/單行注釋單行注釋形如//…,即從//開始到行尾結(jié)束。例如:70//Thisisthefirstlineofamulti-linecomment.//Thisisthesecondlineofamulti-linecomment.//Thisisthethirdlineofamulti-linecomment.一般約定雙斜線//與注釋文本之間有一個空格單行注釋和多行注釋一般出現(xiàn)在方法體中在被注釋語句上方,并與被注釋代碼左對齊。文檔注釋文檔注釋供文檔抽取工具javadoc使用,形如/**…*/,例如:71/***ThebasicCarclass*@authorDonald.Dong(original)*/與多行注釋一樣,一般約定*和后面的注釋文本間有一個空格,所有行的*垂直對齊。文檔注釋72類、成員方法、成員變量的注釋必須使用文檔注釋,即/**注釋文本*/格式,不能使用單行注釋。所有的類都必須有創(chuàng)建者和創(chuàng)建日期;所有方法頭部的上方除了注釋返回值、參數(shù)、異常說明外,還必須指出該方法做什么事情,實現(xiàn)什么功能。所有的覆蓋方法必須加@Override注解。第2章Java語言基礎(chǔ)

ElementaryProgramminginJava董東計算機與網(wǎng)絡(luò)空間安全學(xué)院73內(nèi)容2.1標識符2.2基本數(shù)據(jù)類型2.3字面量2.4變量2.5運算符2.6運算符的優(yōu)先級2.6表達式和語句 2.7控制臺輸入和輸出 2.8控制結(jié)構(gòu)2.9數(shù)組742.1標識符和保留字標識符必須以字母(包括Unicode字母)、下劃線(_)或美元符號($)開始;除了第一個字符外,其余部分由字母、數(shù)字、下劃線或美元符號組成;不能使用Java保留字作為標識符,如class、public、void等;標識符中不能含有特殊符號,即非字母、數(shù)字、下劃線或美元符號。如嘆號(!)at號(@)數(shù)字符號(#)百分號(%)與號(&)尖號(^)星號(*)空格

75注意不能使用Java保留字,如class、public、void等作為標識符;不要使用漢語拼音作為標識符!比如使用graduateStudent而不是yanJiuSheng。76駝峰命名法對于類名使用大駝峰命名法每個單詞首字母大寫如MyCar對于變量名則采用小駝峰命名法首個單詞首字母小寫,后續(xù)單詞首字母大寫如licenceNumber)77保留字78Java17基本數(shù)據(jù)類型數(shù)據(jù)類型(datatype)是包含了值以及在這些值上的操作的集合。Java中有兩種類型:引用類型(referencetypes)基本數(shù)據(jù)類型(primitivetypes)引用類型包括三種:類(class)接口(interface)數(shù)組(array)基本數(shù)據(jù)類型有八種:boolean、char、byte、short、int、long、double和float。79所謂“引用”,就是用來訪問對象的標識。boolean數(shù)據(jù)類型boolean表示邏輯值邏輯值只有兩個:truefalse80char數(shù)據(jù)類型char表示了Unicode字符集及其上的操作81char源程序中的字符要使用單引號('')括起來。例如,'a' //字母a'\t' //制表符也可以使用Unicode編碼來表示字符,如'\u0061'就是'a'。在'\u0061'中,0061是4位的十六進制數(shù)字,表示了英文字母“a”在Unicode字符集中的編號;“\u”表示把“0061”轉(zhuǎn)義為1個Unicode字符而不是4個普通十六進制數(shù)字。82char字符串是字符序列。Java中使用類型String表示字符串,但是它不是基本數(shù)據(jù)類型83數(shù)值Java中把數(shù)值分成兩類:整數(shù)浮點數(shù)所有數(shù)值類型都是有符號的,也就是說都有正數(shù)和負數(shù)84整數(shù)85浮點數(shù)浮點類型float共32比特(4字節(jié))有效數(shù)字使用24比特浮點類型double共64比特(8字節(jié))有效數(shù)字部分53比特86浮點數(shù)的“精度”指有效數(shù)字的位數(shù)注意浮點數(shù)不能精確地表示所有的實數(shù)。比如十進制數(shù)0.1只能被近似表示為二進制數(shù)0.0001100110011001100110011010。float類型的0.1與實數(shù)0.1的誤差為2-25。872.3字面量字面量(literal)是值在源代碼中的文本表示。根據(jù)數(shù)據(jù)類型不同,Java中字面量有:布爾字面量字符字面量整數(shù)字面量浮點數(shù)字面量字符串字面量(String類型)88字面量布爾字面量只有兩個:true和false。字符字面量就是單個的Unicode字符。使用英文單引號把字符引起來以區(qū)別該符號不是標識符。例如,在源代碼中使用字母a,則要寫成'a'。諸如換行之類的特殊字符,則使用轉(zhuǎn)義符號(\)。例如,'\n'表示換行符。89UnicodeJava將字符字面量按16位Unicode字符編譯。Unicode字符集把一個字符映射到一個整數(shù),稱為Unicode代碼點最小是0,最大是65535使用十六進制表示就是從0000到FFFFJava中可以使用Unicode轉(zhuǎn)義'\u0000'到'\uffff'來表示單個字符,其中u的意思就是Unicode。90轉(zhuǎn)義91字符串字面量字符串字面量是使用雙引號引起了的字符序列例如"Java"注意無論單引號還是雙引號,都是英文引號而不是中文引號92整數(shù)字面量根據(jù)進制不同,整數(shù)字面量分為十進制整數(shù)、十六進制整數(shù)、八進制和二進制整數(shù)。默認使用十進制整數(shù),例如12。如果想使用十六進制整數(shù),則需要在數(shù)字序列前面添加“0x”或者“0X”前綴。例如0xC表示十進制數(shù)12。要在八進制整數(shù)前添加前綴“0”,例如014表示十進制數(shù)12。Java7BinaryLiterals:0b00110101Java默認所有整數(shù)字面量的數(shù)據(jù)類型為int。如果指定整數(shù)字面量為long類型,則需要在數(shù)字的末尾添加后綴“L”或者“l(fā)”。例如12L表示整數(shù)12為long類型。93例子byteb=0x7f; //127,十六進制8位整數(shù)intx=0b101; //5,二進制32位整數(shù)inti=0x1f; //31,十六進制32位整數(shù)intj=0X1F; //31,十六進制32位整數(shù)intk=31; //31,十進制32位整數(shù)longm=200L; //200,十進制64位整數(shù)longn=200l; //200,十進制64位整數(shù)94注意不能把“寬”的字面量賦值給“窄”的變量例如byteb=0x7ff0x7ff是32位整數(shù),賦值給8位的變量,編譯會提示錯誤。但是編譯器并不對byteb=0x7f;提示錯誤,這是因為編譯器識別到雖然0x7f是32位整數(shù),但高24位都是0,截斷后沒有損失。95浮點數(shù)字面量浮點數(shù)字面量有兩種表示形式:標準形式和科學(xué)記數(shù)形式。例如583.45(標準形式)或者1.23e+2(科學(xué)記數(shù)形式)。字面量1.23e+2表示數(shù)字1.23×102=123。注意,1.23e+2與1.23e2含義相同?!癳”表示指數(shù)(exponent),可以是大寫“E”。Java默認浮點字面量是double類型。如果要指定為float類型,則需要在數(shù)字的末尾添加后綴“F”或者“f”。96例子floatf1=128.6F; //32-bit浮點數(shù)floatf2=128.6f; //32-bit浮點數(shù)floatf3=1e-45f; //10-45,科學(xué)記數(shù)形式floatf4=1e+9f; //109,科學(xué)記數(shù)形式doubled1=1256.8d; //64-bit浮點數(shù)doubled2=1256.8D; //64-bit浮點數(shù)doubled3=1.2568e3d; //1.2568×103

//科學(xué)記數(shù)形式97變量變量(variable)是一個命名的存儲單元(cell)。該存儲單元中的內(nèi)容在程序運行期間可能會被改變變量的數(shù)據(jù)類型決定了存儲單元的大小變量必須先聲明其數(shù)據(jù)類型才能使用98變量的四種類型實例變量(InstanceVariables)每個對象都有的成員變量類變量(ClassVariables)聲明成員變量時如果使用保留字static修飾,則是類變量局部變量(LocalVariables)在方法體中聲明的變量稱為局部變量方法每被調(diào)用一次就會為方法體中的局部變量重新分配一次存儲形式參數(shù)(Parameters)方法的形式參數(shù)也是局部變量99聲明變量聲明變量的語法:

<數(shù)據(jù)類型><變量名>[=<初值>];100例子intx; //聲明整數(shù)類型的變量,名字為x;doubleradius; //聲明浮點數(shù)類型變量,名字為radius;chara; //聲明字符類型變量,名字為a;//聲明浮點類型變量,名字為grade,初值為0.0doublegrade=0.0;101多個變量可以一起直接聲明并初始化例如:

intx,y;inta=3,b=4,c=5;102輸出變量的值System.out.println()System.out.print()System是一個內(nèi)置的Java類,out是System類中聲明的成員變量,通過該變量引用了一個負責(zé)進行顯示輸出的對象。System.out.println("Hello")的意思是:執(zhí)行System.out對象上的方法println()顯示輸出字符串“Hello”。103例子輸出為:10Thevalueofx=A104intvalue=10;charx;x=‘A’;

System.out.println(value);System.out.println("Thevalueofx="+x);Java中有兩種數(shù)據(jù)類型的變量:基本數(shù)據(jù)類型引用數(shù)據(jù)類型基本數(shù)據(jù)類型的變量把數(shù)據(jù)存放在該變量名標識的存儲單元中;而引用類型的變量僅僅在該變量名標識的存儲單元中存放實際數(shù)據(jù)的地址,即指向了存放實際數(shù)據(jù)的存儲單元。105例inti=10; //基本數(shù)據(jù)類型Stringname="Donald"; //引用數(shù)據(jù)類型106類型的自動轉(zhuǎn)換在進行表達式計算時,Java能夠自動地把“窄”數(shù)據(jù)類型轉(zhuǎn)換為“寬”的數(shù)據(jù)類型。所謂“窄”,就是該數(shù)據(jù)類型所用的存儲字節(jié)少;所謂“寬”,就是該數(shù)據(jù)類型所用的存儲字節(jié)多。例如,如果程序中有表達式2*0.3,那么就會把2轉(zhuǎn)換為double類型,然后再和double類型的字面量0.3相乘。自動轉(zhuǎn)換的規(guī)則:107轉(zhuǎn)型在變量前面添加括號括起來的數(shù)據(jù)類型就能把該變量轉(zhuǎn)型為此數(shù)據(jù)類型。例如,下面的的賦值語句就把long類型的變量g賦值給了int類型的i:inti;longg=100;i=(int)g;轉(zhuǎn)型運算(int)把long值轉(zhuǎn)換成int值。108轉(zhuǎn)型的例子109publicclassCastingDemo{publicstaticvoidmain(String[]argv){inti;doublej=2.75;i=j; //編譯錯誤

i=(int)j; //顯式轉(zhuǎn)型;i的值為2

System.out.printf("%s%d%n","i=",i);longb;b=i; //沒有編譯錯誤System.out.printf("%s%d%n","b=",b);}}注意在對byte、short和char這三種數(shù)據(jù)類型變量使用字面量初始化時,如果初值在其數(shù)據(jù)類型的取值范圍內(nèi),編譯器自動優(yōu)化為該數(shù)據(jù)類型。例如,byteb=0x2A;仍然會把值42存入變量b而不會出現(xiàn)編譯錯誤,雖然字面量0x2A是一個整數(shù);在byteb=0x8A;中0X8A是正整數(shù)138,超出了byte類型的范圍[-128,127],所以會出現(xiàn)編譯錯誤。110運算符Java語言中的運算符有賦值運算符算術(shù)運算符關(guān)系運算符邏輯運算符條件運算符111賦值運算符賦值(assignment)運算符用以向變量名標識的存儲單元中存放一個值。112inta=1; //把1賦值給變量aintb=2+3; //把表達式2+3的運算結(jié)果賦值給bStringname="Donald"; //把字符串(String對象)"Donald"的引用賦值

給引用類型變量nameintd=a=b; //把b賦值給a,然后把a賦值給d算術(shù)運算符113注意如果a和b都是整數(shù),那么除運算/只保留商而舍棄余數(shù)。如果a和b其中有一個是浮點數(shù),則執(zhí)行浮點數(shù)的除法運算。例如5/2的結(jié)果是25.0/2、5/2.0、5.0/2.0的結(jié)果都是2.5。取余運算符%也稱為模運算符,其結(jié)果是整數(shù)除法運算a/b的余數(shù)。取余運算a%b結(jié)果的符號取決于第一個操作數(shù)a。114注意如果一個運算符有兩個操作數(shù),則稱其為雙目運算符(binaryoperator);如果只有一個操作數(shù),則稱其為單目運算符(unaryoperator)。當算術(shù)運算符+和–用作單目運算符時,就表示正數(shù)和負數(shù)。運算符++和--也是單目運算符。增量運算符(++)把操作數(shù)增1減量運算符(--)從其操作數(shù)中減去1a++在功能上等價于a=a+1。115后綴形式和前綴形式如果++和--寫在變量的后面,則稱為該運算符的后綴形式(postfixform)反之,如果++和--寫在變量的前面,則稱為該運算符的前綴形式(prefixform)后綴形式和前綴形式表達式的計值結(jié)果是不同的。例如,假設(shè)變量i的當前值是1,下面的語句將使j的值為1而i的變?yōu)?:j=i++;但是,下面語句使i和j的值為2:j=++i;116運算符+當運算符+的兩個操作數(shù)中存在字符串時則進行字符串連接運算而當操作數(shù)中存在字符時則進行整數(shù)加法運算117OperatorAdditionDemo.java關(guān)系運算符118OperatorComparisonDemo.java邏輯運算符119OperatorLogicalDemo.java條件運算符<邏輯表達式>?<表達式1>:<表達式2>max=(a>b)?a:b;120if(a>b){max=a;} else{max=b;}位運算符直接針對二進制位進行操作的運算符稱為位運算符位運算符有兩類:按位邏輯運算符按位與&按位或|按位異或^按位否~移位運算符左移1位<<有符號右移1位>>無符號右移1位>>>121按位邏輯運算只有當兩位相同時為1時按位與&的運算結(jié)果才為1,無論是否符號位當兩位中存在一位為1時按位或|的運算結(jié)果就1,無論是否符號位當兩位相同時按位異或^運算結(jié)果為0;不同時運算結(jié)果為1按位非~就是把1變?yōu)?,把0變?yōu)?。122OperatorBitWiseLogicalDemo移位運算符左移運算符把二進制位向左移動指定的位數(shù),符號位一起移動,低位補0。右符號右移運算符>>把二進制位向右移動指定的位數(shù),符號位一起移動,高位補原符號位。無符號右移運算符>>>把二進制位向右移動指定的位數(shù),高位補0。123OperatorShiftDemo.java運算符的優(yōu)先級比如1+2*3,先算1+2,還是先算2*3?這取決于*的優(yōu)先級是否高于+。124運算符優(yōu)先級與結(jié)合性125表達式和語句一個字面量、一個變量就是最簡單的表達式(expression),通過各類運算符連接的表達式形成新的表達式。表達式的值就是對其中字面量、變量按照運算符計值后的結(jié)果。假設(shè)x和y都是int類型變量,x中已經(jīng)存儲了整數(shù)2,下面都是表達式:12x12+xy=x+3126這些表達式的值分別是12、2、14、5注意賦值表達式y(tǒng)=x+3還能用在另外一個表達式中:z=(y=x+3)*4這使得變量y中存放5,變量z中存放20。表達式中還可以包含方法調(diào)用。例如下面的表達式中包含的Math類中的方法abs()調(diào)用,用來計算絕對值:5*(Math.abs(-20)/4)127語句語句(statement)是以分號(;)結(jié)束的完整的基本執(zhí)行單元。Java中的語句有表達式語句、聲明語句和控制流語句。表達式語句用來改變變量的值、調(diào)用方法和創(chuàng)建對象。聲明語句用來聲明變量。控制流語句確定語句的執(zhí)行順序。128語句inti;//聲明語句i=1;//表達式語句if(i<10){//控制流語句

System.out.println(i);//表達式語句}129塊使用大括號把若干條語句括起來,就成為塊(block)形如:130{<語句序列>}控制臺輸入和輸出控制臺(console)指的是與主機平臺交互的命令行界面通過java.util.Scanner對象可以方便地從控制臺中讀取基本數(shù)據(jù)類型的數(shù)據(jù)Scanner默認使用空白符作為分隔符把輸入串分割成詞元(token)空格、制表符、回車、換行、進紙等都稱為空白符131Scanner類比如以空格作為分隔符如下字符序列:123.14Car則Scanner可以識別為整數(shù)12、浮點數(shù)3.14和字符串Car三個記號。132Scanner默認Scanner使用空白符作為分隔符。空白符可以是一個或若干個空格、制表符、進紙、回車符或者換行符。133例運行程序,根據(jù)提示“Enteraninteger,adoublevalueandastring:”,輸入:123.14Car注意以空格隔開這三個數(shù)據(jù),然后回車,程序顯示:Yourintegeris:12Yourdoublevalueis:3.14Yourstringis:Car134ScannerDemo.java例System.in是在System類中定義的靜態(tài)變量,引用標準輸入流對象,其類型為java.io.InputStream這個輸入流默認連接到鍵盤,允許程序接收用戶輸入的數(shù)據(jù)以其作為參數(shù)調(diào)用Scanner類的構(gòu)造方法創(chuàng)建了一個Scanner對象用來從控制臺讀入數(shù)據(jù)135System.out是System中定義的靜態(tài)變量,引用標準輸出流對象,默認連接顯示器printf()是out的實例方法,提供了與C語言中的printf函數(shù)相同的語法和功能。136nextXxx方法Scanner類為每一種基本數(shù)據(jù)類型都提供了相應(yīng)的nextXxx方法用讀取該類型的值。例如:nextBooleannextBytenextShortnextLongnextDoublenextFloatnextLine其中,nextLine方法以字符串返回下一行。如果不想讀取一整行,而執(zhí)行讀取下個記號,則使用next方法。next方法以字符串形式返回下個記號。137如果期望輸入的數(shù)據(jù)類型與實際輸入的數(shù)據(jù)類型不匹配,那么就會拋出InputMismatchException異常。例如期望輸入一個整數(shù)12,而卻錯誤地輸入了浮點數(shù):Enteraninteger:3.14Exceptioninthread"main"java.util.InputMismatchExceptionhasNextXxx方法booleanhasNextBoolean()booleanhasNextByte()booleanhasNextShort()booleanhasNextLong()booleanhasNextDouble()booleanhasNextFloat()booleanhasNextLine()booleanhasNext()138注意如果想僅讀入一個字符,而不是字符串139CharInputDemo.java注意如果想得到字符數(shù)組,那么可以使用nextLine方法作為字符串讀入一行,然后使用字符串對象的toCharArray方法把字符串轉(zhuǎn)換為字符數(shù)組。140控制結(jié)構(gòu)順序結(jié)構(gòu)分支結(jié)構(gòu)循環(huán)結(jié)構(gòu)141順序結(jié)構(gòu)142

x=5;x=x+2;活動圖(activitydiagram)活動圖中最主要的符號就是圓角矩形框,表示一個活動一個活動至少含有一個動作其它常用的圖形符號還有初始結(jié)點、終止結(jié)點、控制流、判定、守衛(wèi)條件等。一個圓角框到另外一個圓角框的帶箭頭的連線表示控制流,意味著一個活動執(zhí)行完畢另外一個活動才能開始。初始結(jié)點使用實心圓表示;終止結(jié)點使用有環(huán)的實心圓表示。143分支結(jié)構(gòu)144intx=-1;intresult=x;if(x<0){result=-x;}分支結(jié)構(gòu)145其中if語句的一般形式是:if(<邏輯表達式>)<語句>;分支結(jié)構(gòu)146if(<邏輯表達式>){<語句1>;<語句2>;……}例計算絕對值147其中的菱形表示判定結(jié)點,對應(yīng)于程序中的分支語句。從判定結(jié)點出發(fā)的控制流上通常標記守衛(wèi)條件。守衛(wèi)條件是中括號括起來的邏輯表達式。意思是只有滿足該條件,才能運行控制流通過。例148intx=-1;inty=0;if(x<0){y=2*x*x+1;

}else{y=6*x-4;}條件表達式:IfElseDemo.javaif-else語句149if(<邏輯表達式>){<語句1>;<語句2>;...}else{<語句3>;<語句4>;...}嵌套if語句150 if(<邏輯表達式1>){

……//塊1 }elseif(<邏輯表達式2>){

……//塊2 }

…… elseif(<邏輯表達式n>){

……//塊n }else{

……//塊n+1 }IfElseIfDemo.javaswitch語句151<表達式>是整型、字符類型、枚舉類型或者字符串<語句序列>是0條或多條語句當程序執(zhí)行到該語句,首先對

<表達式>計值,把計值結(jié)果與<值1>進行比較,如果匹配則執(zhí)行<語句序列1>、<語句序列2>、……、<語句序列n>、<語句序列n+1>;否則與<值2>進行比較,如果匹配則執(zhí)行<語句序列2>、……、<語句序列n>、<語句序列n+1>;當與<值n>匹配失敗時執(zhí)行default中<語句序列n+1>。switch(<表達式>){case<值1>:<語句序列1>case<值2>:<語句序列2>……case<值n>:<語句序列n>default:<語句序列n+1>}例把中文數(shù)字轉(zhuǎn)換為阿拉伯數(shù)字152無break:SwitchDemo.java有break:SwitchBreakDemo.java

輸入“一”,程序的輸出10而不是期望的1switch語句常見形式153switch(<表達式>){case<值1>:<語句序列>break;case<值2>:<語句序列>break;default:<語句序列>}因為大多是分支都是“排他”情形,所以實踐中的switch語句的每個case后面總要有break語句例把百分制的考試分數(shù)轉(zhuǎn)換成A,B,C,D,E,F和I的等級成績。154SwitchGradeDemo.java注意在switch(<表達式>)中,<表達式>是整型字符型枚舉String155問題一是從第9行到第14行共享第15和第16行的語句,但讀起來令人覺得莫名其妙;二是太多的break語句,讀起來讓人覺得啰嗦可以使用“標簽規(guī)則”來解決這兩個問題。156SwitchGradeArrowLabelDemo.javaswitch標簽規(guī)則一個->連接的左部和右部稱為一條switch標簽規(guī)則。箭頭左部列舉各種情形;箭頭右部則是一條語句或語句塊:157switch(<表達式>){case<左部1>-><右部1>case<左部2>-><右部2>

……case<左部n>-><右部n>default<左部n+1>-><右部n+1>}例使用標簽規(guī)則根據(jù)用戶輸入的菜單項索引號選擇不同的功能去執(zhí)行158Menu.javaMenu2.java循環(huán)控制結(jié)構(gòu)while語句do-while語句for語句159while語句對<循環(huán)條件>計值;如果<循環(huán)條件>為false,跳過<語句序列>塊,執(zhí)行后隨語句;如果<循環(huán)條件>為true,執(zhí)行<語句序列>塊;轉(zhuǎn)到步驟(1)。160while(<循環(huán)條件>){<語句序列>}舉例161把公差d為1、首項a為1、項數(shù)n為10的等差數(shù)列累加WhileLoopDemo.java循環(huán)控制結(jié)構(gòu)的組成162死循環(huán)163inta=1;intn=10;intd=1;intsum=0;inti=1;while(i<=n){sum=sum+(a+(i-1)*d);}do-while語句164do{<語句序列>}while(<循環(huán)條件>);使用do-while循環(huán)對首項為1公差為1的n項等差數(shù)列累加DoWhileLoopDemo.javafor語句165for(<初始化>;<循環(huán)條件>;<步驟更新>){<語句序列>}while循環(huán)和do-while循環(huán)適合于無法預(yù)知循環(huán)次數(shù)的情況如果預(yù)先知道循環(huán)次數(shù),則使用for循環(huán)使得代碼更為簡潔些。舉例166執(zhí)行初始化語句i=1,把1賦值給整型變量i;對循環(huán)條件i<n計值。如果為真,執(zhí)行循環(huán)體;否則結(jié)束for語句執(zhí)行后隨語句;執(zhí)行循環(huán)體中的語句:sum=sum+(a+(i-1)*d);執(zhí)行<更新循環(huán)條件>:i++;轉(zhuǎn)步驟2。使用do-while循環(huán)對首項為1公差為1的n項等差數(shù)列累加ForLoopDemo.java分支語句breakcontinuereturn167breakbreak語句使得程序的執(zhí)行流程立即從該語句位置跳轉(zhuǎn)到switch語句的后隨語句,即終止了switch語句的執(zhí)行轉(zhuǎn)去執(zhí)行其后隨語句168inti=9;while(i>=1){i--;if(i==3){break;}System.out.printf("%d",i);}輸出結(jié)果是87654,而不是87654321。continue僅跳過本次迭代中尚未執(zhí)行的語句,進行下次迭代169inti=9;while(i>=1){i--;if(i==3){continue;}System.out.printf("%d",i);}輸出結(jié)果是87654210而不是

876543210returnreturn語句用以從當前正在執(zhí)行的方法中返回到調(diào)用該方法的位置。除了能夠?qū)⒖刂屏鞣颠€給方法的調(diào)用者,return語句還能交給方法的調(diào)用者一個值,稱為返回值。僅需要把要返回值放在保留字return的后面即可。例如:語句return++i;返回對變量i增1后的結(jié)果。語句return"Donald";返回字符串“Donald”的引用。返回值的數(shù)據(jù)類型必須和方法聲明的返回值類型兼容。如果方法聲明的返回值類型是void,那么就不能返還任何值。170數(shù)組在Java中使用數(shù)組一般有四個步驟:聲明數(shù)組類型的引用變量;創(chuàng)建數(shù)組對象,并通過前面聲明的變量進行引用;初始化數(shù)組對象;訪問數(shù)組對象。171聲明聲明數(shù)組引用的語法一般是:<元素數(shù)據(jù)類型>[]<標識符>例如:int[]a;172創(chuàng)建int[]a; //聲明a=newint[6]; //創(chuàng)建對象

“newint[6]”的意思創(chuàng)建容量為6的數(shù)據(jù)元素類型為int的數(shù)組對象。173聲明并創(chuàng)建對象int[]a=newint[6]; //聲明并創(chuàng)建對象174聲明時初始化int[]a=

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論