Java程序设计基础(第2版) 课件 第1、2章 Java简介、Java语言基础_第1页
Java程序设计基础(第2版) 课件 第1、2章 Java简介、Java语言基础_第2页
Java程序设计基础(第2版) 课件 第1、2章 Java简介、Java语言基础_第3页
Java程序设计基础(第2版) 课件 第1、2章 Java简介、Java语言基础_第4页
Java程序设计基础(第2版) 课件 第1、2章 Java简介、Java语言基础_第5页
已阅读5页,还剩186页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Java简介董东计算机与网络空间安全学院1第1章Java简介1.1面向对象的程序设计 1.2开发环境 1.3在命令提示符窗口设计程序 1.4使用jGRASP设计程序 1.5使用Eclipse设计程序 1.6Java程序结构 1.7代码风格 1.8注释2冯•诺伊曼体系结构31.1面向对象的程序设计进入九十年代后,计算机的发展呈现出特征跨平台网络化嵌入式硬件环境的变化对计算机语言提出了新的要求。比如:能够运行在各种消费类电子产品上,如手机、平板电脑、洗衣机、空调、微波炉等。能够处理多线程;能够以“面向对象”的思维模式(paradigm)编写程序,以简化大规模复杂应用的开发。4Java语言设计理念:编写一次,到处运行(writeonce,runanywhere)发展1996年1月,Sun公司发布了Java的第一个开发工具箱JDK1.0版本1999年6月,Sun公司发布了第二代Java平台(简称Java2)2005年6月,Sun公司发布JavaSE6从此,各种Java版本中不再有“2”:J2SE改为JavaSE;J2EE改为JavaEE;J2ME改为JavaME。2009年,Sun公司被甲骨文(Oracle)公司收购56JavaEE已经被转移至Eclipse基金会,并更名为JakartaEE。OpenJDK成为Java标准实现的主要开源参考实现1.1面向对象的程序设计面向对象的程序设计Object-OrientedProgramming,OOP一种问题求解的范式创建对象,让对象做些事情某对象p上预定义了若干功能,称为“方法”另外一个对象q访问对象p的功能称为“方法调用”或者“消息传递”具有相同特征的对象的抽象称为“类”问题求解在现实生活中无处不在7面向对象问题求解举例学生小明饿了,想要吃饭。这就产生了问题。为了解决这个问题,小明来到餐厅,跟餐厅服务员说,“要一碗牛肉面”。餐厅服务员对后台的厨师大声喊:“一碗牛肉面!”在这个场景中涉及了三个对象:小明、餐厅服务员、厨师。这三个对象合作解决“小明肚子饿”的问题。首先小明向餐厅服务员发出了消息,启动了餐厅服务员的工作;餐厅服务向厨师发送消息,启动了厨师的工作;厨师完成工作后把结果(一碗面)传递给服务员,服务员把这一碗面交付给小明,并收款;小明吃到肚子里,“肚子饿”问题解决。8面向对象的问题求解模式就是现实生活中的“对象+消息”。问题求解范式在运行时刻,有很多为了求解同一个问题而相互合作的对象,这些对象之间通过发送消息实现合作。“对象”是现实世界的事物在计算机中的映射。现实世界的任何事物,无论是看得见的还是看不见的,都可以映射到计算机中的“对象”:一本书、一部手机、一辆汽车、一门课等。9面向对象

=类

+对象

+消息

+继承属性和行为10一辆小汽车属性发动机排量(displacement)型号(model)车身颜色(color)行驶速度(speed)功能加速(accelerate)鸣笛(honk)刹车(brake)举例定义Car类属性方法定义MyCar类创建汽车对象让其鸣笛11问题:创建一个汽车对象,并让其鸣笛。Car.javaMyCar.java类和对象12类图类图是统一建模语言(UnifiedModellingLanguage,UML)中重要的图之一。整个矩形框表示“类”。这个矩形框分成了三部分,分别描述类的名字、类的属性以及类的行为。类图不仅可以描述一个类及其组成;还可以描述类与类之间的关系。类之间的关系有:继承(inheritance)关联(association)实现(realization)依赖(dependency)13继承继承关系建模现实世界中的“is-a”关系定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行可以加入若干新的属性和行为修改原来的属性和行为使之更适合子类需要14实现一个类实现了另外一个类中声明的行为。在UML类图中使用末端是空心三角箭头的虚线表示。接口(interface)和接口的实现类的配合体现了开闭原则:对扩展开放;对修改封闭。也就是说,要在不改动当前类的情况下增加新的功能。在接口中展示了简单的API接口;在实现类中提供的复杂的功能实现。例如驾驶员看到的是方向盘、刹车踏板、油门踏板、车速仪表盘等;而汽车如何传导信号给刹车片刹车、发动机如何加速等实现细节被隐藏了。15封装封装性是面向对象的程序设计的主要特征之一。对访问者隐藏对象的状态或内部表示称为“封装”。类私有包私有16多态通过相同类型的引用把相同的消息发送给不同的对象产生不同的效果,这种现象称为“多态”。17面向对象程序设计解决具体问题的一般思路18面向对象程序设计

