第3章表达式和流程控制语句
第3章 表达式和流程控制语句
表达式 定义:由运算符和操作数组成,对操作数进行运 算符指定的操作,并得出一个结果 Java运算符按功能可分为:算术运算符、关系运算符 逻辑运算符、位运算符、赋值运算符、条件运算符 数组下标运算符等。操作数可以是变量、常量或具有 返回值的方法调用等 如果表达式中仅含有算术运算符,如“*”,则为算术 表达式,计算结果是算术量(“+”用于字符串连接除 外) 如果表达式中含有关系运算符,如“>”,则为关系表 达式,计算结果是逻辑值,即true或 false 如果表达式中含有逻辑运算符,则为逻辑表达式,相 应的计算结果为逻辑值
表达式 ▪ 定义:由运算符和操作数组成,对操作数进行运 算符指定的操作,并得出一个结果 ▪ Java运算符按功能可分为:算术运算符、关系运算符、 逻辑运算符、位运算符、赋值运算符、条件运算符、 数组下标运算符等。操作数可以是变量、常量或具有 返回值的方法调用等 ▪ 如果表达式中仅含有算术运算符,如“*”,则为算术 表达式,计算结果是算术量(“+”用于字符串连接除 外) ▪ 如果表达式中含有关系运算符,如“>”,则为关系表 达式,计算结果是逻辑值,即true或false ▪ 如果表达式中含有逻辑运算符,则为逻辑表达式,相 应的计算结果为逻辑值
操作数 常量 只有简单数据类型和 String类型才有相应的 常量形式 常量 含义 23.59 double型常量 1247.1f float型常量 true boolean型常量 This is a String String 型常量
操作数 ▪ 常量 ▪ 只有简单数据类型和String类型才有相应的 常量形式 常量 含义 23.59 double型常量 -1247.1f float型常量 true boolean型常量 "This is a String" String型常量
操作数 变量 存储数据的基本单元,它可以用作表达式中的操作数,在 使用之前要先说明 变量说明的基本格式为: 类型变量名1=初值1[变量名2[=初值2]-… 类型既可以是简单类型,也可以是类类型。有时也把类类 型的变量称为引用。 变量说明的地方有两处,一处是在方法内,另一处是在类 定义内。方法内定义的变量称作自动变量,局部变量、临 时变量或栈变量。类中定义的变量就是它的成员变量。 简单类型的变量在说明之后,系统自动在内存分配相应的 存储空间。说明引用后,系统只分配引用空间,程序员要 调用new来创建对象实例,然后才分配相应的存储空间
操作数 ▪ 变量 ▪ 存储数据的基本单元,它可以用作表达式中的操作数,在 使用之前要先说明 ▪ 变量说明的基本格式为: 类型 变量名1[ = 初值1][,变量名2 [= 初值2]]…; ▪ 类型既可以是简单类型,也可以是类类型。有时也把类类 型的变量称为引用。 ▪ 变量说明的地方有两处,一处是在方法内,另一处是在类 定义内。方法内定义的变量称作自动变量,局部变量、临 时变量或栈变量。类中定义的变量就是它的成员变量。 ▪ 简单类型的变量在说明之后,系统自动在内存分配相应的 存储空间。说明引用后,系统只分配引用空间,程序员要 调用new来创建对象实例,然后才分配相应的存储空间
操作数 变量初始化 Java不允许将未经初始化的变量用做操作数 对简单变量在说明的同时可以进行初始化 如intx=3y=4 创建 类型 初始值 配存储空 byte (byte)0 间时 short (short)0 员变量 nt 0 long float 0.0f double 0 char u0000(nu11) boolean FALSE 所有引用类型 null
操作数 ▪ 变量初始化 ▪ Java不允许将未经初始化的变量用做操作数。 对简单变量在说明的同时可以进行初始化 如 int x=3,y=4; ▪ 创建一个对象后,使用new运算符分配存储空 间时,系统按表中的值自动初始化成员变量 类 型 初始值 byte (byte)0 short (short)0 int 0 long 0 L float 0.0f double 0 char \u0000'(null) boolean FALSE 所有引用类型 null
操作数 自动变量在使用之前必须初始化 编译器扫描代码,判定每个变量在首次使用前是否已被显 式初始化。如果某个变量没有初始化,会发生编译时错误 例32 int x=(int)( Math. random0*100); int int z if(x>50){ y+x;∥可能在初始化之前使用,导致编译错误
操作数 ▪ 自动变量在使用之前必须初始化 ▪ 编译器扫描代码,判定每个变量在首次使用前是否已被显 式初始化。如果某个变量没有初始化,会发生编译时错误 ▪ 例3-2 int x = (int)( Math.random() * 100 ); int y; int z; if (x > 50) { y = 9; } z = y + x; // 可能在初始化之前使用,导致编译错误
操作数 变量作用域 变量的作用域是指可访问该变量的代码范围 类中定义的成员变量的作用域是整个类 方法中定义的局部变量的作用域是从该变量的说明 处开始到包含该说明的语句块结束处 块内说明的变量将屏蔽其所在类定义的同名变
操作数 ▪ 变量作用域 ▪ 变量的作用域是指可访问该变量的代码范围 • 类中定义的成员变量的作用域是整个类 • 方法中定义的局部变量的作用域是从该变量的说明 处开始到包含该说明的语句块结束处 ▪ 块内说明的变量将屏蔽其所在类定义的同名变 量
操作数 程序3-1冲突引起编译错误例子 选定命令提示符 D: \ava\program \c hapter3> D:\java\program\chapter3>javac Customer.java Customer.java:10: name is already def ined in main(java. langString[1> String nane ="Tom David"; error D: \java\progran\chapter3>
操作数 ▪ 程序3-1 冲突引起编译错误例子
操作数 程序3-2修改程序3-1,把第二个局部变量说 明改为赋值语句 国命令提示符 回 D: \java\program\chapter3\prog3-2>javac Customer.java D:\java\program\chapter3\prog3-2>java Customer The customer's name: Tom David D: Java\program\chapter3\prog3-2>
操作数 ▪ 程序3-2 修改程序3-1,把第二个局部变量说 明改为赋值语句
操作数 程序3-3 main(方法中两次说明了同名局部变量name 但第6行说明的变量只在第6至第9行的块内有 效,在块外该变量消失,第11行不在其作用域 大 命令提示符 回x D: \java \program\chapter3\prog 3-3>javac Customer. java D: \java\program\chapter3\prog3-3)java Customer The customer's name: Tom David The customer's name: John Smith D: java \program\chapter3\prog3-3>
操作数 ▪ 程序3-3 ▪ main()方法中两次说明了同名局部变量name, 但第6行说明的变量只在第6至第9行的块内有 效,在块外该变量消失,第11行不在其作用域 内