1、学习导读学习导读 本节是学习本节是学习Java语言必须经过的基础阶段,语言必须经过的基础阶段,通过本章的学习,应该能够对通过本章的学习,应该能够对Java程序的构成有程序的构成有一个基本的理解,一个基本的理解,能够灵活运用能够灵活运用Java语言提供的语言提供的各种数据类型和运算符各种数据类型和运算符。面向对象的编程也是以。面向对象的编程也是以面向过程编程为基础而发展起来的,因为在对象面向过程编程为基础而发展起来的,因为在对象的方法等程序片内部,仍然需要严格遵守传统的的方法等程序片内部,仍然需要严格遵守传统的结构化程序设计原则,因此,结构化程序设计原则,因此,熟练掌握结构化程熟练掌握结构化程序
2、设计的三种基本流程是进一步学习序设计的三种基本流程是进一步学习Java面向对面向对象程序设计的基础象程序设计的基础。 基本数据类型和基本操作 .教学重点与难点教学重点与难点:vJava程序的构成程序的构成vJava的关键字、标识符、各种数据类型的关键字、标识符、各种数据类型vJava的常量与变量的常量与变量vJava的各种运算符的各种运算符v结构化程序设计的三种基本流程结构化程序设计的三种基本流程 .1 Java程序的构成程序的构成 JavaJava语言的源程序代码由一个或多个编译单元语言的源程序代码由一个或多个编译单元组成,每个编译单元可包含三个要素:组成,每个编译单元可包含三个要素: (1
3、 1)一个包声明()一个包声明(package statementpackage statement,可选);,可选); (2 2)任意数量引入语句()任意数量引入语句(import statementsimport statements);); (3 3)类的声明()类的声明(class declarationsclass declarations)和接口声)和接口声明(明(interface declarationsinterface declarations)。)。 该三要素必须以上述顺序出现。也就是说任何该三要素必须以上述顺序出现。也就是说任何引入语句出现在所有类定义之前;如果使用包声
4、明,引入语句出现在所有类定义之前;如果使用包声明,则包声明必须出现在类和引入语句之前。每个则包声明必须出现在类和引入语句之前。每个JavaJava的编译单元可包含多个类或接口,但是每个编译单的编译单元可包含多个类或接口,但是每个编译单元元最多只能有一个类或者接口是公共的。最多只能有一个类或者接口是公共的。 .Java的程序结构图注意注意:语句操作只能在语句操作只能在类方法中实现类方法中实现.判断下列程序的区别/程序1public class Test public Test() private int a=5; public static void main(String args) Syst
5、em.out.println(a); /程序2public class Test public Test() private int a; a=5; /表达式 public static void main(String args) System.out.println(a); .2 关键字、标识符、关键字、标识符、数据类型、常量与变量数据类型、常量与变量 关键字关键字 关键字对Java编译器有特殊的含义,它们可标识数据类型名或程序构造名。 表3-1列出了在Java编程语言中使用的关键字。 . .有关关键字值得我们注意的地方: (1)true、false和null为小写,而不是象在C+语言中那
6、样为大写。严格地讲,它们不是关键字,而是文字。然而,这种区别是理论上的。 (2)无sizeof运算符,因为所有数据类型的长度和表示是固定的,与平台无关,不是象在C语言中那样数据类型的长度根据不同的平台而变化。这正是Java语言的一大特点。 (3)goto和const是Java编程语言中使用的关键字,被保留。 .标识符标识符 在在JavaJava编程语言中,标识符是赋予变量、类或编程语言中,标识符是赋予变量、类或方法的名称。变量、函数、类和对象的名称都是方法的名称。变量、函数、类和对象的名称都是标识符,程序员需要标识和使用的东西都需要标标识符,程序员需要标识和使用的东西都需要标识符。识符。 变量
7、标志符的命名规则:变量标志符的命名规则: 1. 1. 第一个字符是字母、下划线或第一个字符是字母、下划线或$ $ 2. 2. 其余字符是字母、下划线和数字其余字符是字母、下划线和数字 3. 3. 区分大小写区分大小写 4. 4. 不能使用不能使用JavaJava等关键字等关键字. . 下面是几个有效的标识符:下面是几个有效的标识符: identifier thisone UserName User_name _system_varl $max .下面是几个非法的变量名: 3max (变量名不能以数字开头) room# (包含非法字符“#”) class (“class”为保留字) 标识符不能是
8、关键字,但是它可以包含关键字作为它的名字的一部分。例如,thisone是一个有效标识符,但this却不是,因为this是一个Java关键字。 .数据类型(第数据类型(第37页)页) Java编程语言有八个基本数据类型,可分为以下编程语言有八个基本数据类型,可分为以下四种:四种:1逻辑类逻辑类 boolean(占用(占用8位)位) boolean 数据类型有两种文字值:数据类型有两种文字值:true和和false。 注意在注意在Java编程语言中编程语言中boolean类型只允许使用类型只允许使用boolean值,在整数类型和值,在整数类型和boolean类型之间无转换类型之间无转换计算。计算。
9、 在在C语言中允许将数字值转换成逻辑值,这在语言中允许将数字值转换成逻辑值,这在Java编程语言中是不允许的。编程语言中是不允许的。. 2字符类字符类 char (16位位 ) 从从065535 或者或者u0000uFFFF 使用使用char类型可表示单个字符,字符是用类型可表示单个字符,字符是用单引号单引号括起来的一个字符,如括起来的一个字符,如a,B等。等。 Java中的字符型数据是中的字符型数据是16位无符号型数据,它表位无符号型数据,它表示示Unicode集,而不仅仅是集,而不仅仅是ASCII集。集。 与与C语言类似,语言类似,Java也提供转义字符,以反斜杠也提供转义字符,以反斜杠(
10、)开头,将其后的字符转变为另外的含义。)开头,将其后的字符转变为另外的含义。 表表3-2列出了列出了Java中的转义字符。中的转义字符。.问题: 如何在屏幕上打印”你好” 2个引号和2个字?. 注意:字符串类(不是基本数据类型)注意:字符串类(不是基本数据类型) 值得注意的一点是,用双引号引用的文字,就是我们平值得注意的一点是,用双引号引用的文字,就是我们平时所说的字符串类型时所说的字符串类型不是不是基本类型,而是一个类(基本类型,而是一个类(class)String,它被用来表示字符序列。,它被用来表示字符序列。字符本身符合字符本身符合Unicode标准,标准,且上述且上述char类型的转义
11、字符适用于类型的转义字符适用于String。 两个字符串用两个字符串用“”连接,如连接,如 String str=“This is a string”+”This is another string”; 3整数类整数类 byte,short,int,long 在在Java编程语言中有四种整数类型,每种类型可使用关键编程语言中有四种整数类型,每种类型可使用关键字字byte, short, int和和long中的任意一个进行声明。所有中的任意一个进行声明。所有Java编编程语言中的整数类型都是带符号的数字,程语言中的整数类型都是带符号的数字,不存在无符号整数。不存在无符号整数。. 整数类型的文字可
12、使用十进制、八进制和十六整数类型的文字可使用十进制、八进制和十六进制表示。首位为进制表示。首位为“0”0”表示八进制的数值;首位表示八进制的数值;首位为为“0 x”表示表示16进制的数值。进制的数值。请看下面的例子:请看下面的例子: 5 表示十进制值表示十进制值5 075 表示八进制数值表示八进制数值75 (也就是十进制数(也就是十进制数61) 0 x9ABC 表示十六进制的数值表示十六进制的数值9ABC (也就是十进制数(也就是十进制数39612) 整数类缺省为整数类缺省为intint类型,如在其后有一个字母类型,如在其后有一个字母“L”L”表示一个表示一个longlong值(也可以用小写值
13、(也可以用小写“l”l”)。由)。由于小写于小写“l”l”与数字与数字“1”1”容易混淆,因而,建议大容易混淆,因而,建议大家采用大写家采用大写“L”L”。 .上面所说的整数上面所说的整数long的形式如下:的形式如下: 5L 表示十进制值表示十进制值5,是一个,是一个long值值 075L 表示八进制数值表示八进制数值75,是一个,是一个long值值 0 x9ABCL 表示十六进制的数值表示十六进制的数值9ABC,是一个,是一个long值值 四种整数类型的存储空间长度、能表示的范四种整数类型的存储空间长度、能表示的范围是不一样的,如表围是不一样的,如表3-3所示。所示。 . 4浮点类浮点类
14、double,float 在Java编程语言中有两种浮点类型:float和double。如果一个数包括小数点或指数部分,或者在数字后带有字母F或f(float)、D或d(double),则该数为浮点数。如果不明确指明浮点数的类型,浮点数缺省为double。下面是几个浮点数: 3.14159 (double型浮点数) 2.1234E+2或或1.1234E2(double型浮点数) 6.56f (float型浮点数) 在两种类型的浮点数中,float为32位(单精度),double为64位(双精度)。也就是说double类型的浮点数具有更高的精度。 . 1.2.4 常量与变量常量与变量 在在Jav
15、aJava中,不同类型的数据既可以以常量的形中,不同类型的数据既可以以常量的形式出现,也可以以变量的形式出现。式出现,也可以以变量的形式出现。 常量常量就是指在程序执行期间其值不能发生变化就是指在程序执行期间其值不能发生变化的数据,常量是固定的。如整型常量的数据,常量是固定的。如整型常量123123,实型常,实型常量量1.231.23,字符常量,字符常量AA,布尔常量,布尔常量truetrue等。等。 区别于区别于 C C中的中的#define #define 定义定义 在在JavaJava中用中用finalfinal定义,格式如下定义,格式如下: : final final 数据类型数据类型
16、 常量名常量名=value;=value; 如:如:final float PAI=3.14f;final float PAI=3.14f; 这里这里 常量的名称定义通常量的名称定义通常用大写,单词间用常用大写,单词间用”_”_” . 变量的值则是可以变化的,它的定义包括变量名、变变量的值则是可以变化的,它的定义包括变量名、变量类型和作用域几个部分。注意以下几点:量类型和作用域几个部分。注意以下几点: (1 1)变量名必须是一个合法的标识符。变量名应具有变量名必须是一个合法的标识符。变量名应具有一定的含义,以增加程序的可读性。一定的含义,以增加程序的可读性。 比如比如 booleanboole
17、an型的用型的用isXXXisXXX等等 (2 2)变量类型可以为前面所说的任意一种数据类型。)变量类型可以为前面所说的任意一种数据类型。(3)在一个确定的域(比如在一个方法内部)中,变量名应)在一个确定的域(比如在一个方法内部)中,变量名应该是唯一的。通常,一个域用大括号该是唯一的。通常,一个域用大括号“”和和“”来划定。来划定。(4 4)变量的定义)变量的定义 数据类型数据类型 变量名变量名=初始值初始值; 或者或者 数据类型数据类型 变量名变量名; 变量名初始值;变量名初始值;/这句不是变量定义这句不是变量定义.下面是几个变量的声明:下面是几个变量的声明: int a,b,c; /定义定
18、义a,b,c为为int型变量型变量 double d,e; /定义定义d,e为为double型变量型变量 float f=2.5f,g=5.8f; /定义定义f,g为为float型变量,型变量,并赋初值并赋初值 其中,多个变量间用逗号隔开。其中,多个变量间用逗号隔开。 (5 5)在)在JavaJava程序中声明变量后,需给该变量程序中声明变量后,需给该变量赋值。可用赋值语句来初始化变量赋值。可用赋值语句来初始化变量否则,变否则,变量(属性)将使用默认值。量(属性)将使用默认值。. 赋值方式如下:将已声明的变量名放在左边,赋值方式如下:将已声明的变量名放在左边,然后是等号(),右边是有适当值的然
19、后是等号(),右边是有适当值的JavaJava表达表达式。式。 它的意思是它的意思是“取得右边的值,把它复制到左取得右边的值,把它复制到左边边”。右边的值可以是任何常数、变量或者表达。右边的值可以是任何常数、变量或者表达式,只要能产生一个值就行。但左边的值必须是式,只要能产生一个值就行。但左边的值必须是一个明确的、已命名的变量。如:一个明确的、已命名的变量。如: int a; /这是声明这是声明 a=45; /这是赋值这是赋值 char c; /这是声明这是声明 c=y; /这是赋值这是赋值 . 当一个对象被创建时,实例变量在分当一个对象被创建时,实例变量在分配存储器的同时被值初始化配存储器的
20、同时被值初始化。初始化值如。初始化值如下表所示。下表所示。 数据类型默认初始化值数据类型默认初始化值int0booleanfalselong0Lcharu0000 或 nullfloat0.0fbyte0double0.0short0复合数据类型如 Stringnull.赋值操作练习:判断正误public class Main int a; int b; public static void main(String args) / TODO code application logic here int i=1; int t ; System.out.println(t); public cl
21、ass Main int a; int b; public static void main(String args) int i=1; int t=1 ; System.out.println(a); .import java.applet.Applet;import java.awt.Graphics;public class NewApplet extends Applet public void init() / TODO start asynchronous download of heavy resources int a; int b; public void paint(Gra
22、phics g) int t=1; g.drawString(String.valueOf(a),100,100); .Java赋值的练习v编写程序,用来计算圆的面积,并输出在屏幕上。.【例【例1 1】 计算圆的面积计算圆的面积( (认识程序的基本结构认识程序的基本结构) ) package test; package test; import java.lang. import java.lang.* *; ; / /* *计算园面积计算园面积 CountCircleArea.javaCountCircleArea.java* */ / public class CountCircleAre
23、a public class CountCircleArea public static void main(String args) public static void main(String args) final float PAI=3.14f; final float PAI=3.14f; int r=10; int r=10; float result=PAI float result=PAI* *r r* *r;r; System.out.println(“ System.out.println(“半径为半径为1010的园的面积的园的面积是是”+result);+result);
24、 .1.3 运算符运算符 按照运算符功能来分,基本的运算符分包括算术按照运算符功能来分,基本的运算符分包括算术运算符、关系运算符、逻辑运算符、位运算符、赋运算符、关系运算符、逻辑运算符、位运算符、赋值运算符、条件运算符等。值运算符、条件运算符等。 1.3.1 算术运算算术运算 算术运算符包括加号(算术运算符包括加号(+ +)、减号()、减号(- -)、乘号)、乘号(* *)、除号()、除号(/ /)、取模()、取模(% %)、自增运算符)、自增运算符(+)、自减运算符()、自减运算符(-)等。)等。 在算术运算中,有以下值得注意的地方:在算术运算中,有以下值得注意的地方: (1 1)算术运算符
25、的总体原则是先乘除、再加减,)算术运算符的总体原则是先乘除、再加减,括号优先。括号优先。 (2 2)整数除法会直接砍掉小数,而不是进位。)整数除法会直接砍掉小数,而不是进位。比如比如: 36/10=3(直接用数字直接用数字,还不是用变量还不是用变量). (3 3)与)与C C语言不同,对取模运算符语言不同,对取模运算符% %来说,其操作数可来说,其操作数可以为浮点数。如:以为浮点数。如:37.2%10=7.237.2%10=7.2。 (4 4)JavaJava也用一种简写形式进行运算,并同时进行赋也用一种简写形式进行运算,并同时进行赋值操作。例如,为了将值操作。例如,为了将1010加到变量加到
26、变量x x,并将结果赋给,并将结果赋给x x,可用:可用:x+=10 x+=10。 (5 5)JavaJava对加运算符进行了扩展,使它能够进行字符对加运算符进行了扩展,使它能够进行字符串的连接,如串的连接,如abc+defabc+def,得到串,得到串abcdefabcdef。 (6 6)前缀前缀+、-与后缀与后缀+、-的区别的区别: +i+i(前缀(前缀+)在使用)在使用i i之前,使之前,使i i的值加的值加1 1,因此执行,因此执行完完+i+i后,整个表达式和后,整个表达式和i i的值均为的值均为i+1i+1; i+i+(后缀(后缀+)在使用在使用i i之后,使之后,使i i的值加的值
27、加1 1,因此执行完,因此执行完i+i+后,整个表后,整个表达式的值为达式的值为i i,而,而i i的值变为的值变为i+1i+1。. -i在使用i之前,使i的减1,因此执行完-i后,整个表达式和i的值均为i-1;i-在使用i之后,使i的减1,因此执行完i-后,整个表达式的值为i,而i的值变为i-1。 .3.3.2 关系运算关系运算 关系运算符用来比较两个值,返回布尔类型的值true或false。关系运算符都是二元运算符,如表3-5所示。 . 对“或运算”如果运算符左边的表达式的值为true,则整个表达式的结果为true,不必对运算符右边的表达式再进行运算;同样,对“与运算”,如果左边表达式的值
28、为false,则不必对右边的表达式求值,整个表达式的结果为false。 .2.3.4 位运算位运算 在Java语言中,位运算符有按位与运算符(&)、按位或运算符(|)、按位异或运算符()、按位取反运算符()、左移位运算符()。1 1按位与运算(按位与运算(& &) 参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0。 即:0&0=0,0&1=0,1&0=0,1&1=12 2按位或运算(按位或运算(| |) 参与运算的两个值,如果两个相应位都是0,则该位结果为0,否则为1。 即:0|0=0,0|1=1,1|0=1,1|1=1.3按位异或运算(按位异或运算() 参与运算的两个值,如
29、果两个相应位的某一个是1,另一个是0,那么按位异或()在该位的结果为1。也就是说如果两个相应位相同,输出位为0,否则为1。 即:00=0,01=1,10=1,11=0 注意:注意:abb=? 4按位取反运算(按位取反运算() 按位取反运算()属于一元运算符,它只对一个自变量进行操作(其他所有运算符都是二元运算符)。按位取反生成与输入位的相反的值若输入0,则输出1;输入1,则输出0。 即:0=1,1=0.5左移位运算符(左移位运算符() 运算符执行一个左移位。作左移位运算时,右边的空位补0。在不产生溢出的情况下,数据左在不产生溢出的情况下,数据左移移1位相当于乘以位相当于乘以2。例如: int
30、a=64,b; b=a与与) 运算符执行一个右移位(带符号),左边按符号位补0或1例如: int a=16,b; b=a2;/b=4 注意:注意:11=? -11=?. 运算符同样是执行一个右移位,只是它执行的是不带符号的移位。也就是说对以补码表示的二进制数操作时,在带符号的右移中,右移后左边留下的空位中添入的是原数的符号位(正数为0,负数为1);在不带符号的右移中,右移后左边留下的空位中添入的一律是0。 问问: 11=? -11=?. 1.3.5 1.3.5 其他运算符其他运算符1 1三目条件运算符(?:)三目条件运算符(?:) 在Java语言中,三目条件运算符(?:)与C语言中的使用规则是
31、完全一致的,使用的形式是: x ? y:z; 上面的三目条件运算的规则是:先计算表达式x的值,若x为真,则整个三目运算的结果是表达式y的值;若x为假,则整个三目运算的结果是表达式z的值。 下面的例子实现了从两个数中找出较大的数的功能。 int a=3,b=4; int max=ab?a:b; max的值为4。. 三目条件运算是可以嵌套的,如有以下的语句,则max表示的是a、b、c三个数中的最大值,其值为5。 int a=3,b=4,c=5; int max=(ab ? a:b)c ? (ab?a:b):c;2 2复合赋值运算符复合赋值运算符 赋值运算符“=”的作用是将运算符右边表达式的值赋给左
32、边的变量。复合赋值运算符的作用是先进行某种运算后,再对运算的结果进行赋值操作。 Java可以用一种简写形式进行运算,并同时进行赋值操作。例如,为了将10加到变量x,并将结果赋给x,可用:x+=10(等价与x=x+10)。 实际上不只是“+”可以这么做,表3-7列出了Java中的所有复合赋值运算符。 . 3对象运算符(对象运算符(instanceof) 对象运算符对象运算符instanceofinstanceof用来判断一个对象是否是某一个类或者其子类的实用来判断一个对象是否是某一个类或者其子类的实例。如果对象是该类或者其子类的实例,返回例。如果对象是该类或者其子类的实例,返回tureture;
33、否则返回;否则返回flaseflase。 比如:比如:String s=“sdfsf”;String s=“sdfsf”; boolean isString=s instanceof Object; boolean isString=s instanceof Object; 则返回则返回 isString=trueisString=true 注意:基本数据类型不能用注意:基本数据类型不能用instanceof instanceof 如:如: int a=5;int a=5; boolean isInteger=a instanceof Object;/ boolean isInteger=a
34、instanceof Object;/出错出错 改正方法:改正方法:Integer a=new Integer(5);/Integer a=new Integer(5);/这个时候这个时候a a为为IntegerInteger类对象类对象4 4()和()和 括号运算符()的优先级是所有运算符中最高的,所以它可以改变表达式括号运算符()的优先级是所有运算符中最高的,所以它可以改变表达式运算的先后顺序。在有些情况下,它可以表示方法或函数的调用。运算的先后顺序。在有些情况下,它可以表示方法或函数的调用。 方括号运算符方括号运算符 是数组运算符。是数组运算符。5 5 运算符运算符 运算符用于访问对象实
35、例或者类的类成员函数。运算符用于访问对象实例或者类的类成员函数。6 6newnew运算符运算符 newnew运算符用于创建一个新的对象或者新的数组。运算符用于创建一个新的对象或者新的数组。.1.3.6 运算符的优先级与结合性运算符的优先级与结合性 优先级决定了同一表达式中多个运算符被执行的先后次序,如乘除运算优先于加减运算,同一级里的运算符具有相同的优先级。运算符的结合性则决定了相同优先级的运算符的执行顺序。 表3-8列出了Java中运算符的优先级与结合性。 因为括号优先级最高,所以不论任何时候,当我们一时无法确定某种计算的执行次序时,可以使用加括号的方法来明确指定运算的顺序,这样不容易出错,
36、同时也是提高程序可读性的一个重要方法。 .1.3.7 1.3.7 类型转换类型转换 Java程序里,将一种数据类型的常数或变量转换到另外程序里,将一种数据类型的常数或变量转换到另外的一种数据类型,称为类型转换。类型转换有两种:自动的一种数据类型,称为类型转换。类型转换有两种:自动类型转换(或称隐含类型转换)和强制类型转换。类型转换(或称隐含类型转换)和强制类型转换。 在实际中常会将一种类型的值赋给另外一种变量类型。在实际中常会将一种类型的值赋给另外一种变量类型。如果这两种类型是兼容的,如果这两种类型是兼容的,Java将执行自动类型转换。将执行自动类型转换。 简单的说,简单的说,当把占用位数较短
37、的数据转化成占用位数较当把占用位数较短的数据转化成占用位数较长的数据时,长的数据时,Java执行自动类型转换执行自动类型转换,不需要在程序中作,不需要在程序中作特别的说明。例如,下面的语句把特别的说明。例如,下面的语句把int型数据赋值给型数据赋值给long型型数据,在编译时不会发生任何错误:数据,在编译时不会发生任何错误: int i=10; long j=i; . 假若对主数据类型执行任何算术运算或按位运假若对主数据类型执行任何算术运算或按位运算,算,“比比int小小”的数据(的数据(char、byte、short)在)在正式执行运算之前,那些值会自动转换成正式执行运算之前,那些值会自动转
38、换成int,这,这样一来,最终生成的值就是样一来,最终生成的值就是int类型。类型。 整型、实型、字符型数据可以混合运算。整型、实型、字符型数据可以混合运算。运算运算中,不同类型的数据先转化为同一类型,然后进中,不同类型的数据先转化为同一类型,然后进行运算,转换从低级到高级。行运算,转换从低级到高级。通常,表达式中最通常,表达式中最大的数据类型是决定了表达式最终结果大小的那大的数据类型是决定了表达式最终结果大小的那个类型。例如:若将一个个类型。例如:若将一个float值与一个值与一个double值值相乘,结果就是相乘,结果就是double;如将一个;如将一个int值和一个值和一个long值相加
39、,则结果为值相加,则结果为long。 比如比如 36/10.0=3.6 36/10=3 36%10=6. 不是所有的数据类型都允许隐含自动转换。例如,下面的语句把long型数据赋值给int型数据,在编译时就会发生错误: long i=10; int j=i; 这是因为当把占用位数较长的数据转化成占用位数较短的数据时,会出现信息丢失的情况,因而不能够自动转换。这时就需要利用强制类型转换,执行非兼容类型之间的类型转换。上面的语句写成下面的形式就不会发生错误: long i=10; int j=(int)i; . 强制类型转换的格式是: (数据类型)变量名(数据类型)变量名 经过强制类型转换,将得到
40、一个在“()”中声明的数据类型的数据,该数据是从指定变量所包含的数据转换而来的。值得注意的是,指定变量本身不会发生任何变化。 将占用位数较长的数据转化成占用位数较短的数据时,可能会造成数据超出较短数据类型的取值范围,造成“溢出”。如: long i=10000000000; int j=(int)i; 因为转换的结果已经超出了int型数据所能表示的最大整数(4294967295),造成溢出,产生了错误。.short a,b,c;a=2;b=3;c=(short)(a+b); short a,b,c;a=2;b=3;c=a+b; intcharbyteshortlongfloatdouble黑色
41、粗箭头表示无精度损失的转换,红色细箭头表示有可能会出现精度损失的转换。.v例:说出下列程序输出结果public class Convertion public static void main(String args) int a=5; int b=3; float g,h; g=a/b; System.out.println(g); h=(float)a/b; System.out.println(h); .v几种常用的基本数据类型和String的相互转化(p45) String其他基本数据类型 见书本,格式如 XX类.parseXX(String); 其他基本数据类型String int
42、a=5; String s=String.valueOf(a);.2.4 流程控制语句流程控制语句 2.4.1 2.4.1 结构化程序设计的三种基本流程结构化程序设计的三种基本流程 1自顶向下自顶向下 2逐步求精逐步求精 3模块化模块化 除了以上的原则,结构化程序设计还有一个重要的规定,那就是只能使用“顺序结构”、“选择结构”、“循环结构”这三种基本结构(或由它们派生出来的结构)来定义程序的流程。 三种基本流程控制结构示意图分别如图3-1所示。 .2.4.2 2.4.2 选择结构选择结构 如图3-1(b)所示,选择结构又称为分支结构,是在两种或两种以上的多条执行路径中选择一条执行的控制结构。1
43、 1ififelseelse语句语句 if(条件表达式)(条件表达式) 语句组语句组1; else 语句组语句组2; . 在ifelse语句中,else部分是选择性的。经常可以看到只有if语句,而没有else语句的情况。在这种情况下,当测试条件为假时如不需做任何事,else部分可被省略。这时,其语法形式如下: if(条件表达式)(条件表达式) 语句组;语句组; 其流程如图3-3所示。 . 2switch语句语句 switch语句(又称开关语句)是和case语句一起使用的,其功能是根据某个表达式的值在多个case引导的多个分支语句中选择一个来执行。它的一般格式如下: switch(表达式)(表达
44、式) case 判断值判断值1:语句块:语句块1 case 判断值判断值2:语句块:语句块2 case 判断值判断值3:语句块:语句块3 case 判断值判断值n:语句块:语句块n default:语句块:语句块n+1 . switch后面括号中表达式的值必须是符合byte,char,short,int类型的常量表达式,而不能用浮点类型或long类型,也不能为一个字符串。 一个switch语句可以代替多个ifelse语句组成的分支结构,而switch语句从思路上显得更清晰。 . 注意注意 :如果不写:如果不写break 会会输出什么结果?输出什么结果?.3.4.3 循环结构循环结构 循环结构是
45、程序中一种重要的基本结构,是指在一定的条件下反复执行某段程序,被反复执行的这段程序称为“循环体”。 Java中有三种语句来实现循环结构,分别是while,do-while和for语句。 它们的结构分别如图3-4所示。 .1while语句语句while语句的格式如下: while(条件表达式条件表达式) 循环体语句;循环体语句; 在循环刚开始时,会计算一次“条件表达式”的值。当条件为假时,将不执行循环体,直接跳转到循环体外,执行循环体外的后续语句;当条件为真时,便执行循环体。每执行完一次循环体,都会重新计算一次条件表达式,当条件为真时,便继续执行循环体,直到条件为假才结束循环。while语句的结
46、构如图3-4(a)所示。 .2do-while语句语句 do-while语句的格式如下: do 循环体语句;循环体语句; while(条件表达式条件表达式) do-while循环与while循环的不同在于:它先执行循环中的语句,然后再判断条件是否为真,如果为真则继续循环;如果为假,则终止循环。因此,do-while循环至少要执行一次循环语句。 do-while语句的结构如图3-4(b)所示。 .3for语句语句 for语句是三个循环语句中功能最强,使用最广泛的一个。for语句的格式如下: for(表达式表达式1;表达式;表达式2;表达式;表达式3) 循环体语句;循环体语句; 表达式1一般是一个
47、赋值语句,它用来给循环控制变量赋初值;表达式2是一个布尔类型的表达式,它决定什么时候退出循环;表达式3一般用来修改循环变量,控制变量每循环一次后按什么方式变化。这三个部分之间用“;”分开。 for语句的结构如图3-4(c)所示。.forfor语句的执行过程:语句的执行过程: (1 1)在循环刚开始时,先计算表达式在循环刚开始时,先计算表达式1 1,在这,在这个过程中,一般完成的是初始化循环变量或其它个过程中,一般完成的是初始化循环变量或其它变量。变量。 (2 2)根据表达式)根据表达式2 2的值来决定是否执行循环体。的值来决定是否执行循环体。表达式表达式2 2是一个返回布尔值的表达式,若该值为
48、假,是一个返回布尔值的表达式,若该值为假,将不执行循环体,并退出循环;若该值为真,将将不执行循环体,并退出循环;若该值为真,将执行循环体。执行循环体。 (3 3)执行完一次循环体后,计算表达式)执行完一次循环体后,计算表达式3 3。在。在这个过程中一般会修改循环变量。这个过程中一般会修改循环变量。 (4 4)转入第)转入第(2 2)步继续执行。)步继续执行。 . 3.4.4 跳转语句跳转语句 跳转语句用来实现循环执行过程中的流程转移。跳转语句用来实现循环执行过程中的流程转移。在在switchswitch语句中使用过的语句中使用过的breakbreak语句就是一种跳转语句就是一种跳转语句。在语句
49、。在JavaJava语言中,有两种跳转语句:语言中,有两种跳转语句:breakbreak语语句和句和continuecontinue语句。语句。 在在JavaJava语言中,可用语言中,可用breakbreak和和continuecontinue控制循环控制循环的流程。的流程。其中,其中,breakbreak用于强行退出循环,不执行用于强行退出循环,不执行循环中剩余的语句。而循环中剩余的语句。而continuecontinue则停止执行当前则停止执行当前的循环,开始新的循环的循环,开始新的循环。 breakbreak语句和语句和continuecontinue语句都有两种使用的形语句都有两种使
50、用的形式:一种是不带标号的式:一种是不带标号的breakbreak语句和语句和continuecontinue语句;语句;一种是带标号的一种是带标号的breakbreak语句和语句和continuecontinue语句。语句。 . 2.带标号和不带标号的continue语句 标号应该定义在某一个循环语句之前,紧靠在循环语句的前方,用来标志这个循环结构,在标号和循环之间置入任何语句都是不明智的行为。 而在循环之前设置标号的唯一理由是:我们希望在其中嵌套另一个循环或者一个开关,break和continue关键字若随同标号使用,它们就会中断到存在标号的地方。 . .作业v1.编写一个JAVA程序,