解决具体问题的一般过程19Java程序从静态角度看,Java程序就是类的集合;从运行时刻看,Java程序是对象的结合。设计Java程序,就是设计若干类。一般每个类对应一个.java磁盘文本文件201.2开发环境Java语言的开发环境包括:Java开发工具箱(JavaDevelopmentKit,JDK)编译器(compiler)解释器(interpreter)装入器(loader)调试器(debugger)集成开发环境(IntegratedDevelopmentEnvironment,IDE)EclipseVisualStudioCodejGrasp21jGrasp安装官方网站下载页面,下载bundedwithJava21版本/user-cgi/grasp/grasp.pl?;dl=download_jgrasp.html22jGraspbundedOpenJDK2123设计Java程序的过程设计若干类,并将其分别保存为相应的.java文本文件,即扩展名为.java,文件名与类名相同;编译这些源文件,生成相应的以.class为扩展名的文件。这些.class文件称为字节码文件;启动Java虚拟机(JVM),将字节码文件装入虚拟机运行;如果在编译时刻或者运行时刻发生任何错误,则修改源文件,重新编译和运行。24Java平台25JDK26/cn/java/technologies/downloads/#jdk21-windows设置Windows11环境变量定义JAVA_HOME在资源管理器中打开安装JavaJDK的目标文件夹,该文件夹称为JAVA_HOME;设置资源管理器显示地址栏以及在地址栏中显示完整路径,并从地址栏中复制该文件夹的完整路径;从资源管理器中右击“此电脑”,从弹出菜单中选择“属性”;在弹出的“设置”对话框中选择“系统|关于”;单击“高级系统设置”链接,弹出“系统属性”对话框;单击“环境变量”,单击“新建”,在弹出对话框中的“变量名”文本框中输入:JAVA_HOME;在“变量值”文本框中粘贴;三个确定:单击“确定”按钮依次关闭三个对话框。2728123设置Windows11环境变量编辑环境变量PATH打开“环境变量”对话框,选择系统变量Path,单击“编辑”按钮。在“编辑环境变量”对话框中单击“新建”。输入%JAVA_HOME%\bin三次单击“确定”按钮,依次关闭对话框29设置Windows11环境变量30设置Windows10环境变量PATH在资源管理器中打开安装JavaJDK的目标文件夹;设置资源管理器显示地址栏以及在地址栏中显示完整路径,并从地址栏中复制bin文件夹的完整路径;在桌面上右击“我的电脑”,从弹出菜单中选择“属性”;在弹出的“系统属性”对话框中选择“高级”选修卡,单击“环境变量”按钮;在弹出的“环境变量”对话框的“系统变量”列表框中选择变量PATH,单击“编辑”;在“编辑系统变量”对话框中单击“变量值”文本框使其获得输入焦点,在键盘上按“Home”键是插入的定位在行首;使用Ctrl+v粘贴bin文件夹的完整路径,再键入英文标点符号中的分号“;”与其它路径隔开。单击“确定”按钮关闭所有对话框。311.3在命令提示符窗口设计程序首先使用文本编辑器,如Windows记事本,编辑若干类,并将其保存为与类的名字相同的.java源文件(sourcecode);然后使用命令javac编译这些.java源文件,生成相应的.class字节码文件。最后,使用命令java启动Java虚拟机(JVM),将字节码文件装入虚拟机运行。32在命令提示符窗口设计程序33例子设计一个计算器,能够完成加减乘除功能设置被加数10,加数2,输出和1234Calculator.javaTest.java例子设计程序计算2个平面图形圆的面积。35计算圆的面积两个对象:圆半径不同同样的方法计算面积创建两个“圆”对象分别让这两个对象计算面积36计算圆的面积告诉计算机什么是“圆”?有半径radius通过π*r2计算面积37例子38例子39例子40例子41例子42例子43命令提示窗口中文乱码chcp65001UTF-8.java保存为UTF-844Java项目一般地,一个Java项目中含有若干包;一个Java包中含有若干类。一个类是由若干成员组成,这些成员包括变量和方法。Java程序只能从约定的main方法开始执行。45JAR文件46JAR文件47注意Java语言对字母的大小写敏感。一般一个类对应一个.java文件,类名与文件名严格相同,包括大小写。一个源文件中可以有多个类,但至多有一个public的类,并且public的类名必须与文件名相一致。类名的首字母大写,不建议使用汉字作为类名。481.4jGrasp49控制结构窗口CSDjGrasp界面50设置CSD字体和字号51先取消默认再设置新值设置工作文件夹52新建Java类53编译和运行54编译光标插入点所在的源文件main方法开始运行进入调试状态RunI/O窗格1.5使用Eclipse设计程序 551.6Java程序结构56错误类型一个源文件也称为一个编译单元(compilationunit)编译器识别的错误称为编译时刻错误(compile-timeerror)由负责装入和启动虚拟机解释执行程序的命令java所识别出的错误称为运行时刻错误(run-timeerror)如果程序在编译时刻和运行时刻均没有发生错误,但是运行结果并不正确,则程序中存在逻辑错误(logicalerrors)571.7代码风格命名约定留白块风格58命名约定类名:大驼峰命名法只有一个单词类名首字母大写。如果类名中包含多个单词,则每个单词的首字母大写如RuntimeException成员名:小驼峰命名法只有一个单词的变量名和方法名中的字母均小写。如果变量名或方法名中含有多个单词,则除了第一个单词外,其它单词首字母大写如executeQuery()常量名的所有字母大写。如果名字中含有多个单词,则使用下划线隔开。如MAX_VALUE。59名字要有意义StackOverflow的创始人JoelSpolsky说,“起一个好名字应该很难,因为,一个好名字需要把要义浓缩在一到两个词。”“Creatinggoodnamesishard,butitshouldbehard,becauseagreatnamecapturesessentialmeaninginjustoneortwowords.”60留白“留白”是绘画中的术语,指在一幅画中要有空白。源代码中也要有空白,以形成清晰的逻辑结构。虽然留白不会影响程序的正确性,但影响程序的可读性。三种留白的方法缩进空行空格61缩进缩进(Indentation)使用平面空间的布局关系反映了程序部件间的逻辑关系(比如包含关系)62publicclassCalculator{privateinta;privateintb;

