JAVA_异常处理

来源:互联网 发布:无锡胡埭加工中心编程 编辑:程序博客网 时间:2024/05/21 01:44

书籍 : java语言程序设计-基础篇(原书第8版) --  异常处理



try {if(number2 ==0)// throw 类似于方法的调用throw new ArithmeticException("Message : Divisor cannot be zero");System.out.println(number1 / number2);} catch (Exception e) {System.out.println(e.getMessage());}


1.以上 ,throw 主要用在方法体中,方便开发者手动抛出一个错误,用catch捕获并处理 。

还有一个类似关键字是 throws,主要用在声明方法时。有时候一个方法中产生了异常,但是不知道该怎么处理它,那么就放着不管,当有异常抛出时会中断该方法,而异常被抛到这个方法的调用者那里。这个有点像下属处理不了的问题就交到上司手里一样,这种情况称为回避异常。但是这使得调用这个方法就有了危险,因为谁也不知道这个方法什么时候会丢一个什么样的异常给调用者,所以在定义方法时,就需要在方法头部分使用throws来声明这个方法可能回避的异常。


2. 异常类的继承关系 :java.lang.Object  -> Throwable -> Exception -> RuntimeException -> ArithmeticException

Throwable 的getMessage方法 :返回此 throwable 的详细消息字符串。


3.异常处理最根本的优势就是将检测错误从处理错误中分离。(想像throws的功能理解这句话 :被调用函数中检测错误,调用函数中处理错误)


4.在java 中有异常处理,那么我们以前编程时方法出现了错误会怎么样? 那就是返回值 。那么类似的还有C++的断言 , 到这里你是否想知道更有类似的有趣的处理方式呢?请看:

各种编程语言中的「错误/异常处理」有哪些成熟的,优雅的或是热门的机制/思想?

http://www.zhihu.com/question/35193523



public class Quotient {public static void main(String[] args) {Scanner input = new Scanner(System.in);boolean continueInput = true;int number = 0;while (continueInput) {try {System.out.println("Enter an integer:");// InputMismatchExceptionnumber = input.nextInt();continueInput = false;} catch (InputMismatchException e) {System.out.println("an integer is required");String c = input.nextLine();System.out.println("nextLine: " + c);}}System.out.println("result is :" + number);}}


1.假如我们一开始输入的是一个非整数,因为nextInt仅仅读取整数,所以这个非整数还是会被遗留在缓冲区,并且按照我们的输入习惯,最后还有一个回车。所以之后的nextLine函数就读取了这个非整数。


2.next和nextLine的区别 。 他们返回的都是字符串。但是:

next()一定要读取到有效字符后才可以结束输入,对输入有效字符之前遇到的空格键、Tab键或Enter键等结束符,next()方法会自动将其去掉,只有在输入有效字符之后,next()方法才将其后输入的空格键、Tab键或Enter键等视为分隔符或结束符。简单地说,next()查找并返回来自此扫描器的下一个完整标记。完整标记的前后是与分隔模式匹配的输入信息,所以next()不能得到带空格的字符串。
    而nextLine()的结束符只是Enter键,即nextLine()返回的是Enter键之前的所有字符(所以不包括Enter键),它是可以得到带空格的字符串的。

(C语言中,scanf()的 %c 和 %s ,还有getchar() 和 gets(), 都有类似区分)


public static void main(String[] args) {Scanner input = new Scanner(System.in);System.out.println("Enter a number");int number = input.nextInt();System.out.println(number);String c = input.nextLine();System.out.println(c);}


1.分隔符遗留问题。如果你在使用过了next()和类似于nextInt()、nextDouble()的函数之后使用nextLine() , 你要记得之前的输入遗留下了一个回车,这个回车是可以被nextLine()读取的。你要做的,就是在这两者之间再用一个nextLine()以帮前一次输入“擦屁股”。



2016/4/8: 使用返回值来检测错误也叫“error code” , 最常见的就是蓝屏代码。


参考阅读:百度百科 - 异常处理

结论一:既然捕获了异常,就要对它进行适当的处理。不要捕获异常之后又把它丢弃,不予理睬。调用printStackTrace算不上“处理异常”。

结论二:在catch语句中尽可能指定具体的异常类型,必要时使用多个catch。不要试图处理所有可能出现的异常。

结论三:保证所有资源都被正确释放。充分运用finally关键词。

结论四:在异常处理模块中提供适量的错误原因信息,组织错误信息使其易于理解和阅读。

结论五:尽量减小try块的体积。

结论六:全面考虑可能出现的异常以及这些异常对执行流程的影响。


0 0
原创粉丝点击