版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
Java語言程序設計第1章Java起步入門
1Java起源與演進23主要內容Java語言程序設計(第4版)清華大學出版社2023Java平臺與運行機制建立開發(fā)環(huán)境45第一個Java程序集成開發(fā)環(huán)境6JShell交互式編程環(huán)境Java語言程序設計Java的起源與演進Java的起源與演進Java語言程序設計(第4版)清華大學出版社最初是由美國Sun公司的JamesGosling等人開發(fā)的一種面向對象編程語言。語言最初取名為Oak(橡樹),后取名Java。Java于1995年5月23日正式發(fā)布。Java隨著互聯(lián)網的迅猛發(fā)展而發(fā)展,逐漸成為重要的網絡編程語言。Java具備顯著優(yōu)勢和廣闊前景。
Java的起源與演進Java語言程序設計(第4版)清華大學出版社20多年來,Java語言不斷推出新版本,增加新功能。1995.5.23正式發(fā)布1996Java1.01999J2SE2000Java1.32002Java1.42004J2SE52006Java62007JavaFX2021.9Java172018.9Java112014Java82010Java72017.9Java9Java的起源與演進Java的起源與演進Java語言程序設計(第4版)清華大學出版社Java語言的優(yōu)點簡單的面向對象的分布式的解釋型的平臺獨立的可移植的健壯的安全的高性能的多線程的動態(tài)的Java的起源與演進Java語言程序設計(第4版)清華大學出版社面向對象的:Java語言是一種面向對象的語言,面向對象的編程方法是當今主流的編程方法,Java語言支持所有的面向對象特征。面向對象編程方法也是本課程的重點。平臺獨立的:Java語言是平臺獨立的,或者是跨平臺的。Java源程序經過編譯以后產生的類文件(字節(jié)碼文件),這種文件可以不用修改,即可在不同的平臺上運行。從而實現(xiàn),“編寫一次,到處運行”。JVM(JavaVirtualMachine)Java虛擬機。運行字節(jié)碼。JRE(JavaRuntimeEnviromet)Java運行時環(huán)境。
JVM和Java類庫一起構成。Java語言程序設計Java平臺與運行機制Java字節(jié)碼與平臺獨立Java語言程序設計(第4版)清華大學出版社“Java是平臺獨立的”或“跨平臺的”。傳統(tǒng)的編程中,源代碼要編譯成可執(zhí)行代碼。源代碼編譯本機代碼Java字節(jié)碼與平臺獨立Java語言程序設計(第4版)清華大學出版社“Java中,源代碼被編譯成字節(jié)碼(bytecode)。字節(jié)碼需要在Java虛擬機上運行。
Java成為一種跨平臺的語言,進而實現(xiàn)“編寫一次,到處運行”。源代碼編譯字節(jié)碼WindowsJVMUnixJVMLinuxJVMJVM、JRE和JDKJava語言程序設計(第4版)清華大學出版社JVM(JavaVirtualMachine)Java虛擬機。運行字節(jié)碼。JRE(JavaRuntimeEnviroment)Java運行時環(huán)境。
JVM和Java類庫一起構成。JDK(JavaDevelopmentToolkit)Java開發(fā)工具包。包括編譯器、解釋器和其他工具。它是編譯和運行Java程序的必備軟件。JVMJREJDKJava平臺有三大版本,分別代表Java的三個應用領域。Java標準版(JavaStandardEdition,JavaSE)Java企業(yè)版(JavaEnterpriseEdition,JavaEE)Java微型版(JavaMicroEdition,JavaME)用Java可以開發(fā)下面類型的程序:控制臺和窗口應用程序。在服務器上運行的Servlet、JSP、JSF以及其他JavaEE標準支持的應用程序。嵌入式應用程序,如在Android系統(tǒng)下運行的程序。1.2.1Java平臺與應用領域Java語言程序設計建立開發(fā)環(huán)境JDK的下載與安裝Java語言程序設計(第4版)清華大學出版社可從Oracle官方網站/免費下載JDK。下載Windows版本的64位的JDK17,文件名為:jdk-17_windows-x64_bin.exe以下網址還提供了在線API文檔:/en/java/javase/17/index.html從JDK下載頁面可找到JavaAPI文檔下載鏈接。JDK的下載與安裝Java語言程序設計(第4版)清華大學出版社假設下載的文件名為jdk-17_windows-x64_bin.msi,要安裝在Windows10上。雙擊該文件即開始安裝,安裝過程需要用戶指定安裝路徑,默認路徑是C:\ProgramFiles\Java\jdk-17\目錄,可通過點擊“更改”按鈕指定新的位置,如圖1-4所示。關于環(huán)境變量Java語言程序設計(第4版)清華大學出版社JDK安裝時,創(chuàng)建一個目錄:
C:\ProgramFiles\CommonFiles\Oracle\Java\javapath并將下面文件復制到該目錄中:javac.exe,java.exe,javaw.exe,jshell.exe并且將上述目錄添加到PATH環(huán)境變量中,因此不需要設置PATH環(huán)境變量就可以編譯和運行程序。Java語言程序設計第一個Java程序第一個Java程序Java語言程序設計(第4版)清華大學出版社開發(fā)Java程序通常分三步:1.編輯源程序;2.編譯源程序;3.執(zhí)行或調試程序,得到程序輸出結果。HelloWorld.javaHelloWorld.classC:\>javaHelloWorldHello,World!publicclassMyProgram{publicstaticvoidmain(String[]args){
System.out.println(“千里之行,始于足下!");}}為了保存源文件和編譯后的類文件,先在D盤上創(chuàng)建一個名為study的目錄。第一個Java程序Java語言程序設計集成開發(fā)環(huán)境1.5集成開發(fā)環(huán)境IDE是IntegratedDevelopmentEnviroment的縮寫,稱為集成開發(fā)環(huán)境。Eclipse下載地址是
IntelliJIDEA下載地址是
Java語言程序設計(第4版)清華大學出版社2023/12/9Java語言程序設計使用IntelliJIDEA開發(fā)工具使用IntelliJIDEA開發(fā)程序Java語言程序設計(第4版)清華大學出版社IntelliJIDEA是JetBrains公司的產品,簡稱IDEA,它是業(yè)界被公認為最好的Java開發(fā)工具。IDEA有兩個版本:旗艦版(Ultimate)和社區(qū)版(Community)。旗艦版需要付費,但有30天試用期,社區(qū)版是免費開源的。IntelliJIDEA下載地址是http:///idea/download。2023/12/9Java語言程序設計JShell交互式編程環(huán)境JDK提供的一種命令行工具,稱為JavaREPL(Read-Eval-Print-Loop)。在jshell>提示符下,允許用戶直接輸入代碼片段,表達式。語句。各種聲明(類、接口、方法等)。1.6Jshell交互式編程環(huán)境Java語言程序設計(第4版)清華大學出版社啟動命令提示符窗口,在提示符下輸入jshell,顯示jshell>提示符。安裝了JDK并設置了Path環(huán)境變量后即可使用JShell。啟動命令提示符窗口,在提示符下輸入jshell,顯示jshell>提示符,如圖1-12所示。1.6Jshell交互式編程環(huán)境提示,在輸入表達式或語句時,不必在語句的結尾使用分號(;),JShell會自動給表達式添加分號。另外,在輸入時可以按Tab鍵顯示激活代碼提示,再次按Tab鍵顯示所有輸入提示。如果輸入一個表達式,JShell將自動計算并顯示表達式的值,同時為表達式指定一個變量,自動為變量命名,變量名使用$開頭。1.6Jshell交互式編程環(huán)境在JShell中還可以定義變量,執(zhí)行循環(huán)語句等,如圖1-14所示。1.6Jshell交互式編程環(huán)境Java語言程序設計第2章數據類型與運算符
1Java類型系統(tǒng)23主要內容Java語言程序設計(第4版)清華大學出版社2022變量與賦值基本類型及字面值45字符串類型軟件開發(fā)過程6數據類型轉換7運算符89程序文檔風格和注釋案例:求解線性方程組10案例:計算顯示當前時間Java語言程序設計2.1Java類型系統(tǒng)2.1Java類型系統(tǒng)Java語言程序設計(第4版)清華大學出版社Java的數據類型可分為兩種:基本數據類型(primitivedatatype)引用數據類型(referencedatatype)6.1.12.1Java類型系統(tǒng)基本數據類型整數類型字節(jié)型byte短整型short整型int長整型long浮點類型單浮點型float雙浮點型double字符類型char布爾類型boolean
引用數據類型類class
數組[]name
接口interface記錄類型record
枚舉類型enum
注解類型@interfaceJava語言程序設計(第4版)清華大學出版社2.1.1基本數據類型Java語言程序設計(第4版)清華大學出版社數據類型占字節(jié)數所占位數數的范圍byte18-27~27-1(-128~127)short216-215~215-1(-32768~32767)int432-231~231-1(-2147483648~2147483647)long864-263~263-1(-9223372036854775808~9223372036854775807)float432約1.4×10-45~3.4×1038,IEEE754標準double864約4.9×10-432~1.79×10308,IEEE754標準boolean11只有true和false兩個值char2160~65535Unicode2.1.1基本數據類型Java語言程序設計(第4版)清華大學出版社整數的表示(5)byte00000101short0000000000000101int00000000000000000000000000000101long0000000000000000000000000000000000000000000000000000000000000101浮點數的表示(-5.5)float表示1100000001100000000000000000000double表示110000000110000000000000000000000000000011000000000000000000002.1.1基本數據類型Java語言程序設計(第4版)清華大學出版社數據類型占字節(jié)數所占位數數的范圍byte18-27~27-1(-128~127)short216-215~215-1(-32768~32767)int432-231~231-1(-2147483648~2147483647)long864-263~263-1(-9223372036854775808~9223372036854775807)float432約1.4×10-45~3.4×1038,IEEE754標準double864約4.9×10-432~1.79×10308,IEEE754標準boolean11只有true和false兩個值char2160~655352.1.2引用數據類型Java語言程序設計(第4版)清華大學出版社類型定義方法對象聲明類(抽象類)classStudent{}Studenttstud=newStudent();接口interfacePlayer{}Playerp=newMusicPlayer();枚舉enumColor{RED,GREEN,BLUE;}Colorc=Color.BLUE;記錄recordPoint(int
x,inty){}Pointp=newPoint(5,8);注解@interfaceAuthor{}@Author{}publicclassEmployee{}數組int[]numbernumber=newint[5];Java語言程序設計2.2變量與賦值6.1.1Java標識符標識符(identifier)用來為變量、方法和類進行命名。命名規(guī)則:以字母、下劃線(_)或美元符($)開頭,其后可以是字母、下劃線、美元符或數字,長度沒有限制。合法標識符:intTest,Manager_Name,_var,$Var6.1.1多單詞的標識符有兩種命名方法:
PascalCase,每個單詞的首字母大寫。類、接口用該方法命名
camelCase,第一個單詞的首字母小寫,變量和方法用該方法命名合法的標識符:Student,BankAccountnumberOfStudent,setName()Java標識符6.1.1標識符是區(qū)分大小寫的,下面兩個標識符是不同的。myName,MyName不推薦使用無意義的單個字母命名標識符,應該使用有意義的單詞或單詞組合為對象命名。Java標識符6.1.1Java關鍵字abstractcontinuefornewswitchassertdefaultgoto
*packagesynchronizedbooleandoifprivatethisbreakdoubleimplementsprotectedthrowbyteelseimportpublicthrowscaseenuminstanceofreturntransientcatchextendsintshorttrycharfinalinterfacestaticvoidclassfinallylongstrictfpvolatileconst*floatnativesuperwhile6.1.1變量(variable)用于在程序中臨時存放數據。Java有兩大類型的變量:變量與賦值1:基本類型的變量:數值型(整數型和浮點型)、布爾型和字符型。2:引用類型的變量:類、接口、枚舉和數組等。6.1.1變量在使用前必須先聲明,然后初始化:
類型名變量名;intnumber;變量與賦值變量的初始化就是給變量賦初值:number=100;可以在聲明的同時初始化變量:intnumber=100;Java語言程序設計2.3基本類型及字面值6.1.1字面值(literals)是某種類型值的表示形式,比如,100是int型字面值。字面值有三種類型:1)基本類型的字面值:基本類型的字面值有4種類型:整數型、浮點型、布爾型、字符型。如123、-789為int型字面值,3.456、2e3為double型字面值,true、false為布爾型字面值,‘g’、‘我’為字符字面值2)字符串字面值:用雙引號定界的字符序列,如“Hello”是一個字符串字面值
3)null字面值6.1.12.3.1整數類型Java提供4種整數類型,分別是byte型、short型、int型和long型。數據類型占字節(jié)數所占位數數的范圍byte18-27~27-1(-128~127)short216-215~215-1(-32768~32767)int432-231~231-1(-2147483648~2147483647)long864-263~263-1(-9223372036854775808~9223372036854775807)Java的整型字面值有四種表示方法。
1)十進制數2)二進制數,以0b或0B開頭3)八進制數,以0開頭4)十六進制數,以0x或0X開頭2.3.1整數類型Java的整型變量使用byte、short、int、long等聲明,下面是幾個整型變量的定義。2.3.1整數類型bytenum1=120;shortnum2=1000;
intnum3=99999999;longnum4=12345678900L;//超出int值范圍必須用L表示注意下面代碼的輸出:2.3.1整數類型bytea=0b00101010;//二進制形式
intb=0200;//八進制形式longc=0x1F;//十六進制形式
System.out.println("a="+a);//輸出:a=42
System.out.println("b="+b);//輸出:b=128
System.out.println("c="+c);//輸出:c=31注意,在給變量賦值時,不能超出該數據類型所允許的范圍,否則發(fā)生編譯錯誤。下面語句發(fā)生編譯錯誤。byteb=200;2.3.1整數類型編譯錯誤說明類型不匹配,不能將一個int型的值轉換成byte型值。因為200超出了byte型數據的范圍(-128~127),因此編譯器拒絕編譯。packagecom.boda.xy;publicclassLightYear{publicstaticvoidmain(String[]args){intspeed=300000;//光速為每秒300000公里longseconds=365*24*60*60;//假設一年為365天longdistance=speed*seconds;System.out.println("一光年的距離是"+distance+"公里。");}}程序2.1LightYear.java6.1.1有兩種浮點類型,分別是float(單精度)和double(雙精度)。它們符合IEEE-754標準。數據類型占字節(jié)數所占位數數的范圍float432約1.4×10-45~3.4×1038double864約4.9×10-432~1.7×10308浮點數類型6.1.1浮點型字面值有兩種表示方法。1)十進制數形式3.142)科學記數法形式4.5e+3浮點數類型浮點型變量使用float和double關鍵字定義,如下兩行分別聲明了兩個浮點型變量pi和d:doubled=.00001005;floatpi=3.1415926F;System.out.println("doubled="+d);System.out.println("floatpi="+pi);代碼運行結果如下:doubled=1.005E-5floatpi=3.1415925float型字面值必須加F或f6.1.1浮點數的運算是不精確的,不適合做財務計算。因為浮點數計算可能存在舍入誤差,而財務計算中的舍入誤差是不能接受的。
2.0-1.1結果是0.8999999999999999需要精確而無舍入誤差的數字計算,可以使用java.math.BigDecimal類。2.3.2浮點數類型6.1.1從Java7開始,在數值型字面值中可以使用下劃線(_)將一些數字進行分組,這可以增強代碼的可讀性。下劃線可以用在浮點型數和整型數(包括二進制、八進制、十六進制和十進制)的表示中。浮點數類型6.1.1字符是程序中可以出現(xiàn)的任何單個符號。Java使用Unicode為字符編碼,Unicode字符集使用兩個字節(jié)(16位)為字符編碼,可表示65536個字符。字面值用單引號將字符括起來,大多數可見的字符都可用這種方式表示,如'a'、'@'、'我'等。有些特殊字符用轉義序列來表示。用反斜杠(\)表示轉義,如'\n'表示換行。字符類型在Java程序中還可以使用反斜杠加3位八進制數表示字符,格式為‘\ddd’,如‘\141’表示字符‘a’。也可以使用反斜杠加4位十六進制數表示字符,格式為‘\uxxxx’,如‘\u0062’表示字符‘b’,‘\u4F60’和'\u597D'分別表示中文的“你”和“好”。任何的Unicode字符都可用這種方式表示。字符類型轉義字符說
明轉義字符說
明\'單引號字符\b退格\"雙引號字符\r回車\\反斜杠字符\n換行\(zhòng)f換頁\t水平制表符也可以使用反斜杠加4位十六進制數表示字符,格式為'\uxxxx',如'\u0062'表示字符'b','\u4F60'和'\u597D'分別表示中文的“你”和“好”。
6.1.1布爾型字面值很簡單,只有兩個值true和false,分別用來表示邏輯真和邏輯假。布爾型值使用boolean關鍵字聲明,如下面語句聲明了布爾型變量t并為其賦初值true:
booleant=true;所有關系表達式的返回值都是布爾型的數據,如表達式10<9的結果為false。布爾型數據也經常用于選擇結構和循環(huán)結構的條件中布爾類型booleanb;charch1,ch2;ch1='Y';ch2=65;System.out.println("ch1="+ch1+",ch2="+ch2);//ch1=Y,ch2=Ab=ch1==ch2;System.out.println(b);//falsech2++;System.out.println("ch2="+ch2);//ch2=B程序2.2CharBoolDemo.javaJava語言程序設計2.4字符串類型6.1.1Java程序中經常要使用字符串。字符串是字符序列,不屬于基本數據類型,是一種引用類型。字符串是通過String類實現(xiàn)的??捎肧tring聲明和創(chuàng)建一個字符串??梢酝ㄟ^雙引號定界符創(chuàng)建一個字符串字面值。Strings="Javaiscool.";字符串類型注意,一個字符串字面值不能分在兩行來寫。例如,下面代碼產生編譯錯誤:Strings="學而時習之,
不亦說乎?";字符串類型對于較長的字符串,可以使用加號運算符(+)將兩個字符串連接:Strings1="有朋自遠方來”+",不亦樂乎?";Strings2="人不知而不慍“+",不亦君子乎?";可以將一個String和一個基本類型或者另一個對象連接在一起。例如,下面代碼就是字符串常量和一個int型變量及double型變量連接。
intage=25;doublesalary=8000;
System.out.println("我的年齡是:"+age);
System.out.println("我的工資是:"+salary);字符串類型字符串與其他類型值連接,系統(tǒng)首先將其他類型值轉換為字符串,然后兩個字符串再連接。Java語言程序設計2.5軟件開發(fā)過程軟件開發(fā)過程Java語言程序設計(第4版)
軟件開發(fā)過程是指軟件設計思路和實現(xiàn)方法的一般過程。一般都是一個多階段過程,通常包括需求確定、系統(tǒng)分析、系統(tǒng)設計、實現(xiàn)、測試、部署和維護。這里重點討論幾個重要步驟。理解問題。就是需求分析。開發(fā)解決方案。算法是解決問題所需的一組邏輯步驟。實現(xiàn)。也稱為編碼。測試。測試的目的是發(fā)現(xiàn)程序的錯誤。問題描述Java語言程序設計(第4版)
編寫一個簡單的計算圓面積的程序,要求從鍵盤輸入圓的半徑,程序計算并輸出圓的面積和周長。軟件開發(fā)過程Java語言程序設計(第4版)
理解問題。首先需要仔細閱讀并準確理解需求說明書,這通常包括提問以確認對問題的理解是否正確。開發(fā)解決方案。設計算法。算法是解決問題所需的一組邏輯步驟。
第1步:讀取半徑值,存入變量radius中。
第2步:使用下面公式計算圓面積area和周長perimeter:area=PI*radius*radiusperimeter=2*PI*radius
第3步:顯示面積值area和周長perimeter。軟件開發(fā)過程Java語言程序設計(第4版)
實現(xiàn)。實現(xiàn)也稱為編碼(編寫代碼)。編寫代碼就是將算法轉換成程序。測試。程序測試是為發(fā)現(xiàn)程序的錯誤而執(zhí)行程序。設計一些用例。
編譯錯誤(語法錯誤)
運行時錯誤。運行時用戶輸入了錯誤數據
邏輯錯誤。是最難發(fā)現(xiàn)和糾正的錯誤,對于本例,假如將計算圓周長公式錯寫成perimeter=Math.PI*radius。doubleradius;doublearea,perimeter;Scannerinput=newScanner(System.in);System.out.print("請輸入半徑值:");radius=input.nextDouble();area=Math.PI*radius*radius;perimeter=2*Math.PI*radius;System.out.println("圓的面積為:"+area);System.out.println("圓的周長為:"+perimeter);程序2.3ComputeArea.java6.1.1
publicintnextInt()publicbytenextByte()publicshortnextShort()publiclongnextLong()publicfloatnextFloat()
publicdoublenextDouble()publicbooleannextBoolean()
publicStringnextLine()Scanner類的其他方法Java語言程序設計2.6數據類型轉換6.1.1數據類型轉換整型、浮點型、字符型數據可能需要混合運算或相互賦值,這就涉及類型轉換的問題。轉換分為:
自動類型轉換強制類型轉換6.1.1自動類型轉換自動類型轉換也稱加寬轉換,它是指將具有較少位數的數據類型轉換為具有較多位數的數據類型。
byteb=120;
inti=b;可用圖表示。
bytedoublecharshortintlongfloat6.1.1強制類型轉換強制類型轉換:將位數較多的數據類型轉換為位數較少的數據類型。其語法是用圓括號運算符。例如:將double型數據轉換為byte型數據。
doubled=200.5;byteb=(byte)d;
System.out.println(b);//輸出-56200的二進制是00000000000000000000000011001000轉換成byte型只保留低8位110010006.1.1表達式類型提升除了賦值可能發(fā)生類型轉換外,在含有變量的表達式中也有類型轉換的問題。bytea=40;byteb=50;bytec=a+b;//編譯錯誤c=(byte)(a+b);//正確
inti=a+b;6.1.1程序2.4CastDemo.javaJava中的浮點數通常保留15位有效數字,比如,圓周率在Java中用Math.PI常量表示,默認情況下輸出它的值是3.141592653589793。假設希望將該值四舍五入保留4位小數,可以通過下面程序實現(xiàn)。數據類型轉換doublepi=Math.PI;pi=pi*10000+0.5;//將原值擴大10000倍,再加0.5pi=(int)pi;//強制轉換成整數pi=pi/10000;//再除以10000,達到四舍五入效果System.out.println(pi);Java語言程序設計2.7運算符6.1.1運算符表示各種不同運算的符號稱為運算符(operator),參與運算的各種數據稱為操作數(operand)。表達式(expression)是由運算符和操作數按一定語法規(guī)則組成的符號序列。
(2+3)*(8-5)a>b每個表達式經過運算后都會產生一個確定的值。6.1.1按照功能分
算術運算符
邏輯運算符關系運算符賦值運算符
位運算符等按照所需要的操作數個數分
一元運算符++a二元運算符a&&b三元運算符a>b?a:b運算符6.1.1算術運算符算術運算符有
二元運算符:加(+)、減(-)、乘(*)、除(/)、取余數(%)5個
一元運算符:正(+)、負(-)、自增(++)、自減(--)4個。6.1.1運算符含
義運算符含
義>大于<=小于或等于>=大于或等于==相等<小于!=不相等關系運算符(也稱比較運算符)用來比較兩個值的大小或是否相等??蓸嫵申P系表達式,結果為true或false。關系運算符6.1.1邏輯運算符包括以下幾種:?。ㄟ壿嫹牵?、&(邏輯與)、|(邏輯或)、^(邏輯異或)
&&(短路與)、||(短路或)邏輯運算符6.1.1AB!AA&BA|BA^BA&&BA||Bfalsefalsetruefalsefalsefalsefalsefalsefalsetruetruefalsetruetruefalsetruetruefalsefalsefalsetruetruefalsetruetruetruefalsetruetruefalsetruetrue邏輯運算符6.1.1賦值運算符(assignmentoperator)用來為變量指定新值。賦值運算符主要有兩類,
簡單賦值運算符:使用等號(=)復合賦值運算符:如(+=,-=)賦值運算符6.1.1位運算在整數的二進制位上操作,有兩類:
位邏輯運算(bitwise)
移位運算(shift)位(bit)運算符6.1.1整數的二進制表示整數是用二進制補碼表示的,int型值用4個字節(jié)32位二進制表示。42的原碼為
00000000000000000000000000101010+42的補碼為
00000000000000000000000000101010-42的補碼為
111111111111111111111111110101106.1.1共有4個位邏輯運算符:~(按位取反)、&(按位與)、|(按位或)、^(按位異或)位邏輯運算是對一個整數的二進制位進行運算。AB~AA&BA|BA^B001000011011100011110110位邏輯運算符6.1.1移位運算符共有3個移位運算符:<<左移運算符>>右移運算符>>>無符號右移運算符6.1.1運算符優(yōu)先級運算優(yōu)先級是指在一個表達式中出現(xiàn)多個運算符又沒有用括號分隔時,先運算哪個后運算哪個。
3+4*5>(5*(2+4)–10)&&8–4>5
3+4*5>(5*6–10)&&8–4>5
3+4*5>(30–10)&&8–4>5
3+4*5>20&&8–4>5
3+20>20&&8–4>5
23>20&&8–4>5
23>20&&4>5
true&&4>5
true&&false
false6.1.1運算符優(yōu)先級不必死記硬背運算符的優(yōu)先級。必要時可以在表達式中使用圓括號,圓括號的優(yōu)先級最高。圓括號還可以使表達式顯得更加清晰。例如,考慮以下代碼:
intx=5;inty=5;booleanz=x*5==y+21;
booleanz=(x*5)==(y+21);6.1.1運算符結合性結合性是指對某個運算符構成的表達式,計算時如果先取運算符左邊的操作數,后取運算符,則該運算符是左結合的,若先取運算符右側的操作數,后取運算符,則是右結合的。所有的二元運算符(如+、<<等)都是左結合的,而賦值運算符(=、+=等)是右結合的。Java語言程序設計2.8程序文檔風格和注釋寫出正確的、可運行的Java程序固然重要,但是,編寫出易于閱讀和可維護的程序同樣重要。概述采用統(tǒng)一的編碼規(guī)范是使代碼易于閱讀的方法之一。編碼規(guī)范包括文件名、文件的組織、縮進、注釋、聲明、語句、空格以及命名規(guī)范等。保持一致的縮進會使程序更加清晰、易讀、易于調試和維護。即使將程序的所有語句都寫在一行中,程序也可以編譯和運行,但適當的縮進可使人們更容易讀懂和維護代碼。2.8.1一致的縮進和空白Java規(guī)范建議的縮進為4個字符,有的學者也建議縮進2個字符,這可根據你自己的習慣決定,但只要一致即可。二元操作符的兩邊也應該各加一個空格,如下面語句所示:
System.out.println(3+4*5);//不好的風格
System.out.println(3+4*5);//好的風格代碼塊是由花括號圍起來的一組語句,如類體、方法體、初始化塊等。代碼塊的花括號有兩種寫法,行末格式,即左花括號寫在上一行的末尾,右花括號寫在下一行,如程序1.1所示。次行格式,即將左花括號單獨寫在下一行,右花括號與左花括號垂直對齊,如下代碼所示:2.8.2塊的風格publicclassHelloWorld{publicstaticvoidmain(String[]args){
System.out.println("HelloWorld!");}}這兩種格式沒有好壞之分,但Java的文檔規(guī)范推薦使用行末格式,這樣使代碼更緊湊,且占據較少空間。本書與JavaAPI源代碼保持一致,采用行末格式。次行格式Java允許在源程序中加入注釋。注釋是對程序功能的解釋或說明,是為閱讀和理解程序的功能提供方便。所有注釋的內容都被編譯器忽略。Java源程序支持三種類型的注釋。2.8.3程序注釋(1)單行注釋,以雙斜杠(//)開頭,在該行的末尾結束,例如://這里是注釋內容(2)多行注釋,以/*開始,以*/結束的一行或多行文字,例如:
/*該文件的文件名必須為:HelloWorld.java*/
(3)文檔注釋,以/**開始,以*/結束的多行。文檔注釋是Java特有的,主要用來生成類定義的API文檔。具體使用JDK的javadoc命令將文檔注釋提取到一個HTML文件中。關于文檔注釋的更詳細信息,請參閱有關文獻。
/**這是一個類的定義*/2.8.3程序注釋Java語言程序設計2.9案例:求解線性方程組編寫程序,求解一個方程組并顯示x和y的值。要求從鍵盤輸入方程組的系數,程序應該判斷方程組無解的情況。問題描述下面是一個二元一次線性方程組,計算它的解x、y的公式如下:設計思路這里,如果ad-bc=0,方程組無解。我們用Scanner對象的nextDouble()方法從鍵盤讀取a、b、e以及c、d、f值。首先判斷a*d–b*c的值,如果其值為0,則方程組無解,否則計算并輸出它的解。Scannerinput=newScanner(System.in);doublea,b,c,d,e,f;doublex,y;System.out.print("請輸入a,b,e值:");a=input.nextDouble();b=input.nextDouble();e=input.nextDouble();System.out.print("請輸入c,d,f值:");c=input.nextDouble();d=input.nextDouble();f=input.nextDouble();程序2.7LinearEquation.javaf=input.nextDouble();if((a*d–b*c)==0){System.out.println("此方程組無解。");}else{x=(e*d-b*f)/(a*d-b*c);y=(a*f-e*c)/(a*d-b*c);System.out.println("x="+x);System.out.println("y="+y);}Java語言程序設計2.10案例:計算顯示當前時間編寫程序,以GMT(格林尼治時間)來顯示當前的時間,以“小時:分鐘:秒”的格式來顯示。要求得到類似下面的輸出結果。
當前時間:11:10:27問題描述編程語言大多都提供獲得系統(tǒng)時間的方法。Java語言有多種方法可以獲得系統(tǒng)當前時間。比如,可以用System.currentTimeMillis()方法的返回值來計算當前系統(tǒng)時間。該方法返回GMT1970年1月1日00:00:00開始到當前時刻的毫秒數。按下列步驟計算出當前的秒數、分鐘和小時數:(1)調用System.currentTimeMillis()方法返回1970年1月1日午夜到現(xiàn)在的毫秒數(例如:1592280564718毫秒),將其存放到變量t中。設計思路(2)將總毫秒數t除以1000可以得到總秒數(例如,1592280564718/1000=1592280564秒),將其存到變量seconds中。(3)計算seconds%60,結果的余數就是當前的秒數(1592280564%60=24秒),將其存放到變量s中。(4)計算seconds/60,可以得到當前總分鐘數(1592280564/60=26538009分鐘),將其存放到變量mimutes中。設計思路(5)計算mimutes%60,的余數就是當前的分鐘數(26538009%60=9分鐘),將其存放到變量m中。(6)計算mimutes/60,可以得到當前總小時數(例如,26538009/60=442300小時),將其存放到變量hours中。(7)計算hours%24的結果,就得到當前的小時數(例如,442300%24=4),將其存放到變量h中。longt=System.currentTimeMillis();longseconds=t/1000;//總秒數longs=seconds%60;longminutes=seconds/60;//總分鐘數longm=minutes%60;longhours=minutes/60;//總小時數longh=hours%24; System.out.println("當前時間:"+h+":"+m+":"+s);程序2.8CurrentTime.java6.1.1課堂討論及訓練問題描述:1.要求用戶從鍵盤讀入一個double型數,輸出該數的整數部分和小數部分。2.表達式25/4的結果是多少?如果希望得到浮點數結果,如何重寫表達式?
3.如何用最有效的方法計算22乘以8等于多少?6.1.1課堂討論及訓練編寫程序,要求用戶從鍵盤輸入a、b和c的值,計算下列表達式的值。
提示:用Math.sqrt(x)求x的平方根。Java語言程序設計第3章結構化編程
1選擇結構23主要內容Java語言程序設計(第4版)清華大學出版社2022switch語句與switch表達式案例:兩位數加減法45循環(huán)結構案例:求最大公約數6案例:打印輸出若干素數Java語言程序設計選擇結構6.1.1三種控制結構Java語言程序設計(第4版)答疑結構化程序設計有三種基本控制結構:順序結構、選擇結構和循環(huán)結構。順序結構比較簡單,程序按語句的順序依次執(zhí)行。選擇結構:根據是否滿足某個條件確定執(zhí)行哪些操作。循環(huán)結構:根據是否滿足某個條件確定反復執(zhí)行某些操作。6.1.1單分支結構Java語言程序設計(第4版)
if(條件){//語句組}<條件>是一個布爾表達式,布爾表達式應該使用圓括號括住,它的值為true或false。程序執(zhí)行的流程是:首先計算條件表達式的值,若其值為true,則執(zhí)行語句(組)語句序列,否則轉去執(zhí)行if結構后面的語句條件語句組truefalse程序要求用戶從鍵盤輸入兩個整數,分別存入變量a與b,如果a大于b,則交換a和b的值,也就是保證a小于或等于b,最后輸出a和b的值。單分支if語句Scannerinput=newScanner(System.in);System.out.print("請輸入整數a:");inta=input.nextInt();System.out.print("請輸入整數b:");intb=input.nextInt();if(a>b){intt=b;b=a;a=t;}程序3.1ExchangeDemo.javaSystem.out.println("a="+a);System.out.println("b="+b);在if語句中,如果花括號內只有一條語句,則可以省略化括號。if(num%5==0){
System.out.println(num+"能被5整除。");}單分支if語句與下面代碼等價。if(num%5==0)
System.out.println(num+"能被5整除。");6.1.1雙分支if-else語句Java語言程序設計(第4版)
if(條件){//語句組1}else{//語句組2}雙分支if-else語句是最常用的選擇結構,它根據條件是真是假,決定執(zhí)行的路徑。if-else結構的一般格式如下:條件truefalse語句組2語句組1判斷年份是否是閏年。符合下面兩個條件之一的年份即為閏年:(1)能被400整除;(2)能被4整除,但不能被100整除。if~else語句應用if(year%400==0||(year%4==0&&year%100!=0){//輸出是閏年}else{//輸出不是閏年}Scannerscan=newScanner(System.in);System.out.print("請輸入年份:");intyear=scan.nextInt();if(year%400==0||(year%4==0&&year%100!=0)){System.out.println(year+"年是閏年。");}else{System.out.println(year+"年不是閏年。");}條件運算符(conditionaloperator)的格式如下:<條件表達式>?<表達式1>:<表達式2>因為有三個操作數,又稱為三元運算符。條件運算符<條件表達式>為關系或邏輯表達式,其計算結果為布爾值。如果該值為true,則計算<表達式1>的值,并將其結果作為條件表達式的結果;如果該值為false,則計算<表達式2>的值,并將其結果作為條件表達式的結果。6.1.1條件運算符Java語言程序設計(第4版)
條件運算符可實現(xiàn)if~else結構。若max,a,b是int型變量:max=(a>b)?a:b;if(a>b){max=a;}else{max=b;}6.1.1嵌套的if語句Java語言程序設計(第4版)
if或if-else結構中語句可以是任意合法的Java語句,甚至可以是其他的if或if-else結構。內層的if結構稱為嵌套在外層的if結構中。例如,下面就是一個嵌套的if結構,其功能是求a、b和c中最大值并將其保存到max中。。6.1.1多分支的if-else結構Java語言程序設計(第4版)
如果程序邏輯需要多個選擇,可以在if語句中使用一系列的elseif語句,這種結構稱為階梯式if-else結構。問題描述編寫程序,要求輸入一個人的身高和體重,計算并打印出他的BMI,同時顯示BMI是高還是低。對于一個成年人,BMI值的含義如下:BMI<18.5,表示偏瘦;18.5≤BMI<25.0,表示正常;25.0≤BMI<30.0,表示超重;BMI≥30.0,表示過胖。Scannerinput=newScanner(System.in);doubleweight,height;doublebmi;System.out.print("請輸入你的體重(單位:公斤):");weight=input.nextDouble();System.out.print("請輸入你的身高(單位:米):");height=input.nextDouble();bmi=weight/(height*height);程序3.2ComputeBMI.java
System.out.println("你的身體質量指數是:"+bmi);if(bmi<18.5){System.out.println("你的體重偏瘦。");}elseif(bmi<25.0){System.out.println("你的體重正常。");}elseif(bmi<30.0){System.out.println("你的體重超重。");}else{System.out.println("你的體重過胖。");}Java語言程序設計switch語句和switch表達式Java語言從一開始就提供了switch語句實現(xiàn)多分支結構。從Java12開始對switch語句進行了修改并支持switch表達式。盡管Java仍然支持舊的switch結構,但建議讀者熟悉并使用新的switch語句和switch表達式。概述如果需要從多個選項選擇其中一個,可以使用switch語句。switch語句主要實現(xiàn)多分支結構,一般格式如下:switch語句switch(表達式){
case
值1->
語句(組)1;
case值2->
語句(組)2;…
case值n->
語句(組)n;[default->語句(組)]}表達式值類型為byte,short,int,char,enum,String值為常量或常量表達式語句組,多個語句使用大括號結束switch結構所有情況都不匹配執(zhí)行的語句組值后面是->,不是冒號:當程序執(zhí)行到switch語句,首先計算<表達式>的值,然后用該值依次與每個case中的常量值(或常量表達式)進行比較,如果等于某個值,則執(zhí)行該case子句中后面的語句(組),之后結束switch結構。每個case后面使用箭頭號(->)指定要執(zhí)行的語句(組),這里可以是一條語句,也可以包含多條語句。如果包含多條語句,使用花括號。switch語句switch語句的執(zhí)行流程如圖3-3所示。用switch結構實現(xiàn)多重選擇。下面程序要求從鍵盤輸入一個季節(jié)數字(1,2,3,4),程序根據輸入的數輸出一句話。switch語句Scannerinput=newScanner(System.in);System.out.print("輸入一個季節(jié)(1,2,3,4):");intseason=input.nextInt();switch(season){case1->System.out.println("春雨驚春清谷天");case2->System.out.println("夏滿忙夏暑相連");case3->System.out.println("秋處露秋寒霜降");case4->System.out.println("冬雪雪冬小大寒");default->System.out.println("季節(jié)輸入非法.");}程序3.3SwitchDemo.java在switch結構中,除了可以執(zhí)行語句外,還可以使用switch表達式,即通過switch結構返回一個值,并將該值賦給變量。例如,下面代碼根據day的值返回一個數值賦給變量numLetters。switch表達式DayOfWeekday=DayOfWeek.SATURDAY;intnumLetters=switch(day){
caseMONDAY,FRIDAY,SUNDAY->6;caseTUESDAY->7;caseTHURSDAY,SATURDAY->8;caseWEDNESDAY->9;};System.out.println(numLetters);//輸出:8下面程序從鍵盤輸入一個年份(如2000年)和一個月份(如2月),用switch表達式返回該月的天數(29),將其存入一個變量。switch表達式Scannerinput=newScanner(System.in);System.out.print("輸入一個年份:");intyear=input.nextInt();System.out.print("輸入一個月份:");intmonth=input.nextInt();intnumDays=switch(month){case1,3,5,7,8,10,12->31;case4,6,9,11->30;程序3.5SwitchExprDemo.java//對2月需要判斷是否是閏年case2->{ if(((year%4==0)&&!(year%100==0))||(year%400==0))
yield29;
else
yield28;}default->0;};System.out.println("該月的天數為:"+numDays);6.1.1switch語句Java語言程序設計(第4版)
編寫程序,從鍵盤輸入一個年份(如2016年)和一個月份(如2月),輸出該月的天數(29)。問題描述:Java語言程序設計案例:兩位數加減運算開發(fā)一個讓小學生練習兩位整數加減法的程序,要求程序運行隨機生成兩個兩位數及加減號(要保證減法算式的被減數大于減數),顯示題目讓學生輸入計算結果,程序判斷結果是否正確。兩位數加減運算(1)要實現(xiàn)加減法運算,首先應該隨機產生兩個兩位整數。隨機生成整數有多種方法,可以使用Math.random()方法生成一個隨機浮點數,然后將它擴大再取整。random()方法返回0.0~1.0(不包括)之間的浮點數,要得到10~99之間的整數,可以使用下面表達式:intnumber1=10+(int)(Math.random()*90);(2)確定加或減運算。這也可以通過產生2個隨機數(比如,0和1,0表示加法,1表示減法)確定。
intoperator=(int)(Math.random()*2);(3)設學生沒有學過負數概念,如果做減法運算,要保證第一個數大于第二個數。也就是如果number1小于number2,應該交換這兩個數。if(number1<number2){
inttemp=number2;number2=number1;number1=temp;}
Scannerinput=newScanner(System.in);intnumber1=10+(int)(Math.random()*90);intnumber2=10+(int)(Math.random()*90);intoperator=(int)(Math.random()*2);intresult,answer;if(operator==0){result=number1+number2;System.out.print(number1+"+"+number2+"=");}else{if(number1<number2){程序3.7Calculator.javainttemp=number2;number2=number1;number1=temp;}result=number1-number2;System.out.print(number1+"-"+number2
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 甘肅2025年甘肅西北師范大學旅游學院誠聘海內外高層次人才筆試歷年參考題庫附帶答案詳解
- 2025年度裝配式建筑土建清工承包合同示范文本6篇
- 漯河2024年河南漯河市發(fā)展和改革委員會所屬事業(yè)單位招聘3人筆試歷年參考題庫附帶答案詳解
- 湖州浙江湖州長興縣綜合行政執(zhí)法局長興人事人才網招聘輔助執(zhí)法人員8人筆試歷年參考題庫附帶答案詳解
- 泉州2025年福建泉州師范學院面向具有突出貢獻運動員招聘體育教師筆試歷年參考題庫附帶答案詳解
- 成都四川成都市雙流區(qū)黃龍溪學校招聘體育教師筆試歷年參考題庫附帶答案詳解
- 廊坊2025年河北廊坊香河縣選聘教師100人筆試歷年參考題庫附帶答案詳解
- 2025年湖南婁底市漣源市國家糧食儲備有限責任公司招聘筆試參考題庫附帶答案詳解
- 2025年湖北黃岡市浠水縣城市發(fā)展投資集團有限公司招聘筆試參考題庫附帶答案詳解
- 2025年廣西桂林市雁山區(qū)事業(yè)單位直接招聘7人歷年高頻重點提升(共500題)附帶答案詳解
- 電磁閥培訓(精選)課件
- A彌漫大b細胞淋巴瘤護理查房
- 維保移交協(xié)議范本
- 初一上學期期末測試卷英語
- 上海沃陸變頻器VL600型變頻器說明書概要
- 2023年高考物理一輪復習:拋體運動與圓周運動(附答案解析)
- VRV空調技術要求和質量標準
- 第二講VSP地震勘探
- 干砌石護坡工程施工組織設計方案
- 物業(yè)品質提升ppt課件
- -烏兔太陽擇日法表
評論
0/150
提交評論