voidsetA(intx){a=x;}

voidsetB(inty){b=y;}

intadd(){returna+b; }

intminus(){returna-b;}}空行不同代码片段应使用空行隔开。例如每个方法有使用空行与前一个方法隔开。63空格每个二元运算符的前后都有一个空格(blank)。例如:a+b;//Goodstylea+b;//Badstyle提倡使用空格而不是使用制表符(\t)实现代码风格。使用4个空格缩进而不是使用制表符Java语句把空格、制表符,回车、换行都看作空白符(whitespace)。编译器忽略空白符64块风格块是使用一对大括号“{}”括起来的一组语句。有两种块风格:next-line风格end-of-line风格65块风格next-line风格为块另起一行并把开括号“{”放在新行的行首:66classA{voidaMethod(){//Dosomething}}块风格end-of-line风格不为块另起一行,而是直接把开括号“{”置于行尾:67classA{voidaMethod(){//Dosomething}}关键是保持一致1.8注释实现注释(implementationcomments)多行注释单行注释文档注释(documentationcomments)68多行注释多行注释形如/*...*/,即从

/*开始到*/结束。例如:69/**Thisisamultiplelinecomment.*/单行注释单行注释形如//…,即从//开始到行尾结束。例如:70//Thisisthefirstlineofamulti-linecomment.//Thisisthesecondlineofamulti-linecomment.//Thisisthethirdlineofamulti-linecomment.一般约定双斜线//与注释文本之间有一个空格单行注释和多行注释一般出现在方法体中在被注释语句上方,并与被注释代码左对齐。文档注释文档注释供文档抽取工具javadoc使用,形如/**…*/,例如:71/***ThebasicCarclass*@authorDonald.Dong(original)*/与多行注释一样,一般约定*和后面的注释文本间有一个空格,所有行的*垂直对齐。文档注释72类、成员方法、成员变量的注释必须使用文档注释,即/**注释文本*/格式,不能使用单行注释。所有的类都必须有创建者和创建日期;所有方法头部的上方除了注释返回值、参数、异常说明外,还必须指出该方法做什么事情,实现什么功能。所有的覆盖方法必须加@Override注解。第2章Java语言基础

