1、第第2章章 Java程序设计语言基础程序设计语言基础掌握掌握Java常用的开发工具常用的开发工具掌握掌握Java程序的基本结构程序的基本结构掌握掌握Java语言的基本控制流程语言的基本控制流程能使用能使用Java语言编写较为复杂语言编写较为复杂的应用命令行程序的应用命令行程序课程目标课程目标 Java开发环境开发环境 Java语言基础语言基础 Java控制结构控制结构目目 录录Java开发环境开发环境 了解了解JAVA开发环境开发环境 掌握掌握J2SDK的安装和环境变量的设置方法的安装和环境变量的设置方法 理解理解path和和classpath的作用的作用 学会创建第一个学会创建第一个java
2、应用程序并成功运行应用程序并成功运行 初步掌握编写初步掌握编写java程序的注意事项程序的注意事项上节回顾上节回顾:Java的编译与执行的编译与执行Java源程序源程序(.java文件文件)Java编译器编译器Java Bytecode(.class文件文件)RuntimeInterpreterBytecode 载入器载入器字节码校验器字节码校验器JITHardwareJava平台平台Java平台的概念平台的概念 平台:为程序提供运行环境的硬件和操作平台:为程序提供运行环境的硬件和操作系统的总称系统的总称 Java平台:纯软件的,为平台:纯软件的,为Java提供统一的提供统一的运行环境运行环境
3、Java平台的组成结构平台的组成结构 Java虚拟机虚拟机(JVM)Java应用程序接口应用程序接口(Java API)Java类库类库Java平台平台 Java平台的组成结构平台的组成结构 Java虚拟机:解释并运行Java二进制码 Java API:由许多软件包组成,这些软件包可以实现很多功能,包括图形界面功能 Java平台平台 Java应用程序接口的主要内容应用程序接口的主要内容 Java开发环境开发环境 从http:/网站上免费下载J2SDK(Java2 Software Development Kit),并利用命令行方式操作javac(编译器);java(解释器)Java集成开发环境
4、(IDE)有:NetBeans、Eclipse等 J2SDK的安装(演示)Java开发环境开发环境目录结构目录结构 安装安装SDK后产生如下目录结构:后产生如下目录结构:bin目录:Java开发工具,包括Java编译器、解释器等demo目录:一些实例程序lib目录:Java开发类库jre目录:Java运行环境,包括Java虚拟机、运行类库等 Java开发环境开发环境开发工具介绍开发工具介绍 javac.exe-Java编译器,用来将java程序编译成Bytecode。java.exe-Java解释器,执行已经转换成Bytecode的 Java应用程序。通常被人们称为Java虚拟机。jdb.ex
5、e-Java调试器,用来调试Java程序。javap.exe-反编译(将.class文件还原为.java)。javadoc.exe-文档生成器,创建HTML文件。appletviwer.exe-Applet解释器,用来解释已经转换成Bytecode的Java小应用程序。Java开发环境开发环境 设置环境变量设置环境变量在在Windows 2000和和Window XP系统下,系统下,可以选择可以选择【控制面板控制面板】|【系统系统】|【高级高级】|【环境变量环境变量】。在出现的环境变量窗口中。在出现的环境变量窗口中包含包含【用户变量用户变量】和和【系统变量系统变量】,在系,在系统变量框中选择统
6、变量框中选择【path】,单击,单击【编辑编辑】按钮,在弹出的按钮,在弹出的【编辑系统变量编辑系统变量】窗口的窗口的【变量值变量值】框最后加上框最后加上 ;JDK安装路径安装路径bin;Java语言开发环境语言开发环境 什么是环境变量什么是环境变量 查看环境变量的两种方式查看环境变量的两种方式 如何设置系统环境变量如何设置系统环境变量 path环境变量的作用环境变量的作用%path%的意义的意义 如何解决使用如何解决使用java命令中的问题命令中的问题Java语言开发环境语言开发环境 实际操作讲解实际操作讲解classpath的作用的作用 Java解释器是如何处理当前目录的解释器是如何处理当前
7、目录的 如何解决当前目录的问题如何解决当前目录的问题 配置配置classpath的几个注意事项的几个注意事项创建第一个创建第一个Java程序程序(1/4)1.用记事本编写源程序:用记事本编写源程序:创建第一个创建第一个Java程序程序(1/4)源程序:源程序:/*文件名文件名:FirstApp.java*功功 能能:显示显示天天好心情天天好心情!*编写编写:张三张三*编写时间编写时间:2004.06.03*修改修改:李四李四*修改时间修改时间:2004.08.15*/public class FirstApp public static void main(String args)/显示显示天
8、天好心情天天好心情!System.out.println(天天好心情天天好心情!);类的名称指明类为公共的类程序的入口程序中的语句命令行参数创建第一个创建第一个Java程序程序(1/4)Java语言区分大小写,录入时必须严格按这语言区分大小写,录入时必须严格按这里给出的大小写里给出的大小写 特别容易弄错的是特别容易弄错的是“System.out.println”,只有只有System是大写,是大写,out和和println都是小写都是小写英文字母英文字母的大小写的大小写问题问题“FirstApp”和和“firstapp”“System.out.println”,“system.out.prin
9、tln”和和“System.Out.Println”例子对比:例子对比:创建第一个创建第一个Java程序程序(1/4)中文标点符号问题中文标点符号问题 中文的分号和英文的分号很相似,但中文中文的分号和英文的分号很相似,但中文的分号后面有空白,英文的分号后面没有的分号后面有空白,英文的分号后面没有 中文的右引号特别容易在输入中文字符串中文的右引号特别容易在输入中文字符串时出现,往往是在输入中文后随手输入了时出现,往往是在输入中文后随手输入了引号的缘故引号的缘故 例子对比:例子对比:中文的分号中文的分号“;”和英文的分号和英文的分号“;”中文右引号,如:中文右引号,如:天天好心情!天天好心情!”关
10、于关于Java应用程序的说明应用程序的说明1.1.JavaJava中的基本程序单位是中的基本程序单位是类类,每一个程序中应该每一个程序中应该有一个有一个公共类公共类2.2.public class public class FirstAppFirstApp就是声明了一个公共类就是声明了一个公共类3.3.其中其中FirstAppFirstApp是类的名称是类的名称,是由用户指定的是由用户指定的4.公共类的名称必须与文件名一致公共类的名称必须与文件名一致5.5.每一个每一个JavaJava应用程序必须定义一个应用程序必须定义一个mainmain方法方法 public static void mai
11、n(String args)public static void main(String args)6.如果在一个如果在一个javajava程序文件中定义了多个类程序文件中定义了多个类,则则只能有一个只能有一个publicpublic的的,mainmain方法方法必须在必须在publicpublic的类里面的类里面创建第一个创建第一个Java程序程序(2/4)2.保存源程序保存源程序 选定一个目录,如选定一个目录,如C:Java来保存文件来保存文件 在在“文件名文件名”一栏敲入一栏敲入“FirstApp.java”,“保存类型保存类型”一栏选一栏选“所有文件所有文件”需要注意的问题需要注意的问
12、题 不要忘记了文件保存在什么位置不要忘记了文件保存在什么位置 文件类型要选文件类型要选“所有文件所有文件”,并敲入扩展名,否则,并敲入扩展名,否则可能保存为以可能保存为以txt为后缀的文本文件为后缀的文本文件创建第一个Java程序(3/4)3.编译源程序编译源程序 选选“程序程序”“附件附件”“命令提示符命令提示符”:闪烁的光标闪烁的光标 ,表示在这里输入命令。光标前,表示在这里输入命令。光标前的的 为当前路径。为当前路径。创建第一个创建第一个Java程序程序(3/4)敲入:敲入:cd Java,进入,进入 目录下目录下 敲入:敲入:dir,显示该目录下的所有文件,显示该目录下的所有文件其中其
13、中“FirstApp.java”就是保存的就是保存的Java源文件源文件创建第一个创建第一个Java程序程序(3/4)敲入:敲入:javac FirstApp.java 几秒钟后,如果提示符几秒钟后,如果提示符 重新出现,重新出现,没有提示任何信息,说明编译成功了。没有提示任何信息,说明编译成功了。编译成功之后,将产生一个字节码文件编译成功之后,将产生一个字节码文件FirstApp.class,它的文件名与类名相同,相,它的文件名与类名相同,相当于其它语言程序的可执行文件当于其它语言程序的可执行文件创建第一个创建第一个Java程序程序(3/4)再次敲入再次敲入dir命令,可以看到多了一个文件:
14、命令,可以看到多了一个文件:字节码文件:以字节码文件:以.class作为文件后缀作为文件后缀创建第一个创建第一个Java程序程序(4/4)4.执行执行Java程序程序 敲入命令:敲入命令:java FirstApp 运行结果显示如下:运行结果显示如下:祝贺你,你的第一个程序运行成功了!祝贺你,你的第一个程序运行成功了!JAVA Applet简介简介在在Java中可以编写两类程序:中可以编写两类程序:应用程序(Applications)常见的应用程序 Java Applet(小应用程序)。Java Applet是一种可以嵌入到HTML文档(即Web页)中的Java程序。当浏览器装入一个含有app
15、let的Web页时,applet下载到该浏览器中,并开始执行。Applet可以在Internet中传输并在兼容Java的Web浏览器中运行。JAVA Applet编写编写import java.awt.*;import java.applet.*;public class HelloWorldApplet extends Applet public void paint(Graphics g)super.paint(g);g.drawString(“Hello World!”,30,30);该程序的功能是:在坐标(该程序的功能是:在坐标(30,30)处输出字符串)处输出字符串“Hello Wo
16、rld!”。在这个程序中,没有实现在这个程序中,没有实现main()方法,这是方法,这是Applet与与Application(应用(应用程序)的区别之一。为了运行该程序,首先也应将其保存到一个名为程序)的区别之一。为了运行该程序,首先也应将其保存到一个名为HelloWorldApplet.java的文件中,然后对其进行编译:的文件中,然后对其进行编译:D:Jjavaworkjavac HelloWorldApplet.java这样将得到字节码文件这样将得到字节码文件HelloWorldApplet.class。由于。由于Applet中没有中没有main()方法作为方法作为Java解释器的入口
17、,我们必须编写解释器的入口,我们必须编写HTML文件,然后将文件,然后将Applet嵌嵌入其中,接着使用入其中,接着使用appletviewer来运行,或在支持来运行,或在支持Java的浏览器上运行。的浏览器上运行。JAVA Applet编写编写该该HTML文件如下。文件如下。My Applet 其中,使用其中,使用标记来启动标记来启动HelloWorldApplet,code属性指明字属性指明字节码所在的文件,节码所在的文件,width和和height属性指明属性指明applet所占区域范围。最后,所占区域范围。最后,我们将此我们将此HTML文件存入文件存入AppletExp.html,然后
18、运行:,然后运行:C:JavaBookappletviewer AppExp.html此时,将弹出一个此时,将弹出一个Applet浏览窗口,在其中指定区域显示浏览窗口,在其中指定区域显示“Hello World!”。JAVA IDE IDE(Integrated Development Environment)集成开发环境如:NetBeans、Eclipse、JCreator 等第第1周作业周作业1、自己动手搭建好、自己动手搭建好Java环境环境2、复习本章、预习下章、复习本章、预习下章 Java开发环境开发环境 Java语言基础语言基础 Java控制结构控制结构目目 录录Java程序的基本结
19、构程序的基本结构控制台Java程序图形用户界面Java程序JAVA语言基础语言基础 标识符与关键字、分隔符标识符与关键字、分隔符 基本数据类型、变量和常量基本数据类型、变量和常量 操作运算符及表达式操作运算符及表达式 Java的输入输出的输入输出JAVA基本语法基本语法 java代码的位置代码的位置 java是严格区分大小写的是严格区分大小写的 java是一种自由格式的语言是一种自由格式的语言 代码分为代码分为结构定义语句结构定义语句和和功能执行语句功能执行语句功能执行语句的最后必须用功能执行语句的最后必须用分号分号结束结束标识符标识符 在编写应用程序时,程序员对程序中的各个元素(变量、常量、
20、对象、类、属性、方法)加以命名时使用的命名记号称为标识符(identifer)。JAVA标识符的命名规则:标识符的命名规则:以以英文英文字母字母,下划线下划线_,或者美元符号或者美元符号$开头(即不能以数字开头(即不能以数字开头);开头);由以上三种字符与数字由以上三种字符与数字0到到9的组合;的组合;标识符各字符之间不能有空格标识符各字符之间不能有空格;最大长度最大长度65535;区分大小写,如区分大小写,如_Student和和_student是两个不同的标示是两个不同的标示符。符。标识符标识符 判断下列标识符是否合法判断下列标识符是否合法 3d、$1000、Letter#、x0y、whil
21、e、pri*i 良好的编程习惯良好的编程习惯 在定义标识符时,应该能反映它表示的变量、对象、在定义标识符时,应该能反映它表示的变量、对象、类的意义;如:类的意义;如:studentName或或student_name 习惯上,表示类、接口名的标识符用大写字母开头,习惯上,表示类、接口名的标识符用大写字母开头,表示变量、方法名的标识符用小写字母开头,表示表示变量、方法名的标识符用小写字母开头,表示常量名的标示符全部用大写字母;常量名的标示符全部用大写字母;标示符最好不用标示符最好不用$。关键字关键字 Java系统使用(保留)的系统使用(保留)的关键字关键字(Keyword)很多,它们有明确的含义
22、,不能另做它用。关很多,它们有明确的含义,不能另做它用。关键字也叫键字也叫保留字保留字。程序员在编写程序员在编写JAVA程序时,程序时,使用的标识符一使用的标识符一定不能包含如下页图所示的关键字。定不能包含如下页图所示的关键字。abstractdoimplementprivatethisbooleandoubleimportprotectedthrowbreakelseinstanceof publicthrowsbyteextendintreturntransientcasefalseinterfaceshorttruecatchfinallongstatictrycharfianllyna
23、tivestrictfpvoidclassfloatnewsupervolatilecontinuefornullswitchwhiledefaultif package synchronizedenumJava关键字关键字分隔符分隔符 1、注释、注释在在java语言中语言中,可以采用三种注释方式可以采用三种注释方式:单行单行注释,形式为:注释,形式为:/注释内容注释内容多行多行注释(块注释),形式为:注释(块注释),形式为:/*注释内容注释内容*/文档文档注释,形式为:注释,形式为:/*注释内容注释内容*/,这是,这是java所特有的一种注释,是为支持所特有的一种注释,是为支持javadoc
24、而设计而设计的。注意参考教材第的。注意参考教材第24页。页。分隔符分隔符 2、空白符、空白符包括空格符、回车符、制表符包括空格符、回车符、制表符 3、普通分隔符、普通分隔符 具有明确的语法含义,要按照语法规定去使用。具有明确的语法含义,要按照语法规定去使用。大括号(大括号():用于定义类体、方法体、复合语句):用于定义类体、方法体、复合语句分号(分号(;):添加在功能语句之后):添加在功能语句之后逗号(逗号(,):用于分隔变量声明时的各个变量和方法的):用于分隔变量声明时的各个变量和方法的各个参数等各个参数等冒号(冒号(:):用于标号和语句之间):用于标号和语句之间基本数据类型基本数据类型 数
25、据类型是程序设计语言中的基本概念,数据类型是程序设计语言中的基本概念,它包括两部分,它包括两部分,取值范围取值范围(不同类型的数(不同类型的数据在计算机中所占用的内存空间大小不同)据在计算机中所占用的内存空间大小不同)和和在这些值上所允许的操作在这些值上所允许的操作,定义一个类,定义一个类型就限定了这两部分。型就限定了这两部分。基本数据类型基本数据类型数据类型数据类型基本数据类型基本数据类型引用数据类型引用数据类型数值型数值型字符型字符型(char)布尔型(布尔型(boolean)整数类型整数类型(byte,short,int,long)浮点类型浮点类型(float,double)类类(cla
26、ss)接口接口(interface)数组数组基本数据类型基本数据类型类型类型内存内存(bit)(bit)取值范围取值范围运算运算整整 型型bytebyte8 8-128-127-32768-32767-32768-32767-231231-1-263263-1+,-,+,-,*,/,/,%,+,-,%,+,-,+=,+=,shortshort1616intint3232longlong6464浮点型浮点型floatfloat32 32 doubledouble6464布尔型布尔型booleanboolean 8 8&,&,|,!,|,!,字符型字符型charchar1616任意字符任意字符+(
27、连接)(连接)-3.4E38-3.4E38-1.7E308-1.7E308true或false变量定义变量定义/数据类型数据类型 在在JavaJava语言中语言中,变量按下列方式定义变量按下列方式定义变量之间用逗变量之间用逗号号,隔开隔开语句的最后是语句的最后是一个分号一个分号;1.1.变量的类型变量的类型 变量名称;变量名称;2.2.变量的类型变量的类型 变量名称变量名称1,1,变量名称变量名称2,2,;3.3.变量的类型变量的类型 变量名称变量名称 变量的值;变量的值;变量定义变量定义/数据类型数据类型 变量定义的例子变量定义的例子int number;int number;int num
28、ber1,number2=5,number3;int number1,number2=5,number3;float pi;float pi;float PI=3.1416f;float PI=3.1416f;声明了一个声明了一个3232位的整位的整型变量型变量numbernumber声明了一个声明了一个单精度单精度的浮点型变的浮点型变量量,并且给它赋了值并且给它赋了值注意注意:给给floatfloat型的变型的变量赋值时量赋值时,值的后面要值的后面要写一个写一个f f或者或者F F变量定义变量定义/数据类型数据类型 更多变量定义的例子更多变量定义的例子long number;long num
29、ber;long cont=1357924680L;long cont=1357924680L;声明了一个声明了一个6464位的长整位的长整型变量型变量numbernumber声明了一个声明了一个长整型长整型变量变量,并且给并且给它赋了值它赋了值注意注意:给给longlong型的变型的变量赋值时量赋值时,值的后面值的后面要写一个要写一个l l 或者或者L L变量定义变量定义/数据类型数据类型 更多变量定义的例子更多变量定义的例子double db;double db;double max=1357924680d;double max=1357924680d;声明了一个声明了一个双精度双精度的浮
30、的浮点型变量点型变量dbdb声明了一个声明了一个双精度双精度的浮点型变的浮点型变量量,并且给它赋了值并且给它赋了值注意注意:给给doubledouble型的变量赋值时型的变量赋值时,值的后面值的后面可以写一个可以写一个d d 或者或者D,D,也可以什么都不写也可以什么都不写变量定义变量定义/数据类型数据类型 更多变量定义的例子更多变量定义的例子boolean tf;boolean tf;tf=false;tf=false;声明了一个声明了一个布尔型布尔型变量变量tftf给给tftf赋了赋了值值注意注意:booleanboolean型的变量只有型的变量只有truetrue和和falsefalse
31、这两个值,区别于这两个值,区别于C+C+中的中的1 1和和0 0变量定义变量定义/数据类型数据类型 更多变量定义的例子更多变量定义的例子char c;char c;c=c=A A;声明了声明了一个一个字符型字符型变量变量c c给给字符型字符型变量变量c c赋值赋值A A注意注意:给给charchar型的变量赋值时型的变量赋值时,值要用值要用单引号单引号括起来括起来变量定义变量定义/数据类型数据类型更多变量定义的例子更多变量定义的例子对于整型数而言对于整型数而言,除了可以给它赋值一个除了可以给它赋值一个10进制的数进制的数,还还可以使用可以使用8进制和进制和16进制的数进制的数声明一个声明一个短
32、整型短整型变量变量,并且给它赋个并且给它赋个8 8进制进制的值的值:07:07声明一个声明一个整型整型变量变量,并且给它赋个并且给它赋个1616进制进制的值的值:2B:2B8 8进制的数以进制的数以0 0开开头头,16,16进制数以进制数以0 x0 x或或0X0X开头开头short st=07;short st=07;int n=0X2B;int n=0X2B;变量定义变量定义/数据类型数据类型还有一种数据类型叫字符串还有一种数据类型叫字符串,String,String声明了一个字符串声明了一个字符串s1s1声明了一个字符串声明了一个字符串s2,s2,并且并且给它赋了值给它赋了值String
33、s1;String s1;String s2=String s2=“Hello World!Hello World!”;字符串不属于基本数据类型字符串不属于基本数据类型,但在声明或者定义一个字符但在声明或者定义一个字符串的时候串的时候,可以象声明一个基本数据类型的变量那样做。可以象声明一个基本数据类型的变量那样做。变量定义注意事项变量定义注意事项 没有声明变量就使用是错误的没有声明变量就使用是错误的,重复定义变重复定义变量也是错误的。量也是错误的。变量在赋值后才能使用。变量在赋值后才能使用。变量的作用域:指变量的有效作用范围。变量的作用域:指变量的有效作用范围。一个变量的作用域是从它的声明处开
34、始,一个变量的作用域是从它的声明处开始,到它所在的程序块(到它所在的程序块(block)结束。)结束。程序块是指由界定符号程序块是指由界定符号“”确定的程序段。确定的程序段。例如一个类体,一个方法体。例如一个类体,一个方法体。变量的作用域变量的作用域-实例实例class examplestatic int n1=9;public static void display()int n2=200;n1=n1+n2;System.out.println(n1=+n1);System.out.println(n2=+n2);public static void main(String args)int
35、 n3;n3=n1+2;System.out.println(n1=+n1);System.out.println(n3=+n3);System.out.println();display();练习:基本数据类型的使用(练习:基本数据类型的使用(1)练习:基本数据类型的使用(练习:基本数据类型的使用(2)练习:基本数据类型的使用(练习:基本数据类型的使用(3)练习:基本数据类型的使用(练习:基本数据类型的使用(4)假设有两个假设有两个int型变量型变量one和和two,编写代码交,编写代码交换它们的值。换它们的值。int one=10;int two=20;System.out.println
36、(one);System.out.println(two);int temp=two;two=one;One=temp;System.out.println(one);System.out.println(two);常常 量量 常量(常量(constant)是指在程序运行中其值是指在程序运行中其值一直保持不变且不能被改变的量。一直保持不变且不能被改变的量。常量初始化之后就不能再改变它的值常量初始化之后就不能再改变它的值常量使用常量使用final关键字来定义关键字来定义如:如:final float PI=3.1415926f;final byte MAX=127;final boolean s
37、ex=true;final char a=a;final string s=“您好啊!您好啊!”;(字符串常量字符串常量)常常 量量 所有的基本数据类型都可定义常量所有的基本数据类型都可定义常量 常用的常用的转义字符转义字符常量常量r表示接受键盘输入,相当于按下了回车键;表示接受键盘输入,相当于按下了回车键;n是换行;是换行;t是制表符,相当于是制表符,相当于table键;键;b是退格键,相当于是退格键,相当于Back Space;是单引号,而是单引号,而“是双引号;是双引号;是一个斜杠是一个斜杠“”。数据类型间的转换数据类型间的转换 类型的转换通常是在一个运算式中参加运类型的转换通常是在一个
38、运算式中参加运算的各个变量的类型不一致算的各个变量的类型不一致,或者要给某种或者要给某种类型的变量赋一个不同类型的值时发生类型的变量赋一个不同类型的值时发生 类型转换分为类型转换分为:自动转换自动转换(隐式隐式)强制转换强制转换(显式显式/casting)数据类型间的转换数据类型间的转换 自动转换:两种类型是兼容的;目的数据自动转换:两种类型是兼容的;目的数据类型的取值范围比来源数据类型的取值范类型的取值范围比来源数据类型的取值范围要大。围要大。double byteshort int longchar float 数据类型间的转换数据类型间的转换 强制转换强制转换:目的数据类型的取值范围比来
39、源数据:目的数据类型的取值范围比来源数据类型的取值范围要小。如当需要将类型的取值范围要小。如当需要将int型的值赋给型的值赋给一个一个byte型的变量时该怎么办?型的变量时该怎么办?当把一个浮点值赋给整数类型时,将发生一种不当把一个浮点值赋给整数类型时,将发生一种不同的类型转换:同的类型转换:截断截断。大家都知道整数没有小数。大家都知道整数没有小数部分。这样,当把浮点值赋给整数类型时,它的部分。这样,当把浮点值赋给整数类型时,它的小数部分将会被舍去。例如,如果将值小数部分将会被舍去。例如,如果将值1.23赋给赋给一个整数,其结果只是一个整数,其结果只是1,0.23被舍弃。当然,被舍弃。当然,如
40、果浮点值太大而不能适合目标整数类型,那么如果浮点值太大而不能适合目标整数类型,那么它的值将会因为对目标类型值域取模而减少。它的值将会因为对目标类型值域取模而减少。慎用强制类型转换。慎用强制类型转换。表达式中类型的自动提升表达式中类型的自动提升 除了赋值方式,类型变换还可以在表达式中进行。在表除了赋值方式,类型变换还可以在表达式中进行。在表达式中,对中间值的精确要求有时超过任何一个操作数的达式中,对中间值的精确要求有时超过任何一个操作数的范围。例如,考察下面的表达式。范围。例如,考察下面的表达式。byte a=40;byte b=50;byte c=100;int d=a*b/c;中间项结果中间
41、项结果a*b很容易超过它的任何一个很容易超过它的任何一个byte型操作数型操作数的范围。为处理这种问题,当分析表达式时,的范围。为处理这种问题,当分析表达式时,Java自动自动提升各个提升各个byte型或型或short型的操作数到型的操作数到int型。这意味着子型。这意味着子表达式表达式a*b使用整数而不是字节型来执行。这样,尽管变使用整数而不是字节型来执行。这样,尽管变量量a和和b都被指定为都被指定为byte型,型,50*40中间表达式的结果中间表达式的结果2000是合法的。是合法的。表达式中类型的自动提升表达式中类型的自动提升 自动类型提升有好处,但它也会引起令人疑惑的编译错误。自动类型提
42、升有好处,但它也会引起令人疑惑的编译错误。例如,下面这个看起来正确的程序却会引起一些问题。例如,下面这个看起来正确的程序却会引起一些问题。byte b=50;b=b*2;/Error!Cannot assign an int to a byte!该程序试图将一个完全合法的该程序试图将一个完全合法的byte型的值型的值50*2再存储给一个再存储给一个byte型的变型的变量。但是,当表达式求值的时候,操作数被自动地提升为量。但是,当表达式求值的时候,操作数被自动地提升为int型,计算结型,计算结果也被提升为果也被提升为int型。这样,表达式的结果现在是型。这样,表达式的结果现在是int型,不强制转
43、换它型,不强制转换它就不能被赋为就不能被赋为byte型。型。在理解了上述溢出后果的情况下,就知道应该使用一个显式的强制类型转在理解了上述溢出后果的情况下,就知道应该使用一个显式的强制类型转换。换。byte b=50;b=(byte)(b*2);这样将产生正确的结果这样将产生正确的结果100。关于类型提升的若干约定关于类型提升的若干约定 除了将除了将byte型和型和shorts型提升到型提升到int型以外,型以外,Java语言还规定了若干适用于表达式的类语言还规定了若干适用于表达式的类型提升规则。首先,如前面所描述的,型提升规则。首先,如前面所描述的,所所有的有的byte型和型和short型的值
44、被提升到型的值被提升到 int型。型。其次,如果一个操作数是其次,如果一个操作数是long型,整个表型,整个表达式将被提升到达式将被提升到long型;如果一个操作数型;如果一个操作数是是float型,整个表达式将被提升到型,整个表达式将被提升到float型;型;如果有一个操作数是如果有一个操作数是double型,计算结果型,计算结果就是就是double型。型。例子例子例如,下面的程序显示了在表达式中的每个值是如何例如,下面的程序显示了在表达式中的每个值是如何被提升的,以匹配各自双目运算符的第二个参数。被提升的,以匹配各自双目运算符的第二个参数。class Promote public stat
45、ic void main(String args)byte b=42;char c=a;short s=1024;int i=50000;float f=5.67f;double d=.1234;double result=(f*b)+(i/c)-(d*s);System.out.println(f*b)+(i/c)+-+(d*s);System.out.println(result=+result);赋值语句赋值语句前面在讲变量的定义时我们已经多次使用了赋值语句前面在讲变量的定义时我们已经多次使用了赋值语句,它的一般格式如下它的一般格式如下1.1.被赋值的变量被赋值的变量 =数值数值;2.2
46、.被赋值的变量被赋值的变量 =用来赋值的变量用来赋值的变量;3.3.被赋值的变量被赋值的变量 =表达式表达式;=称为赋值运算符称为赋值运算符float f=1.234F;float f=1.234F;float alf=f;float alf=f;String s=String s=“HelloHello”+“Java Java”;赋值语句赋值语句更多的赋值语句更多的赋值语句除了前面用到的除了前面用到的算术表达式算术表达式以外以外,还有还有逻辑表达逻辑表达式式boolean b=32;在这个赋值语句里在这个赋值语句里,最终最终b的值是什么呢的值是什么呢?答案:答案:false运算符运算符 在在
47、Java语言中,运算符可以划语言中,运算符可以划分为四大类:分为四大类:算术运算符算术运算符、关关系运算符系运算符、位运算符以及、位运算符以及逻辑逻辑运算符运算符。此外还定义了一些附。此外还定义了一些附加运算符,用于某些特殊情况加运算符,用于某些特殊情况的处理。的处理。算术运算符算术运算符算术运算符算术运算符 i+与与+i的区别的区别:i+在使用在使用i之后,使之后,使i的值加的值加1,因此执行完,因此执行完i+后,整个表达式的值为后,整个表达式的值为i,而,而i的值变为的值变为i+1。+i在使用在使用i之前,使之前,使i的值加的值加1,因此执行完,因此执行完+i后,整个表达式和后,整个表达式
48、和i的值均为的值均为i+1。如:如:a=2;b=a+;运行后:运行后:a=3;b=2;a=2;b=+a;运行后:运行后:a=3;b=3;i-与与-i的区别(与上面类似)的区别(与上面类似)算术运算符算术运算符“+”除字符串相加功能外,还能把非字符串转换除字符串相加功能外,还能把非字符串转换成字符串成字符串,如:,如:“x”+123;的结果是的结果是“x123”。x+123的结果是什么呢?的结果是什么呢?如果对负数取模,可以把模数负号忽略不记,如:如果对负数取模,可以把模数负号忽略不记,如:5%-2=1。但被模数是负数就另当别论了。但被模数是负数就另当别论了。对于除号对于除号“/”,它的整数除和
49、小数除是有区别的:,它的整数除和小数除是有区别的:整数之间做除法时,只保留整数部分而舍弃小数整数之间做除法时,只保留整数部分而舍弃小数部分。部分。int x=3510;x=x/1000*1000;实际运行结果实际运行结果是是3000,想想为什么?,想想为什么?算术运算符使用技巧算术运算符使用技巧 思考题思考题1:某个培训中心要为新到的学员安排房:某个培训中心要为新到的学员安排房间,假设共有间,假设共有x个学员,每个房间可以住个学员,每个房间可以住6人,让人,让你用一个公式来计算他们要住的房间数?你用一个公式来计算他们要住的房间数?答案答案:(x+5)/6。这种算法还可用在查看留言板的分页显示上
50、:。这种算法还可用在查看留言板的分页显示上:其中其中x是总共的留言数,是总共的留言数,6是每页显示的留言数,结果是每页显示的留言数,结果就是总共有多少页。就是总共有多少页。思考题思考题2:假设你要让:假设你要让x的值在的值在0至至9之间循环变化,之间循环变化,请写出相应的程序代码。请写出相应的程序代码。答案答案:int x=0;while(true)x=(x+1)%10;加运算符可以用来连接两个字符串加运算符可以用来连接两个字符串例如,例如,”abcabc”+123+123的运行结果是字符串的运行结果是字符串abc123abc123“abcabc”+(1+2)+(1+2)的运行结果是什么?的运