书籍 : 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:");
- // InputMismatchException
- number = 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()以帮前一次输入“擦屁股”。