ElementaryProgramminginJava董东计算机与网络空间安全学院73内容2.1标识符2.2基本数据类型2.3字面量2.4变量2.5运算符2.6运算符的优先级2.6表达式和语句 2.7控制台输入和输出 2.8控制结构2.9数组742.1标识符和保留字标识符必须以字母(包括Unicode字母)、下划线(_)或美元符号($)开始;除了第一个字符外,其余部分由字母、数字、下划线或美元符号组成;不能使用Java保留字作为标识符,如class、public、void等;标识符中不能含有特殊符号,即非字母、数字、下划线或美元符号。如叹号(!)at号(@)数字符号(#)百分号(%)与号(&)尖号(^)星号(*)空格

75注意不能使用Java保留字,如class、public、void等作为标识符;不要使用汉语拼音作为标识符!比如使用graduateStudent而不是yanJiuSheng。76驼峰命名法对于类名使用大驼峰命名法每个单词首字母大写如MyCar对于变量名则采用小驼峰命名法首个单词首字母小写,后续单词首字母大写如licenceNumber)77保留字78Java17基本数据类型数据类型(datatype)是包含了值以及在这些值上的操作的集合。Java中有两种类型:引用类型(referencetypes)基本数据类型(primitivetypes)引用类型包括三种:类(class)接口(interface)数组(array)基本数据类型有八种:boolean、char、byte、short、int、long、double和float。79所谓“引用”,就是用来访问对象的标识。boolean数据类型boolean表示逻辑值逻辑值只有两个:truefalse80char数据类型char表示了Unicode字符集及其上的操作81char源程序中的字符要使用单引号('')括起来。例如,'a' //字母a'\t' //制表符也可以使用Unicode编码来表示字符,如'\u0061'就是'a'。在'\u0061'中,0061是4位的十六进制数字,表示了英文字母“a”在Unicode字符集中的编号;“\u”表示把“0061”转义为1个Unicode字符而不是4个普通十六进制数字。82char字符串是字符序列。Java中使用类型String表示字符串,但是它不是基本数据类型83数值Java中把数值分成两类:整数浮点数所有数值类型都是有符号的,也就是说都有正数和负数84整数85浮点数浮点类型float共32比特(4字节)有效数字使用24比特浮点类型double共64比特(8字节)有效数字部分53比特86浮点数的“精度”指有效数字的位数注意浮点数不能精确地表示所有的实数。比如十进制数0.1只能被近似表示为二进制数0.0001100110011001100110011010。float类型的0.1与实数0.1的误差为2-25。872.3字面量字面量(literal)是值在源代码中的文本表示。根据数据类型不同,Java中字面量有:布尔字面量字符字面量整数字面量浮点数字面量字符串字面量(String类型)88字面量布尔字面量只有两个:true和false。字符字面量就是单个的Unicode字符。使用英文单引号把字符引起来以区别该符号不是标识符。例如,在源代码中使用字母a,则要写成'a'。诸如换行之类的特殊字符,则使用转义符号(\)。例如,'\n'表示换行符。89UnicodeJava将字符字面量按16位Unicode字符编译。Unicode字符集把一个字符映射到一个整数,称为Unicode代码点最小是0,最大是65535使用十六进制表示就是从0000到FFFFJava中可以使用Unicode转义'\u0000'到'\uffff'来表示单个字符,其中u的意思就是Unicode。90转义91字符串字面量字符串字面量是使用双引号引起了的字符序列例如"Java"注意无论单引号还是双引号,都是英文引号而不是中文引号92整数字面量根据进制不同,整数字面量分为十进制整数、十六进制整数、八进制和二进制整数。默认使用十进制整数,例如12。如果想使用十六进制整数,则需要在数字序列前面添加“0x”或者“0X”前缀。例如0xC表示十进制数12。要在八进制整数前添加前缀“0”,例如014表示十进制数12。Java7BinaryLiterals:0b00110101Java默认所有整数字面量的数据类型为int。如果指定整数字面量为long类型,则需要在数字的末尾添加后缀“L”或者“l”。例如12L表示整数12为long类型。93例子byteb=0x7f; //127,十六进制8位整数intx=0b101; //5,二进制32位整数inti=0x1f; //31,十六进制32位整数intj=0X1F; //31,十六进制32位整数intk=31; //31,十进制32位整数longm=200L; //200,十进制64位整数longn=200l; //200,十进制64位整数94注意不能把“宽”的字面量赋值给“窄”的变量例如byteb=0x7ff0x7ff是32位整数,赋值给8位的变量,编译会提示错误。但是编译器并不对byteb=0x7f;提示错误,这是因为编译器识别到虽然0x7f是32位整数,但高24位都是0,截断后没有损失。95浮点数字面量浮点数字面量有两种表示形式:标准形式和科学记数形式。例如583.45(标准形式)或者1.23e+2(科学记数形式)。字面量1.23e+2表示数字1.23×102=123。注意,1.23e+2与1.23e2含义相同。“e”表示指数(exponent),可以是大写“E”。Java默认浮点字面量是double类型。如果要指定为float类型,则需要在数字的末尾添加后缀“F”或者“f”。96例子floatf1=128.6F; //32-bit浮点数floatf2=128.6f; //32-bit浮点数floatf3=1e-45f; //10-45,科学记数形式floatf4=1e+9f; //109,科学记数形式doubled1=1256.8d; //64-bit浮点数doubled2=1256.8D; //64-bit浮点数doubled3=1.2568e3d; //1.2568×103

