有两个问题:finally无用,throw无用,解释则两个操作的含义,给出一个异常处理的标准结构
范例:现在要求定义一个div()方法(定义在 MyMath类里面)
1.此方法之中所有出现的异常一定要交给被调用处进行处理;
2.在进行除法计算开始首先要输出一行提示信息”1.’
3.在除法计算进行完毕之后也要输出一行提示信息“2.”
先完成基本功能,不考虑任何有可能出现错误的情况
范例:基本要求
package YICHENG;
class MyMatha{
public static int div(int x,int y) throws Exception{
int result=0;//保存除法计算
System.out.println("1.除法计算开始,开始计算功能");
result=x/y;//进行除法计算
System.out.println("2.除法计算结束,关闭计算功能");
return result;
}
}
public class Throwe {
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
System.out.println(MyMatha.div(10, 2));
}catch(Exception e){
e.printStackTrace();
}
}
}
但是如果此时在除法计算过程之中出现错误,则输出的信息如下:
1.除法计算开始,开始计算功能
java.lang.ArithmeticException: / by zero
at YICHENG.MyMatha.div(Throwe.java:6)
at YICHENG.Throwe.main(Throwe.java:16)
出错之后发现原本的设计是无法满足于当前要求的
范例:标准结构
package YICHENG;
class MyMatha{
public static int div(int x,int y) throws Exception{
int result=0;//保存除法计算
System.out.println("1.除法计算开始,开始计算功能");
try {
result=x/y;//进行除法计算
}catch(Exception e) {
throw e;
}finally {
System.out.println("2.除法计算结束,关闭计算功能");
}
return result;
}
}
public class Throwe {
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
System.out.println(MyMatha.div(10,2));
}catch(Exception e){
e.printStackTrace();
}
}
}
在本结构之中就出现的try,catch,finally,throw,throws标准组合应用,日后可以把两条语句理解为资源的打开和资源的关闭。
当然,以上代码还可以更加优化,直接使用try..finally操作
try {
result=x/y;//进行除法计算
}
finally {
System.out.println("2.除法计算结束,关闭计算功能");
}
RuntimeException类
观察代码
范例:将字符串转换int型
public class Throwf {
public static void main(String[] args) {
// TODO Auto-generated method stub
int num=Integer.parseInt("123");
System.out.println(num*num);
}
}
但是现在来观察一下parseInt()方法的定义。
public static int parseInt(String s) throws NumberFormatException
发现在parseInt()方法定义的时候存在有throws关键字的抛出,按照之前所学,既然此处存在有throws,那么在调用时就应该使用try.catch进行处理,可是此时没有强迫性的要求使用异常处理,
来观察一下RuntimeException定义。
可以发现RuntimeException不仅仅时Exception的子类,最重要的是它还继承了RuntimeException,而在java之中为了方便用户处理(并不是所有的异常都必须强制性处理)
那么使用RuntimeException的子类往往可以由用户选择性进行处理,如果不需要也可以不处理
面试题:请解释RuntimeException和Exception的区别?请列出常见的RuntimeException子类
用户可以处理的异常都要继承Exception类,而RuntimeException是Exception的子类;
Exception的异常要求用户强制性进行处理,而RuntimeException异常用户可以选择性进行处理,如果用户在编写代码过程之中没有处理,则出现异常后会由JVM进行默认处理
常见的RuntimeException子类:ArithmeticException NumberFormatException NullPointerException ClassCastException DOMException
范例:现在要求定义一个div()方法(定义在 MyMath类里面)
1.此方法之中所有出现的异常一定要交给被调用处进行处理;
2.在进行除法计算开始首先要输出一行提示信息”1.’
3.在除法计算进行完毕之后也要输出一行提示信息“2.”
先完成基本功能,不考虑任何有可能出现错误的情况
范例:基本要求
package YICHENG;
class MyMatha{
public static int div(int x,int y) throws Exception{
int result=0;//保存除法计算
System.out.println("1.除法计算开始,开始计算功能");
result=x/y;//进行除法计算
System.out.println("2.除法计算结束,关闭计算功能");
return result;
}
}
public class Throwe {
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
System.out.println(MyMatha.div(10, 2));
}catch(Exception e){
e.printStackTrace();
}
}
}
但是如果此时在除法计算过程之中出现错误,则输出的信息如下:
1.除法计算开始,开始计算功能
java.lang.ArithmeticException: / by zero
at YICHENG.MyMatha.div(Throwe.java:6)
at YICHENG.Throwe.main(Throwe.java:16)
出错之后发现原本的设计是无法满足于当前要求的
范例:标准结构
package YICHENG;
class MyMatha{
public static int div(int x,int y) throws Exception{
int result=0;//保存除法计算
System.out.println("1.除法计算开始,开始计算功能");
try {
result=x/y;//进行除法计算
}catch(Exception e) {
throw e;
}finally {
System.out.println("2.除法计算结束,关闭计算功能");
}
return result;
}
}
public class Throwe {
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
System.out.println(MyMatha.div(10,2));
}catch(Exception e){
e.printStackTrace();
}
}
}
在本结构之中就出现的try,catch,finally,throw,throws标准组合应用,日后可以把两条语句理解为资源的打开和资源的关闭。
当然,以上代码还可以更加优化,直接使用try..finally操作
try {
result=x/y;//进行除法计算
}
finally {
System.out.println("2.除法计算结束,关闭计算功能");
}
RuntimeException类
观察代码
范例:将字符串转换int型
public class Throwf {
public static void main(String[] args) {
// TODO Auto-generated method stub
int num=Integer.parseInt("123");
System.out.println(num*num);
}
}
但是现在来观察一下parseInt()方法的定义。
public static int parseInt(String s) throws NumberFormatException
发现在parseInt()方法定义的时候存在有throws关键字的抛出,按照之前所学,既然此处存在有throws,那么在调用时就应该使用try.catch进行处理,可是此时没有强迫性的要求使用异常处理,
来观察一下RuntimeException定义。
可以发现RuntimeException不仅仅时Exception的子类,最重要的是它还继承了RuntimeException,而在java之中为了方便用户处理(并不是所有的异常都必须强制性处理)
那么使用RuntimeException的子类往往可以由用户选择性进行处理,如果不需要也可以不处理
面试题:请解释RuntimeException和Exception的区别?请列出常见的RuntimeException子类
用户可以处理的异常都要继承Exception类,而RuntimeException是Exception的子类;
Exception的异常要求用户强制性进行处理,而RuntimeException异常用户可以选择性进行处理,如果用户在编写代码过程之中没有处理,则出现异常后会由JVM进行默认处理
常见的RuntimeException子类:ArithmeticException NumberFormatException NullPointerException ClassCastException DOMException