版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java语言程序设计第1章Java起步入门
1Java起源与演进23主要内容Java语言程序设计(第4版)清华大学出版社2023Java平台与运行机制建立开发环境45第一个Java程序集成开发环境6JShell交互式编程环境Java语言程序设计Java的起源与演进Java的起源与演进Java语言程序设计(第4版)清华大学出版社最初是由美国Sun公司的JamesGosling等人开发的一种面向对象编程语言。语言最初取名为Oak(橡树),后取名Java。Java于1995年5月23日正式发布。Java随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。Java具备显著优势和广阔前景。
Java的起源与演进Java语言程序设计(第4版)清华大学出版社20多年来,Java语言不断推出新版本,增加新功能。1995.5.23正式发布1996Java1.01999J2SE2000Java1.32002Java1.42004J2SE52006Java62007JavaFX2021.9Java172018.9Java112014Java82010Java72017.9Java9Java的起源与演进Java的起源与演进Java语言程序设计(第4版)清华大学出版社Java语言的优点简单的面向对象的分布式的解释型的平台独立的可移植的健壮的安全的高性能的多线程的动态的Java的起源与演进Java语言程序设计(第4版)清华大学出版社面向对象的:Java语言是一种面向对象的语言,面向对象的编程方法是当今主流的编程方法,Java语言支持所有的面向对象特征。面向对象编程方法也是本课程的重点。平台独立的:Java语言是平台独立的,或者是跨平台的。Java源程序经过编译以后产生的类文件(字节码文件),这种文件可以不用修改,即可在不同的平台上运行。从而实现,“编写一次,到处运行”。JVM(JavaVirtualMachine)Java虚拟机。运行字节码。JRE(JavaRuntimeEnviromet)Java运行时环境。
JVM和Java类库一起构成。Java语言程序设计Java平台与运行机制Java字节码与平台独立Java语言程序设计(第4版)清华大学出版社“Java是平台独立的”或“跨平台的”。传统的编程中,源代码要编译成可执行代码。源代码编译本机代码Java字节码与平台独立Java语言程序设计(第4版)清华大学出版社“Java中,源代码被编译成字节码(bytecode)。字节码需要在Java虚拟机上运行。
Java成为一种跨平台的语言,进而实现“编写一次,到处运行”。源代码编译字节码WindowsJVMUnixJVMLinuxJVMJVM、JRE和JDKJava语言程序设计(第4版)清华大学出版社JVM(JavaVirtualMachine)Java虚拟机。运行字节码。JRE(JavaRuntimeEnviroment)Java运行时环境。
JVM和Java类库一起构成。JDK(JavaDevelopmentToolkit)Java开发工具包。包括编译器、解释器和其他工具。它是编译和运行Java程序的必备软件。JVMJREJDKJava平台有三大版本,分别代表Java的三个应用领域。Java标准版(JavaStandardEdition,JavaSE)Java企业版(JavaEnterpriseEdition,JavaEE)Java微型版(JavaMicroEdition,JavaME)用Java可以开发下面类型的程序:控制台和窗口应用程序。在服务器上运行的Servlet、JSP、JSF以及其他JavaEE标准支持的应用程序。嵌入式应用程序,如在Android系统下运行的程序。1.2.1Java平台与应用领域Java语言程序设计建立开发环境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所示。关于环境变量Java语言程序设计(第4版)清华大学出版社JDK安装时,创建一个目录:
C:\ProgramFiles\CommonFiles\Oracle\Java\javapath并将下面文件复制到该目录中:javac.exe,java.exe,javaw.exe,jshell.exe并且将上述目录添加到PATH环境变量中,因此不需要设置PATH环境变量就可以编译和运行程序。Java语言程序设计第一个Java程序第一个Java程序Java语言程序设计(第4版)清华大学出版社开发Java程序通常分三步:1.编辑源程序;2.编译源程序;3.执行或调试程序,得到程序输出结果。HelloWorld.javaHelloWorld.classC:\>javaHelloWorldHello,World!publicclassMyProgram{publicstaticvoidmain(String[]args){
System.out.println(“千里之行,始于足下!");}}为了保存源文件和编译后的类文件,先在D盘上创建一个名为study的目录。第一个Java程序Java语言程序设计集成开发环境1.5集成开发环境IDE是IntegratedDevelopmentEnviroment的缩写,称为集成开发环境。Eclipse下载地址是
IntelliJIDEA下载地址是
Java语言程序设计(第4版)清华大学出版社2023/12/9Java语言程序设计使用IntelliJIDEA开发工具使用IntelliJIDEA开发程序Java语言程序设计(第4版)清华大学出版社IntelliJIDEA是JetBrains公司的产品,简称IDEA,它是业界被公认为最好的Java开发工具。IDEA有两个版本:旗舰版(Ultimate)和社区版(Community)。旗舰版需要付费,但有30天试用期,社区版是免费开源的。IntelliJIDEA下载地址是http:///idea/download。2023/12/9Java语言程序设计JShell交互式编程环境JDK提供的一种命令行工具,称为JavaREPL(Read-Eval-Print-Loop)。在jshell>提示符下,允许用户直接输入代码片段,表达式。语句。各种声明(类、接口、方法等)。1.6Jshell交互式编程环境Java语言程序设计(第4版)清华大学出版社启动命令提示符窗口,在提示符下输入jshell,显示jshell>提示符。安装了JDK并设置了Path环境变量后即可使用JShell。启动命令提示符窗口,在提示符下输入jshell,显示jshell>提示符,如图1-12所示。1.6Jshell交互式编程环境提示,在输入表达式或语句时,不必在语句的结尾使用分号(;),JShell会自动给表达式添加分号。另外,在输入时可以按Tab键显示激活代码提示,再次按Tab键显示所有输入提示。如果输入一个表达式,JShell将自动计算并显示表达式的值,同时为表达式指定一个变量,自动为变量命名,变量名使用$开头。1.6Jshell交互式编程环境在JShell中还可以定义变量,执行循环语句等,如图1-14所示。1.6Jshell交互式编程环境Java语言程序设计第2章数据类型与运算符
1Java类型系统23主要内容Java语言程序设计(第4版)清华大学出版社2022变量与赋值基本类型及字面值45字符串类型软件开发过程6数据类型转换7运算符89程序文档风格和注释案例:求解线性方程组10案例:计算显示当前时间Java语言程序设计2.1Java类型系统2.1Java类型系统Java语言程序设计(第4版)清华大学出版社Java的数据类型可分为两种:基本数据类型(primitivedatatype)引用数据类型(referencedatatype)6.1.12.1Java类型系统基本数据类型整数类型字节型byte短整型short整型int长整型long浮点类型单浮点型float双浮点型double字符类型char布尔类型boolean
引用数据类型类class
数组[]name
接口interface记录类型record
枚举类型enum
注解类型@interfaceJava语言程序设计(第4版)清华大学出版社2.1.1基本数据类型Java语言程序设计(第4版)清华大学出版社数据类型占字节数所占位数数的范围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版)清华大学出版社数据类型占字节数所占位数数的范围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)用来为变量、方法和类进行命名。命名规则:以字母、下划线(_)或美元符($)开头,其后可以是字母、下划线、美元符或数字,长度没有限制。合法标识符:intTest,Manager_Name,_var,$Var6.1.1多单词的标识符有两种命名方法:
PascalCase,每个单词的首字母大写。类、接口用该方法命名
camelCase,第一个单词的首字母小写,变量和方法用该方法命名合法的标识符:Student,BankAccountnumberOfStudent,setName()Java标识符6.1.1标识符是区分大小写的,下面两个标识符是不同的。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型。数据类型占字节数所占位数数的范围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注意,在给变量赋值时,不能超出该数据类型所允许的范围,否则发生编译错误。下面语句发生编译错误。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标准。数据类型占字节数所占位数数的范围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字符是程序中可以出现的任何单个符号。Java使用Unicode为字符编码,Unicode字符集使用两个字节(16位)为字符编码,可表示65536个字符。字面值用单引号将字符括起来,大多数可见的字符都可用这种方式表示,如'a'、'@'、'我'等。有些特殊字符用转义序列来表示。用反斜杠(\)表示转义,如'\n'表示换行。字符类型在Java程序中还可以使用反斜杠加3位八进制数表示字符,格式为‘\ddd’,如‘\141’表示字符‘a’。也可以使用反斜杠加4位十六进制数表示字符,格式为‘\uxxxx’,如‘\u0062’表示字符‘b’,‘\u4F60’和'\u597D'分别表示中文的“你”和“好”。任何的Unicode字符都可用这种方式表示。字符类型转义字符说
明转义字符说
明\'单引号字符\b退格\"双引号字符\r回车\\反斜杠字符\n换行\f换页\t水平制表符也可以使用反斜杠加4位十六进制数表示字符,格式为'\uxxxx',如'\u0062'表示字符'b','\u4F60'和'\u597D'分别表示中文的“你”和“好”。
6.1.1布尔型字面值很简单,只有两个值true和false,分别用来表示逻辑真和逻辑假。布尔型值使用boolean关键字声明,如下面语句声明了布尔型变量t并为其赋初值true:
booleant=true;所有关系表达式的返回值都是布尔型的数据,如表达式10<9的结果为false。布尔型数据也经常用于选择结构和循环结构的条件中布尔类型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类实现的。可用String声明和创建一个字符串。可以通过双引号定界符创建一个字符串字面值。Strings="Javaiscool.";字符串类型注意,一个字符串字面值不能分在两行来写。例如,下面代码产生编译错误:Strings="学而时习之,
不亦说乎?";字符串类型对于较长的字符串,可以使用加号运算符(+)将两个字符串连接:Strings1="有朋自远方来”+",不亦乐乎?";Strings2="人不知而不愠“+",不亦君子乎?";可以将一个String和一个基本类型或者另一个对象连接在一起。例如,下面代码就是字符串常量和一个int型变量及double型变量连接。
intage=25;doublesalary=8000;
System.out.println("我的年龄是:"+age);
System.out.println("我的工资是:"+salary);字符串类型字符串与其他类型值连接,系统首先将其他类型值转换为字符串,然后两个字符串再连接。Java语言程序设计2.5软件开发过程软件开发过程Java语言程序设计(第4版)
软件开发过程是指软件设计思路和实现方法的一般过程。一般都是一个多阶段过程,通常包括需求确定、系统分析、系统设计、实现、测试、部署和维护。这里重点讨论几个重要步骤。理解问题。就是需求分析。开发解决方案。算法是解决问题所需的一组逻辑步骤。实现。也称为编码。测试。测试的目的是发现程序的错误。问题描述Java语言程序设计(第4版)
编写一个简单的计算圆面积的程序,要求从键盘输入圆的半径,程序计算并输出圆的面积和周长。软件开发过程Java语言程序设计(第4版)
理解问题。首先需要仔细阅读并准确理解需求说明书,这通常包括提问以确认对问题的理解是否正确。开发解决方案。设计算法。算法是解决问题所需的一组逻辑步骤。
第1步:读取半径值,存入变量radius中。
第2步:使用下面公式计算圆面积area和周长perimeter:area=PI*radius*radiusperimeter=2*PI*radius
第3步:显示面积值area和周长perimeter。软件开发过程Java语言程序设计(第4版)
实现。实现也称为编码(编写代码)。编写代码就是将算法转换成程序。测试。程序测试是为发现程序的错误而执行程序。设计一些用例。
编译错误(语法错误)
运行时错误。运行时用户输入了错误数据
逻辑错误。是最难发现和纠正的错误,对于本例,假如将计算圆周长公式错写成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表达式类型提升除了赋值可能发生类型转换外,在含有变量的表达式中也有类型转换的问题。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位小数,可以通过下面程序实现。数据类型转换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)是由运算符和操作数按一定语法规则组成的符号序列。
(2+3)*(8-5)a>b每个表达式经过运算后都会产生一个确定的值。6.1.1按照功能分
算术运算符
逻辑运算符关系运算符赋值运算符
位运算符等按照所需要的操作数个数分
一元运算符++a二元运算符a&&b三元运算符a>b?a:b运算符6.1.1算术运算符算术运算符有
二元运算符:加(+)、减(-)、乘(*)、除(/)、取余数(%)5个
一元运算符:正(+)、负(-)、自增(++)、自减(--)4个。6.1.1运算符含
义运算符含
义>大于<=小于或等于>=大于或等于==相等<小于!=不相等关系运算符(也称比较运算符)用来比较两个值的大小或是否相等。可构成关系表达式,结果为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个字节32位二进制表示。42的原码为
00000000000000000000000000101010+42的补码为
00000000000000000000000000101010-42的补码为
111111111111111111111111110101106.1.1共有4个位逻辑运算符:~(按位取反)、&(按位与)、|(按位或)、^(按位异或)位逻辑运算是对一个整数的二进制位进行运算。AB~AA&BA|BA^B001000011011100011110110位逻辑运算符6.1.1移位运算符共有3个移位运算符:<<左移运算符>>右移运算符>>>无符号右移运算符6.1.1运算符优先级运算优先级是指在一个表达式中出现多个运算符又没有用括号分隔时,先运算哪个后运算哪个。
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运算符优先级不必死记硬背运算符的优先级。必要时可以在表达式中使用圆括号,圆括号的优先级最高。圆括号还可以使表达式显得更加清晰。例如,考虑以下代码:
intx=5;inty=5;booleanz=x*5==y+21;
booleanz=(x*5)==(y+21);6.1.1运算符结合性结合性是指对某个运算符构成的表达式,计算时如果先取运算符左边的操作数,后取运算符,则该运算符是左结合的,若先取运算符右侧的操作数,后取运算符,则是右结合的。所有的二元运算符(如+、<<等)都是左结合的,而赋值运算符(=、+=等)是右结合的。Java语言程序设计2.8程序文档风格和注释写出正确的、可运行的Java程序固然重要,但是,编写出易于阅读和可维护的程序同样重要。概述采用统一的编码规范是使代码易于阅读的方法之一。编码规范包括文件名、文件的组织、缩进、注释、声明、语句、空格以及命名规范等。保持一致的缩进会使程序更加清晰、易读、易于调试和维护。即使将程序的所有语句都写在一行中,程序也可以编译和运行,但适当的缩进可使人们更容易读懂和维护代码。2.8.1一致的缩进和空白Java规范建议的缩进为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的文档规范推荐使用行末格式,这样使代码更紧凑,且占据较少空间。本书与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问题描述编程语言大多都提供获得系统时间的方法。Java语言有多种方法可以获得系统当前时间。比如,可以用System.currentTimeMillis()方法的返回值来计算当前系统时间。该方法返回GMT1970年1月1日00:00:00开始到当前时刻的毫秒数。按下列步骤计算出当前的秒数、分钟和小时数:(1)调用System.currentTimeMillis()方法返回1970年1月1日午夜到现在的毫秒数(例如: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循环结构案例:求最大公约数6案例:打印输出若干素数Java语言程序设计选择结构6.1.1三种控制结构Java语言程序设计(第4版)答疑结构化程序设计有三种基本控制结构:顺序结构、选择结构和循环结构。顺序结构比较简单,程序按语句的顺序依次执行。选择结构:根据是否满足某个条件确定执行哪些操作。循环结构:根据是否满足某个条件确定反复执行某些操作。6.1.1单分支结构Java语言程序设计(第4版)
if(条件){//语句组}<条件>是一个布尔表达式,布尔表达式应该使用圆括号括住,它的值为true或false。程序执行的流程是:首先计算条件表达式的值,若其值为true,则执行语句(组)语句序列,否则转去执行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语句是最常用的选择结构,它根据条件是真是假,决定执行的路径。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版)
条件运算符可实现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语句实现多分支结构。从Java12开始对switch语句进行了修改并支持switch表达式。尽管Java仍然支持旧的switch结构,但建议读者熟悉并使用新的switch语句和switch表达式。概述如果需要从多个选项选择其中一个,可以使用switch语句。switch语句主要实现多分支结构,一般格式如下:switch语句switch(表达式){
case
值1->
语句(组)1;
case值2->
语句(组)2;…
case值n->
语句(组)n;[default->语句(组)]}表达式值类型为byte,short,int,char,enum,String值为常量或常量表达式语句组,多个语句使用大括号结束switch结构所有情况都不匹配执行的语句组值后面是->,不是冒号:当程序执行到switch语句,首先计算<表达式>的值,然后用该值依次与每个case中的常量值(或常量表达式)进行比较,如果等于某个值,则执行该case子句中后面的语句(组),之后结束switch结构。每个case后面使用箭头号(->)指定要执行的语句(组),这里可以是一条语句,也可以包含多条语句。如果包含多条语句,使用花括号。switch语句switch语句的执行流程如图3-3所示。用switch结构实现多重选择。下面程序要求从键盘输入一个季节数字(1,2,3,4),程序根据输入的数输出一句话。switch语句Scannerinput=newScanner(System.in);System.out.print("输入一个季节(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("季节输入非法.");}程序3.3SwitchDemo.java在switch结构中,除了可以执行语句外,还可以使用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语言程序设计案例:两位数加减运算开发一个让小学生练习两位整数加减法的程序,要求程序运行随机生成两个两位数及加减号(要保证减法算式的被减数大于减数),显示题目让学生输入计算结果,程序判断结果是否正确。两位数加减运算(1)要实现加减法运算,首先应该随机产生两个两位整数。随机生成整数有多种方法,可以使用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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 花式动感单车课程设计
- 2024至2030年中国家电零配件行业投资前景及策略咨询研究报告
- 2024年实验型喷雾干燥机项目可行性研究报告
- 2024年中型远红外烤漆房项目可行性研究报告
- 成都幼儿园主题课程设计
- 2024年中国美式卡头市场调查研究报告
- 中国防锈油市场深度调查研究报告(2024-2030版)
- 中国铷铯盐未来发展预测及投资风险分析研究报告(2024-2030版)
- 石墨烯课程设计论文
- 中国输配电设备行业应用动态与发展前景预测研究报告(2024-2030版)
- 农业灌溉装置市场环境与对策分析
- 统编版道德与法治初二上学期期中试卷及答案指导(2024年)
- 部编版小学五年级上册道法课程纲要(知识清单)
- 职业技能等级认定质量控制及规章制度
- 山东省临沂市(2024年-2025年小学四年级语文)人教版期中考试(上学期)试卷及答案
- 英大传媒投资集团限公司2024年应届毕业生招聘(第一批)高频500题难、易错点模拟试题附带答案详解
- 2024人教版道法七年级上册第二单元:成长的时空大单元整体教学设计
- 肺胀(慢性阻塞性肺病)中医优势病种诊疗方案
- 铁路交通安全主题班会课件
- 数学苏教版四年级(上册)1、解决问题的策略 苏教版(共13张)
- 2023-2024学年北京市某中学七年级上学期期中考试地理试卷(含详解)
评论
0/150
提交评论