版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java语言程序设计JavaLanguageProgramming全套PPT课件第一章Java语言概述第一章Java语言概述本章主要内容Java语言的发展历史;Java语言的特点;Java语言的工作原理;Java程序的运行环境;Java程序及其实现;Java语言集成开发环境。1.1Java语言的发展历史1.2Java语言的特点1.3Java语言的工作原理第1章第1章1.4Java程序的运行环境1.5Java程序及其实现1.6Java语言集成开发环境1.7本章小结
Java语言是在C++语言已广泛使用,Internet(因特网)发展迅速的历史背景下出现的,因此,Java语言源于C++语言,又与Internet同步发展。
1991年,美国Sun公司成立了一个开发面向家电的编程软件小组,项目名称为“Green”,软件名称为“Oak”(一种橡树名)。当时C++语言已经比较成熟,自然成为他们开发软件的首选语言。后来,发现C++语言比较烦琐,并且安全性较差,不能满足要求,于是决定开发一种新的语言,当时取名为“Oak”。当时,Oak并没有引起人们的注意,项目最初的目的是想开发一种独立于平台的软件技术,而且在网络出现之前,Oak可以说是默默无闻,甚至差点被丢弃。但是,网络的出现改变了Oak的命运,Sun公司的一位创始人认为Oak的安全性和分布式系统非常适用于Internet,于是采用了Internet上免费使用的策略,后来经过发展和完善,1995年Oak改名为Java。
Java语言发布后,发展非常顺利。于是Sun公司很快公布了完整的Java语言技术规范,并在WWW厂商的支持下,用Java语言编写Applet小程序在浏览器内部的嵌入也获得了成功。不久,Sun公司又推出一套全新的基于Java语言的开放式多媒体格式和应用程序编程接口(API),从而为Java语言的进一步推广开创了美好前景。由于Java语言具有较好的安全性、可移植性、与平台无关等特性,因此,它为Internet的应用开辟了一个新时代,而Internet的发展又促进了Java语言的开发与利用。1.Java语言是简单的2.Java语言是面向对象的3.Java语言是分布式的4.Java语言的可移植性5.Java语言的平台无关性6.Java语言的稳定性和安全性7.Java语言是多线程的8.Java语言是高性能的9.Java语言是动态的
Sun公司设计Java语言的目标是实现良好的跨平台性。为了实现这一目标,Sun公司提出了—种Java虚拟机(JVM)机制,其工作原理流程图如图1-1所示。图1-1Java虚拟机的工作原理流程图
Java虚拟机是软件模拟的计算机,Java虚拟机是编译和运行Java程序等其他命令及运行环境的总称,可以在任何处理器上(如在计算机或其他电子设备中)安全地执行保存在.class文件中的字节码。Java虚拟机的“机器码”保存在.class文件中,有时也可以称为字节码文件。字节码实际上是一种与平台无关的伪代码,这些伪代码最终是在本地的计算机平台上运行的,但Java程序就好像是在这些Java命令的基础上运行的。因此,这些Java命令的集合好像是采用软件技术实现的一种虚拟计算机,这就是Java虚拟机名称的由来。
Java程序的跨平台性主要是指字节码文件可以在任何有Java虚拟机的计算机或电子设备上运行,Java虚拟机中的解释器负责将字节码文件解释成特定的机器码进行运行。因此在运行时,Java源程序需要通过编译器编译成为.class文件。Java虚拟机的建立需要针对不同的软、硬件平台来实现,既要考虑处理器的型号,也要考虑操作系统的种类。在SPARC结构、X86结构、MIPS和PPC等嵌入式处理芯片上,在UNIX、Linux、Windows和部分实时操作系统上都可安装Java虚拟机。
1.JavaSE
JavaSE(Java2PlatformStandardEdition,简称J2SE)称为Java标准版本或Java标准平台。J2SE提供了标准的JavaDevelopmentKit(JDK),利用该平台可以开发Java客户端程序,主要用于桌面应用软件的编程。目前较新的JDK版本为1.8。1.4.1平台简介
2.JavaEE
JavaEE(Java2PlatformEnterpriseEdition,简称J2EE)称为平台企业版或Java企业平台。J2EE是一套全然不同于传统应用开发技术的架构,包含许多组件,主要用于可简化且规范应用系统的开发与部署,进而提高可移植性、安全与再用价值。
3.JavaME
JavaME(Java2PlatformMicroEdition,简称J2ME)是Java2的一个组成部分,它与J2SE、J2EE并称。根据Sun公司的定义,J2ME是一种高度优化的Java运行环境,主要针对消费类电子设备的,例如:蜂窝电话、可视电话、数字机顶盒和汽车导航系统等。J2ME技术在1999年的JavaOneDeveloperConference大会上正式推出,它将Java语言的与平台无关的特性移植到小型电子设备上,允许移动无线设备之间共享应用程序。1.4.1平台简介
1.下载并安装JDK登录Sun公司的官方网站免费下载JDK,在网站的Download菜单中选择JavaSE,接受许可协议后,选择相应的JDK版本即可。双击下载后的文件图标后,会出现安装向导界面,接受软件安装协议,出现选择安装路径界面。1.4.2安装JavaSE平台
2.配置环境变量
JDK平台提供的编译器(javac.exe)和解释器(java.exe)位于Java安装目录的\bin文件夹中,为了能在任何目录均能使用编译器和解释器,应在系统属性中设置Path环境变量名。对于Windows7/XP,可以用鼠标右键单击“计算机”图标,在弹出的快捷菜单中选择“属性→系统属性→高级→环境变量”,添加系统环境变量的值(本教材系统变量Path的变量值为C:\ProgramFiles\Java\jdk1.7.0_45\bin)加入即可,如图1-2、图1-3、图1-4所示。1.4.2安装JavaSE平台图1-2系统属性对话框图1-3环境变量对话框图1-4编辑系统变量对话框需要注意的是,在编辑环境变量的值时,新加入的值要与已有的数值用分号分隔,即如果新加入的值是最后一个值,需要和前面的值用分号分隔;如果新加入的值是前面的值,则需要和后面的值用分号分隔。
Java语言程序可分为两类:一类是控制台应用程序JavaApplication,它是一种独立运行的完整程序;另一类是基于浏览器运行的程序JavaApplet,又称为小程序,它不是独立运行的完整程序,需要在浏览器这种特定的环境下运行。本章节会给大家介绍JavaApplication的结构特点,而JavaApplet程序将在后面章节中介绍。1.5.1JavaApplication程序举例
JavaApplication程序的开发主要有三步:编辑、编译和解释运行。下面通过简单的例子来了解并掌握JavaApplication程序的结构、书写方式与运行过程。
1.编辑Java源程序编辑就是使用编辑器编写Java源代码,编辑器可以是记事本,也可以是JDE工具。本章使用记事本编写程序。新建一个记事本文件并命名为Exam1_1j.ava,注意把扩展名改为j.ava。扩展名为j.ava的文件又称Java源文件。【例1-1】简单的JavaApplication程序。(1)程序Exam1_1j.ava。publicclassExam1_1{publicstaticvoidmain(Stringargs[]){System.out.println(″欢迎学习JAVA语言″);}}
(2)程序分析。将该程序中出现的各语句按其顺序说明如下:
Java程序由若干个类组成,该程序中只有一个类,名字为Exam1_1,在Java程序中声明类的关键字是class,定义类的格式如下:
<修饰符>class<类名>
{
<类体>
}该程序中,Exam1_1类体中只定义一个主方法publicstaticvoidmain(String
args[]),该方法无返回值(void),有一个形式参数,参数类型为字符串数组args[],该方法是静态的(static),该方法的访问权限是公共的(public),即该程序中的所有的类都可以使用该方法。在主方法体中,只有一条语句:
System.out.println(“欢迎学习JAVA语言”);该语句的功能是输出并显示一个字符串“欢迎学习JAVA语言”。
2.编译生成字节码文件
Java语言源程序和其他高级语言的源程序一样,都不能直接在计算机上运行。所以Java源程序在运行之前,都要把它翻译成机器可以直接识别的指令代码,这个过程称为编译。
Java语言源程序是属于编译解释型的,需要先将Java源程序经过编译器生成二进制的字节码文件,后缀名为.class,计算机不能直接识别该文件,还需要将它交给Java解释器进行解释执行。
Java语言源程序的编译过程主要进行两项工作:一是通过编译程序检查Java源程序中是否有语法错误,如果发现错误,便报告已经发现的错误,修改后再编译,直到未发现错误,才生成字节码文件;二是通过编译来引入Java类库中已编好的模块,为了方便编程,Java类库中有若干个包,每个包中又有若干个模块,每个模块是一个具有某种功能的类,它们都是字节码形式的程序,用户编程时根据需要利用import语句将某些模块引入程序中。由于本章中的源程序文件Exam1_1j.ava存放在D盘下(D:\Exam1_1j.ava),所以该程序的编译命令如下:
D:\>javacExam1_1j.ava经过编译后,生成字节码文件Exam1_1.class。编译时要注意:
(1)在命令javac后一定要输入空格符。
(2)源文件要存放在当前目录下。
3.解释运行字节码文件运行一个编译好的字节码文件,需要使用Java解释器java.exe,以例题1-1为例,解释运行字节码文件Exam1_1.class的命令格式如下:
D:\>javaExam1_1解释运行后输出结果如图1-5所示。图1-5输出结果解释运行时要注意:
(1)在命令中书写要运行的字节码文件时,不要给出后缀.class,否则运行时会出错。
(2)当运行有多个类程序编译后生成的多个字节码文件时,只需运行主类的字节码文件即可。在1.5.1中举例说明了JavaApplication程序,并对程序中的每一条语句进行了分析,虽然比较简单,但是也表示出了JavaApplication程序的结构,同时也给出了JavaApplication程序的书写格式。
1.JavaApplication程序结构特点
(1)JavaApplication程序由一个或多个文件组成,每个文件又由一个或多个类构成,每个类中由若干个方法和变量组成。
(2)在一个JavaApplication程序中,仅有一个主方法,JavaApplication程序就是从主方法开始执行的。
(3)在一个JavaApplication程序中,只有一个主文件,主文件即是包含主方法的文件。1.5.2JavaApplication程序结构特点在JavaApplication程序编写中需要注意以下几点:
(1)程序名必须与主类名相同,例如例题Exam1_1中,主类(含有主方法的类)名字为Exam1_1,所以该文件名字为Exam1_1j.ava。
(2)JavaApplication程序是区分大、小写字母的。
(3)JavaApplication程序中所有方法都是属于某个类的。
2.JavaApplication程序书写上的特点
(1)使用变量名、对象名、方法名等标识符时要有意义,尽量做到“见名知义”。
(2)使用空行来分隔不相关的语句。
(3)编写代码时,应合理进行缩进和对齐。
(4)一条语句应尽量写在一行,但是不要在同一行上编写多条语句。
(5)适当添加注释信息,增加程序的可读性。
1.Eclipse简介
Eclipse最初是由IBM公司开发的替代商业软件Visual
AgeForJava的下一代IDE开发环境,2001年11月贡献给开源社区,由非营利软件供应商联盟Eclipse基金会(EclipseFoundation)管理。2003年,Eclipse3.0选择OSGi服务平台规范为运行时架构。2007年6月,发布3.3稳定版;2008年6月,发布代号为Ganymede的3.4版;2009年6月,发布代号为Galileo的3.5版;2010年6月,发布代号为Helios的3.6版;2011年6月,发布代号为Indigo的3.7版;2012年6月,发布代号为Juno的4.2版;2013年6月,发布代号为Kepler的4.3版;2014年6月,发布代号为Luna的4.4版;2015年6月,项目发布代号为Mars的4.5版。1.6.1Eclipse简介与下载
2.Eclipse下载用户可根据自身需要在Eclipse官网下载适用的版本,其下载界面如图1-6所示。图1-6Eclipse下载界面
1.Eclipse启动下载Eclipse后,双击下载文件夹中的文件“eclipse.exe”即可启动运行,启动界面如图1-7所示。1.6.2Eclipse使用图1-7Eclipse启动界面
2.利用Eclipse运行Java程序
(1)新建JavaProject单击“File→New→JavaProject”选项,如图1-8所示。图1-8新建JavaProject
(2)新建Package右击新建的工程,选择“New→Package”选项,如图1-9所示。图1-9新建Package
(3)新建Class右击新建的包,选择“New→Class”选项,如图1-10所示。图1-10新建Class
(4)编写Java程序代码在代码编辑区编写Java程序代码,如图1-11所示。图1-11编写代码窗口
(5)保存运行Java程序单击“Run→Run”命令,运行Java程序,如图1-12所示。图1-12运行Java程序本章是对Java程序开发以及后续学习的一个铺垫,通过本章的学习,能够初步了解Java语言的基本知识,本章应该了解和掌握一些内容。●Java语言的发展历史●Java语言的特点●Java语言的工作原理●Java程序运行环境●Java程序及其实现●Java语言集成开发环境Java语言程序设计JavaLanguageProgramming第二章Java语言语法基础第二章Java语言语法基础本章主要内容Java语言的词法规则;Java语言的数据类型;控制语句;数组;字符串。2.1Java语言的语法规则2.2控制语句2.3数组第1章第2章2.4字符串2.5本章小结
Java语言使用的是统一代码,即国际字符格式标准(Unicode)。Unicode字符集采用16位编码,其前256个字符与ASCII字符集完全一致。除了数字0~9、英文字母A~Z、a~z、下划线(_)、美元符号($)以及+、-、*、/等ASCII字符之外,Unicode字符集还提供了其他语言文字字符,如汉字、希腊文、韩文等。在编译器的词法分析阶段,把源代码分为单词和空白符。Java语言的单词(又称为词法符号)包括标识符、关键字、分隔符、注释符、常量和变量以及运算符与表达式。空白符就是空格符、水平制表符、换行符等总称。空白符用来指示单词的起始和终止位置,用作单词的分隔符。
Java标识符是以字母开头的字母数字序列。标识符是用户定义的单词,用于标识类、对象、方法、变量、接口和自定义数据类型等。标识符的命名规则如下:
(1)Java语言规定标识符由字母(大、小写英文字母)、数字(0~9)、下划线(_)、美元符号($)组成的字符序列。
(2)标识符第一个字符不能是数字。
(3)标识符区分字母大、小写,或者说标识符是大、小写敏感的。
(4)标识符不能使用Java语言中的关键字。
(5)标识符长度不受限制。符合上述规则的标识符都是正确的Java标识符。正确的标识符举例如下:
name,age,salary,my_name,$points,sum12.1.1标识符而以下标识符则是错误的标识符:
2x//标识符不能以数字开头
mysalary//标识符中不能有空格
x+y//+既不是Java语言中的字母,也不是Java语言中的数字,不能使用
testl-2-3//-既不是Java语言中的字母,也不是Java语言中的数字,不能使用
class//标识符不能用关键字
Java&JSP//&既不是Java语言中的字母,也不是Java语言中的数字,不能使用在Java语言规范中,有些标识符虽然正确,但是不提倡使用,应该规范化书写。因为不规范的命名习惯会大大降低代码的可读性。在Java规范中约定:
(1)类名和接口名,每个单词的首字母大写,其余字母小写。如MyClass、HelloWorld、Time。
(2)方法名,首字母小写,其余单词的首字母大写。如myName、setTime、date。
(3)常量名,基本数据类型的常量名全部使用大写字母,单词之间用下划线分隔,对象常量可大小混写。如SIZE_NAME。
(4)变量名,可大小混写,首字符小写,字间分隔符用单词的首字母大写。如distance、myName。关键字(Keyword)是Java语言保留的具有特定含义的英文单词。每一个关键字都有一种特定含义,用户不能把关键字作为标识符来使用。Java语言中的常用关键字及其含义见表2-1。2.1.2关键字上述关键字都是用小写字母表示。为了便于阅读,程序也需要如同自然语言一样恰当地使用分隔符。Java语言常用的分隔符如下所述:
(1)空白符空白符常用来作为单词之间的分隔符,空白符包括空格符、换行符和水平制表符等。
(2)分号在语句结束以及for控制语句中可以使用。
(3)逗号在声明多个相同数据类型变量或对象之间,或在方法中的参数之间等都可以使用。
(4)冒号用在语句标号与语句之间的分隔符。
(5)花括号在声明类、方法体、语句块以及初始化数组中的值时使用。2.1.3分隔符
Java语言提供如下三种注释方式:
(1)行注释符这种注释符用来注释一行信息,即以“//”开始一直到行尾都是注释信息。
(2)多行注释符这种注释符用于多行注释,“/*”表示注释开始,“*/”表示注释结束,在“/*”和“*/”之间是注释信息,常用来说明方法的功能。
(3)文档注释符这种注释符放在一个变量或方法说明前面,表示该段注释信息应包含在自动生成的任何文件中,注释信息以“/**”开始到“*/”结束。2.1.4注释符程序在执行的过程中需要调用数据进行运算,同时也需要存储数据。获取的数据可能从键盘输入,也可能从文件中取出,甚至可能从网络上得到。在程序的执行过程中,数据存储在内存中,便于程序的使用。数据是描述客观事物的数字、字符以及所有能输入计算机中并能被计算机接收的各种符号集合。数据是计算机程序的处理对象的状态。类型是具有相同逻辑意义的一组值的集合。数据类型是指一个类型和定义在这个类型上的操作集合。数据类型定义了数据的性质、取值范围以及对数据所能进行的运算和操作。程序中的每一个数据都属于一种数据类型,决定了数据的类型也就相应决定了数据的性质以及对数据进行的操作,同时数据也受到类型的保护,确保对数据不进行非法操作。Java语言中的数据类型分为两大类:基本数据类型和引用数据类型,如图2-1所示。2.1.5数据类型图2-1Java语言中的数据类型
1.整型整型是具有固定上、下界的整数,包括正整数、零和负整数,与数学中的整数概念并不完全一样。Java语言根据数据在内存中占用的位数不同提供了4种整型,分别是byte、short、int和long,它们的位数递增,表示数的范围也越来越大,见表2-2。整型常量有3种表示形式:(1)十进制整数:如56、-24、0。(2)八进制整数:以0开头的数是八进制整数,如017。(3)十六进制整数:以0x开头的数是十六进制整数。如0xl7、0x0、0xf、0xD。
2.浮点型浮点型是包含有小数部分的数值。Java语言中的浮点型按其取值范围的不同可分为float(单精度浮点型)和double(双精度浮点型)两种,见表2-3。
Java语言用浮点型表示数学中的实数,一个浮点数值包括整数部分和小数部分。浮点数有两种表示方式:
(1)十进制数表示法:由整数部分、小数点和小数部分组成。如1.0、123.45等。
(2)科学记数法:由数字和字母E或e组成,要求字母E或e前必须有数字,后面必须有整数。如0.12e3、-15E4等。在浮点型常量后加上f或F表示单精度浮点型。在浮点型常量后不加任何字符或加d或D表示双精度浮点型。
3.字符型字符型(char)数据是由一对单引号括起来的单个字符或转义字符,该字符是16位的Unicode码。字符常量有两种表示法:
(1)用单引号将ASCII字符括起来的值,如″M″。
(2)用单引号括起来的转义字符,如'\n‘。
Java语言中常用转义字符见表2-4。
char类型在Java语言中不常用,一般使用字符串类型。字符串类型是用一对双引号括起来的字符序列,字符串由String类实现。
4.布尔型布尔型(
boolean)又称逻辑类型,只有两个取值:true(真)和false(假),它们全是小写,计算机内部用8位来表示。Java语言不允许数值类型和布尔类型之间进行转换。在C/C++语言中,允许用数值表示,如用0表示false,非0表示true,而在Java语言中不允许这样做。所有关系运算的结果值都是布尔型的。布尔型也用于流程控制语句中的条件表达式,如if、for和while等语句中。
5.类型转换
(1)隐式类型转换对于由二元运算中的算术运算符组成的表达式,一般要求运算符两边的两个操作数的类型一致,如果两者的类型不一致,则系统会自动转换为运算符较高(即取值范围较大)一边的类型,这便是隐式类型转换。
(2)强制类型转换隐式类型转换只能由较低类型向较高类型转换,但是在实际工作中,有时也需要由较高类型向较低类型转换。例如,在计算数值时为了保证其精度,为某些变量取了较高的数据类型(如double型),但在输出时,往往只需要保留两三位小数或者只输出整数即可,这时只能进行强制类型转换。强制类型转换需要人为地在表达式前面指明所需要转换的类型,系统将按这一要求把某种类型强制性地转换为指定的类型。格式如下:
(<类型名>)<表达式>【例2-1】类型转换。publicclassExam2_1{
publicstaticvoidmain(String[]args){
bytea;
intb=325;
doublec=346.73;
a=(byte)b;
System.out.println(″int->byte:″+b+″->″+a);
b=(int)c;
System.out.println(″double->int:″+c+″->″+b);
}}程序运行结果如图2-2所示。程序分析:将整型变量b的数值通过强制类型转换为字节型,应为325除以256的余数,结果为69;将双精度变量c的数值通过强制类型转换为整型,截去小数部分,结果为346。图2-2例2-1程序运行结果常量是指在程序的整个运行过程中其值始终保持不变的量。在Java语言中,常量有两种形式:一种是以数字形式直接给出值的常量;另一种是以关键字final定义的标识符常量。不论哪种形式的常量,一旦声明,在程序的整个运行过程中其值始终不会改变。变量是指在程序的运行过程中其值可以被改变的量。变量除了分为不同的数据类型外,更重要的是每个变量还具有变量名和变量值两重含义。变量名是用户自己定义的标识符。通过指明变量所属的数据类型,将相关的操作封装在数据类型中。2.1.6常量和变量
1.常量常量又分为直接常量和符号常量。
(1)直接常量直接常量是指在程序中直接引用的常量,包括数值型常量和非数值型常量。其中,数值型常量称为常数,包括整型常量和浮点型常量,如10、-10.16等;非数值型常量有字符常量、字符串常量和布尔常量。如'A',″abc″,true,false等。
(2)符号常量符号常量是以标识符形式出现的常量,在Java语言中,只能将类的成员定义为常量,称为类常量,而不允许在方法中定义常量。声明符号常量以提高程序的可读性,使程序易于修改。符号常量必须先声明后使用,具体格式如下:
<修饰符>final<数据类型><常量标识符>=<常量值>修饰符:用于表示数据属性的权限,如public、默认值等。
final:定义符号常量的关键字。数据类型:符号常量的数据类型,可以是基本数据类型。例如:
publicfinalintMAX=10;
finalfloatPI=3.14f;
Java语言约定常量标识符全部用大写字母表示。标识符一旦被声明为常量,就不能再作他用。声明常量的好处有两点:一是增加可读性,从常量名可知常量的含义;二是增强可维护性,只要在常量声明处修改常量值,即可改变程序中多处使用的常量值。
2.变量
Java中的变量具有4个基本属性:变量名、数据类型、存储单元和变量值。变量名是变量的名称,用合法的标识符表示;数据类型可以是基本数据类型和引用类型;每个数据都有—个存储单元,大小由数据类型决定;变量值是指在变量存储单元中存放的值。
Java语言是强类型语言,必须对数据先声明后使用。变量也是这样,必须先声明后使用。变量在声明时可以初始化,也可以在使用时进行赋值或者调用时传参数。变量声明的格式如下:
[修饰符]<数据类型><变量名>[=初始化表达式]例如:
publicStringname=″张三″;
privateStringstr1;
intx,y,z=10;
doublea,b,c=5.5;【例2-2】变量的声明。publicclassExam2_2{
publicstaticvoidmain(String[]args){
byteb=0x1a;
shorts=01777;
inti=54321;
longl=0xffff2222L;
charc='h‘;
floatf=12.345f;
doubled=12.3e+2;
booleanbool=true;
System.out.println(″b=″+b);
System.out.println(″s=″+s);
System.out.println(″i=″+i);
System.out.println(″l=″+l);
System.out.println(″c=″+c);
System.out.println(″f=″+f);
System.out.println(″d=″+d);
System.out.println(″bool=″+bool);
}}程序运行结果如图2-3所示。图2-3例2-2程序运行结果
1.运算符
Java语言提供了多种运算符。按参与运算的操作数的数目可分为一元运算符、二元运算符和三元运算符。按照运算功能可分为算术运算符、关系运算符、逻辑运算符及赋值、条件等其他运算符。
(1)算术运算符算术运算符包括+(加)、-(减)、*(乘)、/(除)、++(自增)、--(自减)、%(取余)、(取模)运算,使用整型、字符型或浮点型操作数。其中,+和-表示正和负运算时属于一元运算符;表示加和减运算时属于二元运算符。其他算术运算符都是二元运算符。2.1.7运算符与表达式对于除法运算(/),若操作数均为整数,结果也为整数;若有浮点数参与运算,结果为浮点数。例如:1/2的结果为0,1.0/2的结果为0.5。取余运算(%)可用于整型或浮点型操作数,运算结果的符号与第一个操作数的符号相同。例如:
10%-3;//结果为1
-10%3;
//结果为-1
-10.0%-3.0;//结果为-1.0自增运算符(++)和自减运算符(--)是一元运算符,它们只能作用在变量上,不能作用于常量和表达式上,若作用于变量的左边称为前缀运算,如++i、--i;若作用于变量的右边称为后缀运算,如i++、i--。例如:前缀运算程序段:
intx=6;
inty=++x;
//变量x先自增1后为7,然后将数值7赋值给变量y后缀运算程序段:
intx=6;
inty=x++;//变量x先将数值6赋值给变量y,然后自增1后为7算术运算符的优先级为:++和--最高,然后是*、/、%,最后是+、-,同级运算符按从左到右的顺序进行运算。
(2)关系运算符关系运算符包括<(小于)、<=(小于等于)、>(大于)、>=(大于等于)、==(等于)和!=(不等于),用于比较两个值,返回布尔型的值true或false。关系运算符都是二元运算符,常用于流程控制语句的判断条件。在Java语言中,任何数据类型的数据(包括基本类型和引用类型)都可以通过==或!=来比较是否相等。对于基本类型,比较的是其值是否相等;对于引用类型,比较的是其名称是否参考至同一对象,即比较其是否指向同一个内存地址,而不是比较其内容。关系运算符的优先级低于算术运算符。其中<(小于)、<=(小于等于)、>(大于)、>=(大于等于)优先级高于==(等于)和!=(不等于)。
(3)逻辑运算符逻辑运算符包括以下两种:
①一元运算符:!(逻辑非)。②二元运算符:&(非简洁逻辑与)、|(非简洁逻辑或)、&&(简洁逻辑与)、‖(简洁逻辑或)和^(逻辑异或)。逻辑非运算符的功能是:操作数为true,逻辑非后为false。逻辑与运算符的功能是:两个操作数只要有一个为false,逻辑与后就为false。逻辑或运算符的功能是:两个操作数只要有一个为true,逻辑或后就为true。逻辑异或运算符的功能是:两个操作数相同时逻辑异或结果为false,两个操作数不同时逻辑异或结果为true。逻辑运算所有可能的输入/输出结果见表2-5,表中OP1、OP2表示两个布尔型操作数。
(4)赋值运算符赋值运算符包括简单赋值运算符和复合赋值运算符两种。①简单赋值运算符:=。②复合赋值运算符:+=、-=、*=、/=、%=、&=、|=、^=。赋值运算通常是将赋值号右边表达式的值赋值给左边的变量;复合赋值运算符用赋值号左边的变量与右边的表达式作为操作数执行相应运算,并将运算结果发送给赋值号左边的变量。例如:
i+=1;//等同于i=i+1;变量i既是参与+运算的操作数之一,也是存储运算结果的变量。
(5)条件运算符条件运算符(?:)是三元运算符。例如:
x>y?x:y其计算过程是:先判断x是否大于y,若x大于y则表达式的值为x;否则表达式的值为y。例如:
inta=5;
a>3?a+5:a-5;//计算表达式a>3的值为true,则该表达式的值为a+5即为10由三元运算符组成的表达式称为条件表达式,这是因为三元运算符具有简单的条件语句的功能。例如:Inta=5,b;b=a>3?a+5:a-5;等同于if(a>3)
b=a+5;else
b=a-5;
(6)位运算符位运算符包括&(按位与)、|(按位或)、^(按位异或)、~(按位非)、<<(左移位)、>>
(带符号右移位)和>>>(不带符号右移位),用于二进制位操作,操作数只能是整型数据或字符型数据。除~(按位非)是一元运算符外,其他都是二元运算符。表2-6列出了位运算&(按位与)、|(按位或)、^(按位异或)、~(按位非)所有可能的输入/输出结果,其中OP1与OP2表示两个参与运算的二进制位。
<<(左移位):将一个二进制数的各位左移若干位,高位溢出丢弃,低位补0。
>>(带符号右移位):将一个二进制数的各位右移若干位,低位溢出丢弃,高位补符号位,正数补0,负数补1。
>>>(不带符号右移位):将一个二进制数的各位右移若干位,低位溢出丢弃,高位补0。
2.表达式表达式是语句中最常见的组成元素之一。本质上,表达式描述运算规则并按规则执行运算,运算得到的结果称为表达式的值,该值的类型即为表达式的类型。
Java语言的表达式就是用运算符将操作数连接起来的符合Java语法规则的式子。操作数可以是常量、变量或方法调用。运算符的优先级决定了表达式中多个运算执行的先、后顺序,优先级高的先运算,优先级低的后运算,优先级相同的则由运算符的结合性确定其运算顺序。运算符的结合性决定了同一优先级的多个运算符的运算顺序,包括左结合(从左向右)和右结合(从右向左)两种。一元运算符中的-、!等都是右结合的,即操作数在运算符的右边,自增和自减运算符根据其前缀运算和后缀运算的特点表现出两种结合性。除了赋值运算符,其他二元运算符的结合形式都是右结合。例如:加(+)、减(-)的结合性是从左到右,表达式8-5+3相当于(8-5)+3。逻辑非运算符的结合性是从右到左,表达式!!x相当于!(!x)。可以用圆括号改变表达式中运算符的运算顺序,圆括号中的表达式称为子表达式。子表达式也可以作为操作数,即表达式可以嵌套,表现为圆括号的嵌套。编写程序时可尽量使用圆括号来实现预期的运算顺序,以增加程序中表达式的可读性。关于运算符的优先级和结合性详见表2-7。在算法语言中,数据类型描述数据的性质,表达式描述对数据的运算,而语句描述对数据的操作。程序由一系列语句组成,控制语句提供对程序执行中流程的控制,是程序的核心。Java语言提供各种语句来实现程序的流程控制,具体分类如下:
●表达式语句和空语句●复合语句●选择语句●循环语句●跳转语句
1.表达式语句有些表达式在其后面加上分号即可构成表达式语句。例如:
x=10;
sum=sum+1;
newJframe();//实例化对象
this.setVisible(true);//方法调用2.2.1表达式语句和空语句
2.空语句空语句仅包含一个分号,不执行任何操作。用于程序中某个语法上要求应该有一条语句而实际上不需要处理数据的情况。例如:
for(inti=0;i<10;i++);该循环体只有一个“;”,表示该循环体只包含一条空语句,则该循环体被执行10次,但是不做任何处理。2.2.1表达式语句和空语句复合语句又称为块语句,是由一对大括号{}括起来的语句序列,中间可以有多个变量或语句。其语法格式如下:
{
[变量声明或常量声明];
语句序列;
}例如:
{
inta=1,b=2,t;
t=a;
a=b;
b=t;
}2.2.2复合语句1.if语句if语句基本的语法格式如下:if(逻辑表达式){
语句1;}else{语句2;}2.2.3选择语句其中,if和else是关键字。if语句根据逻辑表达式值来控制程序流程,当逻辑表达式的值为true,执行语句1;否则执行else中的语句2。逻辑表达式必须是布尔型。语句1和语句2可以是单独语句,也可以是复合语句。如果是单独语句就可以省略大括号{},若是复合语句则不可以省略{}。else子句是可选项,当语句2为空语句时,else可省略。if语句构成的选择结构分为单分支选择结构、双分支选择结构和多分支选择结构,对应的执行流程如图2-4所示。(a)单分支选择结构(b)双分支选择结构(c)多分支选择结构图2-4if语句执行流程图
【例2-3】将某用户的用电量分为三个区间,针对不同区间给出不同的收费标准,具体规则见表2-8,请根据用户的用电量计算缴纳的电费。Importjava.util.Scanner;publicclassExam2_3{publicstaticvoidmain(String[]args){Scannerreader=newScanner(System.in);doublecount=0,price=0;System.out.print(″请输入电量:″);count=reader.nextDouble();if(count>=1&&count<=90)price=0.6*count;if(count>=91&&count<=150)price=0.6*90+1.1*(count-90);if(count>=151)price=0.6*90+1.1*60+1.7*(count-150);System.out.println(price);}}
【例2-4】if语句嵌套。通过if语句嵌套的使用,分数是100分制,判断考试等级标准为:优秀(大于等于90分)、良好(大于等于80分且小于90分)、中等(大于等于70分且小于80分)、及格(大于等于60分且小于70分)、不及格(小于60分)。
importjava.util.Scanner;
publicclassExam2_4{
publicstaticvoidmain(String[]args){
Scannerinput=newScanner(System.in);
System.out.println(″请输入成绩:″);
doublescore=input.nextDouble();//对象调用方法获取数据
if(score>=90)
System.out.println(″你的成绩等级为:优秀″);
elseif(score>=80)
System.out.println(″你的成绩等级为:良好″);
elseif(score>=70)
System.out.println(″你的成绩等级为:中等″);
elseif(score>=60)
System.out.println(″你的成绩等级为:及格″);
else
System.out.println(″你的成绩等级为:不及格″);}}
程序运行结果如图2-5所示。图2-5例2-4程序运行结果
程序分析:其中“importjava.util.Scanner;”是程序导入JDK类库提供的Scanner类,该类可以获取从键盘输入的数据。“Scannerinput=newScanner(Systemi.n);”是实例化一个对象input,Systemi.n是参数。“doublescore=input.nextDouble();”是获取数据并赋值给score。
2.switch分支语句
switch语句基本的语法格式如下:
switch(表达式)
{
case常量表达式1:语句1;
[break;]
case常量表达式2:语句2;
[break;]
...
[default:语句n;]
}其中,switch、case、break和default是关键字。switch语句的执行过程是:根据表达式的值按照从上至下顺序依次与各个常量表达式的值进行比较,当表达式的值与case后常量表达式的值相等时,执行其后的语句序列,直到遇到break或switch语句执行完毕。如果没有和表达式的值相等的常量时,则执行default后面的语句,若没有default语句,则不执行。【例2-5】switch语句:使用switch语句判断输入数字是星期几。importjava.util.*;publicclassExam2_5{publicstaticvoidmain(String[]args){Scannerinput=newScanner(System.in);System.out.println(″请输入1~7的整数:″);intday=input.nextInt();//对象调用方法获取数据
switch(day){case7:System.out.println(″星期日″);break;case1:System.out.println(″星期一″);break;case2:System.out.println(″星期二″);break;
case3:System.out.println(″星期三″);break;case4:System.out.println(″星期四″);break;case5:System.out.println(″星期五″);break;case6:System.out.println(″星期六″);break;default:System.out.println(″你输入的日期不在有效范围内!″);}}}程序运行结果如图2-6所示。图2-6例2-5程序运行结果
1.while语句
while语句基本的语法格式如下:
while(逻辑表达式)
{
循环体语句;
}其中,while是关键字。while语句先判断后执行。当逻辑表达式的值为true时,执行循环体语句;当逻辑表达式的值为false时,循环结束。while语句的执行流程,如图2-7所示。2.2.4循环语句图2-7while语句的执行流程【例2-6】用while语句求1~100的和。publicclassExam2_6{publicstaticvoidmain(String[]args){inti=1;intsum=0;while(i<=100){sum+=i;i++;}System.out.println(″1~100的和是:″+sum);}}
2.do...while语句
do...while语句基本的语法格式如下:
do
{
循环体语句;
}while(逻辑表达式);其中,do和while是关键字。先执行do中的循环体语句,再判断while中的逻辑表达式的值,若值为true则继续循环,否则循环结束。do...while语句的执行流程如图2-8所示。图2-8do...while语句执行流程图【例2-7】用do...while语句求1~100的和。PublicclassExam2_7{publicstaticvoidmain(String[]args){
inti=1;
intsum=0;
do
{
sum+=i;
i++;
}while(i<=100);
System.out.println(″1~100的和是:″+sum);}}
3.for语句
for语句基本的语法格式如下:
for(表达式1;表达式2;表达式3)
{循环体语句;
}其中,for是关键字。在for语句中,3个表达式之间用分号“;”隔开。表达式1给出循环变量初始值;表达式2给出循环条件,结果为布尔型;表达式3给出循环变化的规律,常为自增或自减。
for语句执行流程为:首先执行表达式1,为循环控制变量赋初值。然后判断表达式2是否满足循环条件,当表达式2的值为true时,执行循环体,再执行表达式3改变循环变量的值,进入下一轮循环;当表达式2的值为false时,循环结束,执行for语句后面的语句。for语句的执行流程如图2-9所示。图2-9for语句的执行流程【例2-8】用for语句求1~100的和并输出。publicclassExam2_8{publicstaticvoidmain(String[]args){intsum=0;for(inti=1;i<=100;i++)sum+=i;System.out.println(″1~100的和是:″+sum);}}
Java语言提供了3种无条件跳转语句:return、break和continue。return语句可以从方法中返回值,break和continue语句用于控制流程转移。
1.return语句
return语句能终止当前成员方法的执行,返回调用该方法的位置,并从该语句的下一条语句继续执行程序。如果该方法的返回类型不是void,则需要提供相应类型的返回值。return语句有以下使用格式:格式1:
return;该格式用在返回类型为void的方法中,且return可以省略。格式2:
return返回值;该格式返回值可以是基本数据类型和引用数据类型,但必须和方法的类型一致,否则编译无法通过。2.2.5跳转语句
2.break语句
break语句主要有3种作用:一是终止switch语句的执行,跳出switch语句,执行switch语句后面的语句;二是终止循环体语句,跳出循环结构,即结束循环;三是与标记语句配合使用从内层循环或内层程序退出。
【例2-9】break语句的使用:使用break语句输出break以前的数字,并输出中断循环的数字。PublicclassExam2_9{publicstaticvoidmain(String[]args){intcount;for(count=1;count<=10;count++){if(count==5)break;System.out.println(count);}System.out.println(″循环中断的数是:″+count);}}程序运行结果如图2-10所示。图2-10例2-9程序运行结果
3.continue语句与break语句不同,continue语句并不终止循环体,而是在循环体中遇到continue语句时,本次循环结束,继续下一次循环条件判断,如果条件满足则继续执行,所以continue语句只是跳出本次循环体。
【例2-10】continue语句的使用:在输出数字的过程中使用continue语句跳过指定的数字。
publicclassExam2_10{
publicstaticvoidmain(String[]args){
intcount;
for(count=1;count<=10;count++){
if(count==5)continue;
System.out.println(count);
}
System.out.println(″循环中断的数是:″+count);
}
}程序运行结果如图2-11所示。图2-11例2-9程序运行结果基本数据类型的变量只能存储一个不可分解的简单数据,如一个整数或一个字符等,而在实际的应用程序中,有时需要处理大量数据。例如,将10000个整数排序,首先遇到的问题是如何存储这10000个整数,如果用基本数据类型来存储,则必须声明10000个整数类型变量,显然这种存储方式是不可取的。因此,仅有基本数据类型是无法满足实际应用的需要,必须使用引用数据类型。对于上述需求,采用数组类型,问题将迎刃而解。在程序设计中,为了处理方便,把具有相同类型的若干变量按有序的形式组织起来,这些按序排列的同类数据元素的集合称为数组。一个数组包含若干个同名变量,每个变量称为一个数组元素,数组的元素个数称为数组的长度。数组元素在数组中的位置称为数组的下标,通过数组名加下标的形式可以引用数组中的指定元素。数组下标的个数称为数组的维数,有一个下标的是一维数组,有两个下标的就是二维数组。
1.一维数组声明数组和基本数据类型一样,必须先声明后使用。声明一维数组的语法格式有以下两种格式:格式一:数据类型[]数组名;格式二:数据类型数组名[];其中:数据类型:数组中数组元素的数据类型,可以是基本数据类型,也可以是引用数据类型。数组名:是用户声明的合法标识符。
[]:用于表示一维数组,不能省略。2.3.1一维数组例如:
inta[];int[]b;
String[]grades;
publicstaticvoidmain(Stringargs[]){}//数组作为参数声明多个一维数组可使用如下方式:
int[]c,d,e;或
intc[],d[],e[];
2.为数组分配空间使用new运算符申请数组所需内存单元,语法格式如下:数组名=new数据类型[长度];其中:数组名:合法的标识符。
new:运算符关键字,用于分配空间。数据类型:数组元素的数据类型,该数据类型必须与数组声明时的数据类型一致。长度:数组申请的存储单元个数,必须是大于0的正整数。例如:
int
a[];//数组的声明
a=newint[6];//为数组分配空间数组a获得6个存储单元的内存空间,存储单元的大小由数组元素的数据类型决定。上述语句等同于:
inta[]=newint[6];
3.获取数组长度
Java语言自动为每个数组提供length属性用于保存数组存储单元的个数。可以使用点运算符获取数组长度。格式如下:数组名l.ength建议使用length属性使数组下标在0~数组名.length-1变化,这样既避免产生下标越界的运行错误,又能使程序段不受数组长度变化的影响,从而使程序更加稳定和易于维护。
4.数组元素的引用和运算数组中的元素可以是基本数据类型,也可以是引用数据类型。数组元素的引用格式如下:数组名[下标];例如:
inta[6];//表示数组a有6个元素
a[0]=100;//a[0]表示数组的第1个元素,赋值为100
a[1]=200;//a[1]表示数组的第2个元素,赋值为200
a[5]=100;//a[5]表示数组的第6个元素,赋值为100数组名的命名规则与其他变量名是一样的。索引必须是非负整数,还可以用表达式示。例如:
intx=2,y=3;那么a[x+y]等同于a[5]。
5.数组声明时赋初值数组在声明时可以赋初值。例如:
int
a[]={1,2,3,4,5,6};//声明整型数组a有6个元素,初始值为1~6
6.数组元素的初始化使用new运算符动态分配存储单元后,将对数组元素进行初始化。数组元素的初始化值见表2-9。
7.数组变量的引用赋值当声明一个数组变量a而未申请存储空间时,数组变量a是未初始化的,没有地址及特性值。只有为a申请存储空间,才能以下标表示数组元素,否则将产生编译错误。两个数组变量之间赋值是引用赋值,传递的是地址等特性,没有申请新的存储空间。例如:
inta[]={1,2,3,4,5};
intb[];
b=a;
b[0]=100;数组b获得数组a的已有存储空间的地址,此时两个数组变量拥有同一个数组空间,两个数组变量引用同一个数组。以上语句执行后的内存单元存储的数值,如图2-12所示。图2-12数组变量赋初值【例2-11】一维数组的定义与赋值。importjava.util.Arrays;PublicclassExam2_11{publicstaticvoidmain(String[]args){int[]a={1,2,3,4,500,600,700,800};int[]b,c,d;b=newint[8];c=newint[8];d=newint[8];System.out.println(Arrays.toString(a));System.arraycopy(a,0,b,0,a.length);System.out.println(Arrays.toString(b));System.arraycopy(a,0,c,0,4);//调用arraycopy方法复制数组a前4个元素到数组c中的前4个元素
System.out.println(Arrays.toString(c));//Arrays调用toString方法返回数组c的元素值
System.arraycopy(a,4,d,0,4);//调用arraycopy方法复制数组a的后4个元素到数组d中的前4个元素
System.out.println(Arrays.toString(d));c[c.length-1]=-100;//将-100赋给数组c的最后一个元素
d[d.length-1]=-200;System.out.println(Arrays.toString(c));System.out.println(Arrays.toString(d));}}程序运行结果如图2-13所示。图2-13例2-11程序运行结果常用的多维数组是二维数组。下面我们将详细介绍二维数组。1.二维数组声明二维数组的声明方法和一维数组的类似,例如:inta[][];//声明二维数组aa=newint[5][6];//为数组a申请5行6列共30个存储单元上述声明也可写为:inta[][]=newint[5][6];二维数组在声明时也可以赋初值。例如:inta[][]={{1,2,3},{4,5,6},{7,8,9}};2.3.2多维数组2.获取数组长度例如:al.ength;//获取二维数组的长度,即二维数组的行数a[0]l.ength;//获取一维数组的长度,即二维数组的列数3.数组元素的表示和运算二维数组由行(row)和列(column)组成,必须用两个索引指定一个数组元素。例如:inta[][]=newint[5][6];//a[0][0]表示数组a中第一行第一列元素【例2-12】二维数组的使用:计算下面所示矩阵的主对角线元素(1,5,9)的和。1
2
34
5
67
8
9publicclassExam2_12{
publicstaticvoidmain(String[]args){
inta[][]={{1,2,3},{4,5,6},{7,8,9}};
inti
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年商业地产代理销售与租赁复合合同
- 2024年广告设计制作与发布合同
- 2023年温州市泰顺县农村发展有限公司招聘考试真题
- 2023年四川雅茶集团茶业有限公司招聘人员考试真题
- 04版菁专利许可使用合同详述
- 2023年泉州市直部分公办学校招聘编制内新任教师考试真题
- 2023年内蒙古气象部门招聘(气象类)考试真题
- 2024年定制:建筑用夹芯板供应合同
- 2023年广州市海珠区劳动人事争议仲裁院招聘雇员考试真题
- 2023年厦门市集美区浒井实验幼儿园教职工招聘考试真题
- 木门窗施工方案
- 四川省成都市九县区2024-2025学年高一上学期期中考试数学试题(含答案)
- 2024秋国开《四史通讲》期末大作业试题B答案(第1套)
- 2024年8月CCAA国家注册审核员《管理体系认证基础》考试题目含解析
- 2024新版(北京版)三年级英语上册单词带音标
- 2023医疗质量安全核心制度要点释义(第二版)对比版
- 《我家漂亮的尺子》课件-定稿
- 思想道德与法治第二章
- 内分泌科出科考试试题(附答案)
- 对护理不良事件上报系统培训PPT-医疗教育宣传PPT
- 中国粒缺伴发热抗菌药物指南(2016版)解读ppt课件
评论
0/150
提交评论