//科学记数形式97变量变量(variable)是一个命名的存储单元(cell)。该存储单元中的内容在程序运行期间可能会被改变变量的数据类型决定了存储单元的大小变量必须先声明其数据类型才能使用98变量的四种类型实例变量(InstanceVariables)每个对象都有的成员变量类变量(ClassVariables)声明成员变量时如果使用保留字static修饰,则是类变量局部变量(LocalVariables)在方法体中声明的变量称为局部变量方法每被调用一次就会为方法体中的局部变量重新分配一次存储形式参数(Parameters)方法的形式参数也是局部变量99声明变量声明变量的语法:

<数据类型><变量名>[=<初值>];100例子intx; //声明整数类型的变量,名字为x;doubleradius; //声明浮点数类型变量,名字为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是一个内置的Java类,out是System类中声明的成员变量,通过该变量引用了一个负责进行显示输出的对象。System.out.println("Hello")的意思是:执行System.out对象上的方法println()显示输出字符串“Hello”。103例子输出为:10Thevalueofx=A104intvalue=10;charx;x=‘A’;

System.out.println(value);System.out.println("Thevalueofx="+x);Java中有两种数据类型的变量:基本数据类型引用数据类型基本数据类型的变量把数据存放在该变量名标识的存储单元中;而引用类型的变量仅仅在该变量名标识的存储单元中存放实际数据的地址,即指向了存放实际数据的存储单元。105例inti=10; //基本数据类型Stringname="Donald"; //引用数据类型106类型的自动转换在进行表达式计算时,Java能够自动地把“窄”数据类型转换为“宽”的数据类型。所谓“窄”,就是该数据类型所用的存储字节少;所谓“宽”,就是该数据类型所用的存储字节多。例如,如果程序中有表达式2*0.3,那么就会把2转换为double类型,然后再和double类型的字面量0.3相乘。自动转换的规则:107转型在变量前面添加括号括起来的数据类型就能把该变量转型为此数据类型。例如,下面的的赋值语句就把long类型的变量g赋值给了int类型的i:inti;longg=100;i=(int)g;转型运算(int)把long值转换成int值。108转型的例子109publicclassCastingDemo{publicstaticvoidmain(String[]argv){inti;doublej=2.75;i=j; //编译错误

