博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java_异常处理___
阅读量:4575 次
发布时间:2019-06-08

本文共 2298 字,大约阅读时间需要 7 分钟。

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

 

 
  1. try {  
  2.       
  3.     if(number2 ==0)  
  4.         // throw 类似于方法的调用  
  5.         throw new ArithmeticException("Message : Divisor cannot be zero");  
  6.     System.out.println(number1 / number2);  
  7.       
  8. catch (Exception e) {  
  9.     System.out.println(e.getMessage());  
  10. }  

 

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

 

 

 

 
  1. public class Quotient {  
  2.     public static void main(String[] args) {  
  3.         Scanner input = new Scanner(System.in);  
  4.         boolean continueInput = true;  
  5.         int number = 0;  
  6.   
  7.         while (continueInput) {  
  8.   
  9.             try {  
  10.                 System.out.println("Enter an integer:");  
  11.                 // InputMismatchException  
  12.                 number = input.nextInt();  
  13.                 continueInput = false;  
  14.             } catch (InputMismatchException e) {  
  15.                 System.out.println("an integer is required");  
  16.                 String c = input.nextLine();  
  17.                 System.out.println("nextLine: " + c);  
  18.             }  
  19.         }  
  20.         System.out.println("result is :" + number);  
  21.     }  
  22. }  

 

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(), 都有类似区分)

 

 

 
  1. public static void main(String[] args) {  
  2.         Scanner input = new Scanner(System.in);  
  3.   
  4.         System.out.println("Enter a number");  
  5.         int number = input.nextInt();  
  6.         System.out.println(number);  
  7.           
  8.         String c = input.nextLine();  
  9.         System.out.println(c);  
  10.   
  11.     }  

 

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

转载于:https://www.cnblogs.com/prisonerliu/p/5365918.html

你可能感兴趣的文章
HashMap实现原理分析
查看>>
私有类方法
查看>>
java网络编程Socket通信详解
查看>>
为什么使用Nosql:Nosql和SQL的区别
查看>>
<转>DNS服务系列之二:DNS区域传送漏洞的安全案例
查看>>
LINUX中常用操作命令
查看>>
【android】动画效果研究(View)【1】
查看>>
(三)常用的数学函数
查看>>
生产信息集成分析平台(MIIAS V1.0) 概述
查看>>
学习进度——第十五周
查看>>
iOS开发UI篇—从代码的逐步优化看MVC
查看>>
简谈-网络爬虫的几种常见类型
查看>>
File对象目录列表器
查看>>
(K)ubuntu上将分区格式化成NTFS格式
查看>>
uva 12003 Array Transformer (大规模阵列)
查看>>
mysql5.7二进制包安装方式
查看>>
SQL With As 用法Sql 四大排名函数(ROW_NUMBER、RANK、DENSE_RANK、NTILE)简介
查看>>
装饰者模式——Java设计模式
查看>>
39.递推练习: 菲波那契数列(2)
查看>>
排序精讲
查看>>