第五章 流程控制、异常与断言

1.使用ifswitch语句编写代码

(1)       If语句的唯一合法表达式是布尔表达式。即:只能是可以被解析为布尔值或布尔变量的表达式

(2)       一定要注意布尔赋值(=),它可能被错认为布尔相等性(==)测试:boolean  x = false;if(x = true){}//an assignment, so x will always be true!

(3)       对于只有一个条件语句的if块来说,波形括号是可选的。但要注意缩进

(4)       Switch语句只能计算枚举或byteshortintchar数据类型.Notice:long类型,编译通不过

(5)       Case常量必须是字面值或final变量,或者是常量表达式,包括枚举。不能在case中包含非final变量或一个取值范围

(6)       如果switch语句中的条件与一个case常量相匹配,则将运行switch内在这一匹配的case语句后的所有代码,直至遇到break语句,或者到达switch语句的末尾为止。即:相匹配的case只是这个case块的入口点,但除非有break语句,否则将执行的case代码并不只是这个相匹配的case

(7)       如果想在没有一个case值匹配条件值时执行一些代码,则应该在switch语句内使用default关键字

(8)       Default块可以位于switch块内的任何地方,因此,如果没有case相匹配,则将进入default块。如果default不包含break,则代码将继续执行(直落)switch的末尾,或者直到遇到break语句为止

2.使用循环编写代码

(1)       基本for语句包含3个部分:声明和/或初始化、布尔计算以及迭代表达式

(2)       如果在基本for循环内计算或者递增变量,则它必须在该循环之前或在for循环声明内声明

(3)       在基本for循环声明内声明(不只是初始化)的变量不能在for循环之外访问,即:for循环后面的代码不能使用该变量

(4)       在基本for循环声明的第一部分内能够初始化多个同类型的变量,每个初始化变量必须用逗号分隔

(5)       增强型for循环(Java6)有两个部分:声明(块变量,其类型与数组或集合的元素兼容,并且该变量包含给定迭代的元素的值)和表达式(你希望循环遍历的数组或集合)。它只用于循环遍历数组或集合

(6)       不能将数字或其它不能计算为布尔值的任何内容作为if语句或循环结构的条件。例如:不能将if语句写成if(x),除非x是布尔变量

(7)       即使测试条件不满足,do循环也至少将进入循环体一次

3.使用breakcontinue语句

(1)       无标签的break语句将停止最内层循环构造的当前迭代,并执行该循环之后的下一行代码

(2)       无标签的continue语句将导致:最内层循环构造的当前迭代停止,检查该循环的条件,如果条件满足,则再次运行该循环

(3)       break/continue语句是带标签的,则它将在带标签的循环上引发类似的操作,而不是在最内层循环上

4.处理异常

(1)       异常有两种形式:检验异常和非检验异常

(2)       检验异常包括Exception的所有子类型,但不包括扩展RuntimeException的类

(3)       检验异常遵守处理或声明它的规则,任何可能抛出检验异常的方法(包括调用能够抛出检验异常方法的方法),都必须使用throws关键字声明异常,或用适当的try/catch处理异常

(4)       ErrorRuntimeException的子类型是非检验异常,因此,编译器不强迫要求处理或声明规则。你可以随意声明或处理它们,编译器对此不关心

(5)       若用可选的finally,则始终会调用它,不管在相应的try内是否有异常抛出,也不管抛出的异常是否被捕获

(6)       始终调用finally”这一规则的唯一例外是:如果JVM关闭,则不会调用finally块。如果从trycatch块调用System.exit(),则会发生这种情况

(7)       调用finally并不意味着它必然完成。Finally块内的代码本身能够引发异常或者触发方法System.exit()

(8)       未捕获的异常通过调用栈向后传播,它从抛出该异常的方法开始,到具有该异常类型相应catch的第一个方法为止,或者到JVM关闭为止[如果该异常到达main(),并且main()声明它躲避该异常时,JVM会关闭]

(9)       可创建自己的异常,通常通过扩展Exception或其子类型之一创建。这些异常将被看作检验异常,编译器将对这些异常强制执行处理或声明规则

(10)   所有的catch块都必须按照从最具体到最通用的顺序排列。如果对于IOExceptionException有一个catch子句,则必须把针对IOExceptioncatch放在代码的前面。否则,IOException将被catch(Exception e)捕获,因为catch变元能够捕获这一特定的异常或其任何子类型。编译器将禁止定义从来不能到达的catch子句

(11)   有些异常时有程序员创建的,有些则是由JVM创建的

5.使用断言机制

(1)       断言为在开发和调试期间测试假设提供了一种办法

(2)       断言通常在测试期间启用,在部署期间禁用

(3)       可以将assert用作关键字(Java1.4)或者标识符,但不能同时将它用作这两者。为了编译将assert用作标识符(例如,方法名称)的旧代码,应使用javac的命令行标志-source 1.3

(4)       默认情况下,断言在运行时是禁用的。要启用断言,应使用-ea-enableassertions命令行标志

(5)       可以使用-da-disableassertions标志有选择地禁用断言

(6)       可以使用不带任何变元的标识启用或禁用断言,则一般将启用或禁用断言。可以结合启用和禁用开关为某些类和/或包启用断言,而对其它类和/或包禁用

(7)       使用下面的方法能够以类为基础启用和禁用断言:java -ea -da:MyClass TestClass

(8)       可以以包为基础启用或禁用断言,指定的任何包也包含所有子包

(9)       不要使用断言验证公共方法的变元

(10)   不要使用可能产生副作用的断言表达式。

(11)   不要使用断言来验证某个代码快将永远不会到达。对于永远不应到达的代码,可以使用”assert false”,如果执行这条assert语句,则会立即抛出一个AssertionError.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值