i=(int)j; //显式转型;i的值为2

System.out.printf("%s%d%n","i=",i);longb;b=i; //没有编译错误System.out.printf("%s%d%n","b=",b);}}注意在对byte、short和char这三种数据类型变量使用字面量初始化时,如果初值在其数据类型的取值范围内,编译器自动优化为该数据类型。例如,byteb=0x2A;仍然会把值42存入变量b而不会出现编译错误,虽然字面量0x2A是一个整数;在byteb=0x8A;中0X8A是正整数138,超出了byte类型的范围[-128,127],所以会出现编译错误。110运算符Java语言中的运算符有赋值运算符算术运算符关系运算符逻辑运算符条件运算符111赋值运算符赋值(assignment)运算符用以向变量名标识的存储单元中存放一个值。112inta=1; //把1赋值给变量aintb=2+3; //把表达式2+3的运算结果赋值给bStringname="Donald"; //把字符串(String对象)"Donald"的引用赋值

给引用类型变量nameintd=a=b; //把b赋值给a,然后把a赋值给d算术运算符113注意如果a和b都是整数,那么除运算/只保留商而舍弃余数。如果a和b其中有一个是浮点数,则执行浮点数的除法运算。例如5/2的结果是25.0/2、5/2.0、5.0/2.0的结果都是2.5。取余运算符%也称为模运算符,其结果是整数除法运算a/b的余数。取余运算a%b结果的符号取决于第一个操作数a。114注意如果一个运算符有两个操作数,则称其为双目运算符(binaryoperator);如果只有一个操作数,则称其为单目运算符(unaryoperator)。当算术运算符+和–用作单目运算符时,就表示正数和负数。运算符++和--也是单目运算符。增量运算符(++)把操作数增1减量运算符(--)从其操作数中减去1a++在功能上等价于a=a+1。115后缀形式和前缀形式如果++和--写在变量的后面,则称为该运算符的后缀形式(postfixform)反之,如果++和--写在变量的前面,则称为该运算符的前缀形式(prefixform)后缀形式和前缀形式表达式的计值结果是不同的。例如,假设变量i的当前值是1,下面的语句将使j的值为1而i的变为2:j=i++;但是,下面语句使i和j的值为2:j=++i;116运算符+当运算符+的两个操作数中存在字符串时则进行字符串连接运算而当操作数中存在字符时则进行整数加法运算117OperatorAdditionDemo.java关系运算符118OperatorComparisonDemo.java逻辑运算符119OperatorLogicalDemo.java条件运算符<逻辑表达式>?<表达式1>:<表达式2>max=(a>b)?a:b;120if(a>b){max=a;} else{max=b;}位运算符直接针对二进制位进行操作的运算符称为位运算符位运算符有两类:按位逻辑运算符按位与&按位或|按位异或^按位否~移位运算符左移1位<<有符号右移1位>>无符号右移1位>>>121按位逻辑运算只有当两位相同时为1时按位与&的运算结果才为1,无论是否符号位当两位中存在一位为1时按位或|的运算结果就1,无论是否符号位当两位相同时按位异或^运算结果为0;不同时运算结果为1按位非~就是把1变为0,把0变为1。122OperatorBitWiseLogicalDemo移位运算符左移运算符把二进制位向左移动指定的位数,符号位一起移动,低位补0。右符号右移运算符>>把二进制位向右移动指定的位数,符号位一起移动,高位补原符号位。无符号右移运算符>>>把二进制位向右移动指定的位数,高位补0。123OperatorShiftDemo.java运算符的优先级比如1+2*3,先算1+2,还是先算2*3?这取决于*的优先级是否高于+。124运算符优先级与结合性125表达式和语句一个字面量、一个变量就是最简单的表达式(expression),通过各类运算符连接的表达式形成新的表达式。表达式的值就是对其中字面量、变量按照运算符计值后的结果。假设x和y都是int类型变量,x中已经存储了整数2,下面都是表达式:12x12+xy=x+3126这些表达式的值分别是12、2、14、5注意赋值表达式y=x+3还能用在另外一个表达式中:z=(y=x+3)*4这使得变量y中存放5,变量z中存放20。表达式中还可以包含方法调用。例如下面的表达式中包含的Math类中的方法abs()调用,用来计算绝对值:5*(Math.abs(-20)/4)127语句语句(statement)是以分号(;)结束的完整的基本执行单元。Java中的语句有表达式语句、声明语句和控制流语句。表达式语句用来改变变量的值、调用方法和创建对象。声明语句用来声明变量。控制流语句确定语句的执行顺序。128语句inti;//声明语句i=1;//表达式语句if(i<10){//控制流语句

