Java技术与应用 -Java基本语法 (第3章) 西安交大 卫颜俊 2008年11月 电子信箱:Mr.Java@163.com 西安交大 卫颜俊 2008年11月 电子信箱:Mr.Java@163.com QQ: 610568018 网站: 202.117.58.97/java
主要内容 数据类型(Data Types) 运算符与表达式(Operator & Expression) 控制流程(Control Flow) 异常(Exception)
1. 数据类型(Data Types)
文字量与缺省类型
转义符 字符的五种表示方法: 使用 ’c’ ’我’ '\t'、'\\'、'\''、'\"'、'\r'、'\n'、'\b' 使用 (char)字符的十进制编码 比如:25105=’我’ 使用三位八进制数值加“\”前缀来表示ASCII码字符,格式为‘\xxx’ 比如:‘\45’=’%’ 使用四位十六进制数值加“\u”前缀来表示Unicode码字符,格式为‘\uxxxx‘ 比如:’\u6211’=’我’
常量、变量 合法标识符(包括汉字) 作用域 { } 成员,局部 赋初值
变量的赋值与引用赋值 【例3-1】变量赋值演示
变量的值传递与引用传递 【例3-2】参数传递演示
变量与初始化 对于对象实例变量,可以在定义时赋给初始值,也可以在构造方法中赋给初始值; 对于类静态变量可以在定义时或使用静态初始化器进行赋初始值,但不能在构造方法中赋给初始值。 P.57~P.58例子
常量与初始化 常量只能初始化一次 。 对于简单常量,其值不可修改。 对于数组常量,始终保持引用同一个数组,但数组元素值可以改变。 对于其它复杂变量总是对同一个对象的引用,但其内部状态值可以更改。 【例3-3】常量使用演示
2 .运算符与表达式
运算符是进行操作数(文字量、常量和变量)运算的符号表示。 表达式是将标识符、 关键字、符号和运算符连接起来的有意义的组合体。 包括:赋值、算术、关系、条件、逻辑和位运算符和表达式。
赋值运算符与表达式 = 变量赋值:x=84; 运算符表达式:y=(x*5)/6; 方法调用:height=building.getHeight(); 对象分配:Point point=new Point();
算术运算符与表达式 双目运算符 :加(+)、减(-)、乘(*)、除(/)和取余(%) 单目运算符 :正(+)、负(-)、加加(++)和减减(--) 【例3-4】“++”和“--”的使用 java.lange.Math类的作用
关系运算符与表达式 int x=3; boolean a=x<5; a的结果为true ==(等于)、!=(不等于)、<(小于)、<=(小于等于)、>(大于)和>=(大于等于)以及一种类型比较运算符:instanceof 举例: int x=3; boolean a=x<5; a的结果为true boolean b=x==5; b的结果为false boolean c=x!=x; c的结果为false boolean d=a==c; d的结果为true String s1="Java"; String s2="Java"; boolean e=s1==s2; e的结果为false boolean f=s1.equals(s2); f的结果为true
条件运算符与表达式 &&(与)、||(或)、!(反)、~(异或)、&(非简洁与)、|(非简洁或)和?: 【例3-6】条件运算符的使用
逻辑运算符与表达式 &(位与)、|(位或)、^(位异或)和~(位取反) 【例3-7】逻辑运算符的使用
移位运算符与表达式 >>(带符号右移)、<<(带符号左移)和>>>(无符号右移) 正整数的原码=反码=补码 负整数的反码=原码各位求反 负整数的补码=反码加1 【例3-8】位运算符的使用
简洁赋值运算符
复合运算符
运算符的优先级 从左到右进行,并遵守:括号 > 算术运算符 > 关系运算符和大部分逻辑运算符(除了!号) > 赋值运算符。 在表达式进行运算之前,首先会将其它数据类型转换为最大数据类型,最终结果以等号左边的变量类型为准。
3. 控制结构
顺序语句有:输入、计算赋值和输出语句 分支语句有:单分支if-else和多分支switch-case语句 循环语句有:while、do和for语句
顺序语句 标准输入语句(java.lang包中的System类中的静态成员变量in的方法read ) int read() 读一个字节或字符,返回0到255范围内的 int 字节值,如果没有可读字节,则返回-1。 int read(byte[] b) 读一个字节数组,读取一定数量的字节并将其存储在缓冲区数组b中,并以整数形式返回实际读取的字节数。 int read(byte[] b,int off,int len) 读一个字节数组并截取一部分,读取len个数据字节存入字节数组b,以整数形式返回实际读取的字节数。 java.util包中的Scanner类的nextT()方法 t nextT() 读下一个数。其中,T:Boolean、Byte、Char、double、Float、Int、Short和Long等,t:boolean、byte、char、double、float、int、short和long等。 String nextLine() 读下一行字符串
Scanner输入语句举例 Scanner sc = new Scanner(System.in); int x=sc.nextInt(); 【例3-9】根据输入的半径和高度,分别计算圆面积、圆柱全面积和圆锥侧面积。
输出语句 标准输出语句(java.lang包中的System类的out成员变量的方法print、println和write ) void print(T t) 输出指定数值 void println(T t) 输出指定数值并带换行 void write(int b) 输出指定的字节值 void write(byte[] buf, int off, int len) 输出len个字节,起始位置从数组的第off个元素开始。 格式化输出语句(System.out.printf方法) (java.util包中提供了Formatter类的format方法 ) PrintStream printf (String 格式字符串, Object... 参数); 举例: System.out.printf ("%4$s %3$s %2$s %1$s %4$s %3$s %2$s %1$s","a", "b", "c", "d"); //输出结果:"d c b a d c b a" System.out.printf ("%3d %x",23,34); //输出结果:" 23 12" System.out.printf ("%8.2f",3.14159); //输出结果:" 3.14"
分支语句 if ( 关系或条件表达式 ) 语句; if (关系或条件表达式) 语句1 else语句2; 嵌套分支语句 【例3-12】将学生成绩转换为五分制。 switch(数值表达式){// boolean、byte、short、char和int case 值1: 语句1; break; …… defalut: 其它语句; }
循环语句 while (关系或条件表达式) 语句; do 语句 while (关系或条件表达式); for(循环变量赋初始值;关系或条件表达式; 循环变量值的修正) 语句; for(变量修饰 变量类型 变量名:表达式) 举例: int[] a = {1, 3, 5, 7, 9}; int sum = 0; for (int x : a) sum += x; 【例3-17】查找2~n之间的素数的第2种做法
其它语句 标签语句 标签名: break语句 break;或break 标签名; 标签语句 标签名: break语句 break;或break 标签名; continue语句 continue;或continue标签名; return语句 return;或return表达式; exit语句 System.exit(状态值); 【例3-18】break、continue和标签的联合使用。
综合举例 【例3-21】猜数游戏。
异常处理
问题的起因 分母=0 负数开方 数组下标超界 类型转换(String ->int,float) 空对象引用 其它:类找不到,方法找不到,文件不存在,I/O,数据库,网络,安全性,…… ◆
异常处理机制之1-throw 当Java程序在运行过程中出现异常时,就会生成一个异常对象,并提交给运行系统,这种异常的产生和提交过程称为异常抛出(throw)。 ◆
异常处理机制之2-catch 当运行系统获得这个异常对象时,它就会沿着方法的调用顺序逐层回溯,去寻找处理这一异常对象的代码或方法。如果找到,运行系统会把当前这个异常对象交给这个方法进行处理,这一过程称为异常捕获(catch);反之,如果找不到合适的方法,运行系统将终止,相应的Java程序也将结束运行。 ◆
异常处理机制之3-throws 如果一个方法无法应对所出现的这个异常对象,还可以在方法声明部分中进行异常抛出声明(throws),将异常交给上一层方法来处理。程序员自己也可以首先定制异常和自行抛出异常,然后交给运行系统来处理。 ◆
异常层次 java.lang.Object java.lang.Throwable java.lang.Error java.lang.Exception java.lang.RuntimeException ◆
异常类介绍 Throwable 类 一般更多地考虑可检查的异常和一部分运行异常◆ 不可检查类 可检查类 Error类及其子类和RuntimeException类及其子类都是不可检查类,Error类称为错误类,RuntimeException类称为运行异常类,它为Exception类的子类, 可检查类 而其它Exception子类都是可检查类。 一般更多地考虑可检查的异常和一部分运行异常◆
Error的子类
Exception的子类
RuntimeException的子类
常用的异常类
问题的答案 分母=0 ArithmeticException 负数开方 ArithmeticException 数组下标超界 ArrayIndexOutOfBoundsException 类型转换 NumberFormatException 空指针 NullPointerException ◆
异常处理的格式 捕获异常 声明抛出异常(由JVM或Java类库生成) try{ //正常执行语句 }catch(异常类1 异常参数1){ //异常处理语句1 }catch(异常类2异常参数2){ //异常处理语句2 …… }catch(异常类n异常参数n){ //异常处理语句n }finally{ //收尾语句 } 声明抛出异常(由JVM或Java类库生成) 方法修饰符 返回类型 方法名(参数说明列表) throws 异常类列表{ 方法体 } 其中异常类列表可以是多个异常类名。 在main方法中使用throws则抛弃异常。 抛出异常 异常类名 异常对象名=new异常类名(); throw 异常对象名; ◆
问题的解决 使用异常处理 进行捕获和抛出 try catch finally throw throws ◆
用户自定义异常格式 系统类库中已定义好若干标准Exception子类用来处理一些常见异常
异常举例 【例3-19】只接受命令行参数的非零整数值,而对其它情况作为异常来处理。 可能会出现以下异常: ArithmeticException ArrayIndexOutOfBoundsException NumberFormatException Exception ◆
异常举例 【例3-20】异常的嵌套处理 。 算法说明: 当参数值为“除法”和"空指针"时,由运行系统自动抛出异常,而当参数值为“测试"时,由程序自己抛出异常,其它值为正常。 ◆
异常举例 【例3-22】将百分制转换为五分制,超过0和100的作为异常 。 ◆
本讲结束! 谢谢!