System.out.println(i);//表达式语句}129块使用大括号把若干条语句括起来,就成为块(block)形如:130{<语句序列>}控制台输入和输出控制台(console)指的是与主机平台交互的命令行界面通过java.util.Scanner对象可以方便地从控制台中读取基本数据类型的数据Scanner默认使用空白符作为分隔符把输入串分割成词元(token)空格、制表符、回车、换行、进纸等都称为空白符131Scanner类比如以空格作为分隔符如下字符序列:123.14Car则Scanner可以识别为整数12、浮点数3.14和字符串Car三个记号。132Scanner默认Scanner使用空白符作为分隔符。空白符可以是一个或若干个空格、制表符、进纸、回车符或者换行符。133例运行程序,根据提示“Enteraninteger,adoublevalueandastring:”,输入:123.14Car注意以空格隔开这三个数据,然后回车,程序显示:Yourintegeris:12Yourdoublevalueis:3.14Yourstringis:Car134ScannerDemo.java例System.in是在System类中定义的静态变量,引用标准输入流对象,其类型为java.io.InputStream这个输入流默认连接到键盘,允许程序接收用户输入的数据以其作为参数调用Scanner类的构造方法创建了一个Scanner对象用来从控制台读入数据135System.out是System中定义的静态变量,引用标准输出流对象,默认连接显示器printf()是out的实例方法,提供了与C语言中的printf函数相同的语法和功能。136nextXxx方法Scanner类为每一种基本数据类型都提供了相应的nextXxx方法用读取该类型的值。例如:nextBooleannextBytenextShortnextLongnextDoublenextFloatnextLine其中,nextLine方法以字符串返回下一行。如果不想读取一整行,而执行读取下个记号,则使用next方法。next方法以字符串形式返回下个记号。137如果期望输入的数据类型与实际输入的数据类型不匹配,那么就会抛出InputMismatchException异常。例如期望输入一个整数12,而却错误地输入了浮点数:Enteraninteger:3.14Exceptioninthread"main"java.util.InputMismatchExceptionhasNextXxx方法booleanhasNextBoolean()booleanhasNextByte()booleanhasNextShort()booleanhasNextLong()booleanhasNextDouble()booleanhasNextFloat()booleanhasNextLine()booleanhasNext()138注意如果想仅读入一个字符,而不是字符串139CharInputDemo.java注意如果想得到字符数组,那么可以使用nextLine方法作为字符串读入一行,然后使用字符串对象的toCharArray方法把字符串转换为字符数组。140控制结构顺序结构分支结构循环结构141顺序结构142

x=5;x=x+2;活动图(activitydiagram)活动图中最主要的符号就是圆角矩形框,表示一个活动一个活动至少含有一个动作其它常用的图形符号还有初始结点、终止结点、控制流、判定、守卫条件等。一个圆角框到另外一个圆角框的带箭头的连线表示控制流,意味着一个活动执行完毕另外一个活动才能开始。初始结点使用实心圆表示;终止结点使用有环的实心圆表示。143分支结构144intx=-1;intresult=x;if(x<0){result=-x;}分支结构145其中if语句的一般形式是:if(<逻辑表达式>)<语句>;分支结构146if(<逻辑表达式>){<语句1>;<语句2>;……}例计算绝对值147其中的菱形表示判定结点,对应于程序中的分支语句。从判定结点出发的控制流上通常标记守卫条件。守卫条件是中括号括起来的逻辑表达式。意思是只有满足该条件,才能运行控制流通过。例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条或多条语句当程序执行到该语句,首先对

<表达式>计值,把计值结果与<值1>进行比较,如果匹配则执行<语句序列1>、<语句序列2>、……、<语句序列n>、<语句序列n+1>;否则与<值2>进行比较,如果匹配则执行<语句序列2>、……、<语句序列n>、<语句序列n+1>;当与<值n>匹配失败时执行default中<语句序列n+1>。switch(<表达式>){case<值1>:<语句序列1>case<值2>:<语句序列2>……case<值n>:<语句序列n>default:<语句序列n+1>}例把中文数字转换为阿拉伯数字152无break:SwitchDemo.java有break:SwitchBreakDemo.java

输入“一”,程序的输出10而不是期望的1switch语句常见形式153switch(<表达式>){case<值1>:<语句序列>break;case<值2>:<语句序列>break;default:<语句序列>}因为大多是分支都是“排他”情形,所以实践中的switch语句的每个case后面总要有break语句例把百分制的考试分数转换成A,B,C,D,E,F和I的等级成绩。154SwitchGradeDemo.java注意在switch(<表达式>)中,<表达式>是整型字符型枚举String155问题一是从第9行到第14行共享第15和第16行的语句,但读起来令人觉得莫名其妙;二是太多的break语句,读起来让人觉得啰嗦可以使用“标签规则”来解决这两个问题。156SwitchGradeArrowLabelDemo.javaswitch标签规则一个->连接的左部和右部称为一条switch标签规则。箭头左部列举各种情形;箭头右部则是一条语句或语句块:157switch(<表达式>){case<左部1>-><右部1>case<左部2>-><右部2>

……case<左部n>-><右部n>default<左部n+1>-><右部n+1>}例使用标签规则根据用户输入的菜单项索引号选择不同的功能去执行158Menu.javaMenu2.java循环控制结构while语句do-while语句for语句159while语句对<循环条件>计值;如果<循环条件>为false,跳过<语句序列>块,执行后随语句;如果<循环条件>为true,执行<语句序列>块;转到步骤(1)。160while(<循环条件>){<语句序列>}举例161把公差d为1、首项a为1、项数n为10的等差数列累加WhileLoopDemo.java循环控制结构的组成162死循环163inta=1;intn=10;intd=1;intsum=0;inti=1;while(i<=n){sum=sum+(a+(i-1)*d);}do-while语句164do{<语句序列>}while(<循环条件>);使用do-while循环对首项为1公差为1的n项等差数列累加DoWhileLoopDemo.javafor语句165for(<初始化>;<循环条件>;<步骤更新>){<语句序列>}while循环和do-while循环适合于无法预知循环次数的情况如果预先知道循环次数,则使用for循环使得代码更为简洁些。举例166执行初始化语句i=1,把1赋值给整型变量i;对循环条件i<n计值。如果为真,执行循环体;否则结束for语句执行后随语句;执行循环体中的语句:sum=sum+(a+(i-1)*d);执行<更新循环条件>:i++;转步骤2。使用do-while循环对首项为1公差为1的n项等差数列累加ForLoopDemo.java分支语句breakcontinuereturn167breakbreak语句使得程序的执行流程立即从该语句位置跳转到switch语句的后随语句,即终止了switch语句的执行转去执行其后随语句168inti=9;while(i>=1){i--;if(i==3){break;}System.out.printf("%d",i);}输出结果是87654,而不是87654321。continue仅跳过本次迭代中尚未执行的语句,进行下次迭代169inti=9;while(i>=1){i--;if(i==3){continue;}System.out.printf("%d",i);}输出结果是87654210而不是

876543210returnreturn语句用以从当前正在执行的方法中返回到调用该方法的位置。除了能够将控制流返还给方法的调用者,return语句还能交给方法的调用者一个值,称为返回值。仅需要把要返回值放在保留字return的后面即可。例如:语句return++i;返回对变量i增1后的结果。语句return"Donald";返回字符串“Donald”的引用。返回值的数据类型必须和方法声明的返回值类型兼容。如果方法声明的返回值类型是void,那么就不能返还任何值。170数组在Java中使用数组一般有四个步骤:声明数组类型的引用变量;创建数组对象,并通过前面声明的变量进行引用;初始化数组对象;访问数组对象。171声明声明数组引用的语法一般是:<元素数据类型>[]<标识符>例如:int[]a;172创建int[]a; //声明a=newint[6]; //创建对象

“newint[6]”的意思创建容量为6的数据元素类型为int的数组对象。173声明并创建对象int[]a=newint[6]; //声明并创建对象174声明时初始化int[]a=

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论