try...catch语句
程序的异常:Throwable
严重问题Error我们不处理,这种问题一般都是很严重的,比如内存溢出
问题Exception
编译期问题不是RuntimeException的异常必须进行处理,如果不处理,编译就不能通过
运行期问题RuntimeException这种问题是代码不够严谨,需要修正代码
/*
* 如何处理异常?
*
* A:try...catch...finally
* B:throws
*
* try {
语句块//执行该语句块,可能会发生异常
} catch (异常类型 e) {
异常发生时要执行的语句块
} catch (异常类型 e) {
异常发生时要执行的语句块
} finally {finally {
无论异常发生与否,都要执行的语句块
}
*
*
* 注意:
* A:try里面的代码越少越好
* B:catch{}花括号里面必须有内容,哪怕是给出一个简单的提示
* C:异常类型能明确的进来明确,不要用大的异常类型来处理
* D:平级关系的异常类型先后顺序无关系,但是如果出现了继承关系的异常类型,超类必须在最后
* */
/*
* 如何处理异常?
*
* A:try...catch...finally
* B:throws
*
* try {
语句块//执行该语句块,可能会发生异常
} catch (异常类型 e) {
异常发生时要执行的语句块
} catch (异常类型 e) {
异常发生时要执行的语句块
} finally {finally {
无论异常发生与否,都要执行的语句块
}
*
*
* 注意:
* A:try里面的代码越少越好
* B:catch{}花括号里面必须有内容,哪怕是给出一个简单的提示
* C:异常类型能明确的进来明确,不要用大的异常类型来处理
* D:平级关系的异常类型先后顺序无关系,但是如果出现了继承关系的异常类型,超类必须在最后
* */ public class IntegerDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub method();
} public static void method() {
int a = 10;
int b = 0;
int arr[] = { 1, 2, 3 }; try {
System.out.println(a / b);
System.out.println(arr[3]);
} catch (ArithmeticException e) {
System.out.println("除数不能为0");
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("数组越界");
} catch (Exception e) {
System.out.println("出错了");
} finally { } System.out.println("OVER");
}
}
/*
* JDK7新的异常处理方案
* try {
*
} catch (异常类型1 | 异常类型2 变量) {
} finally {
}
*
* 注意:这个方法虽然简洁,但是也不够好
* A:处理方式是一致的。(实际开发中,好多时候可能就是针对同类型的问题,给出同一个处理)
* B:多个异常之间必须是平级关系
* */
/*
* JDK7新的异常处理方案
* try {
*
} catch (异常类型1 | 异常类型2 变量) { } finally { }
*
* 注意:这个方法虽然简洁,但是也不够好
* A:处理方式是一致的。(实际开发中,好多时候可能就是针对同类型的问题,给出同一个处理)
* B:多个异常之间必须是平级关系
* */ public class IntegerDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub method();
} public static void method() {
int a = 10;
int b = 0;
int arr[] = { 1, 2, 3 }; try {
System.out.println(a / b);
System.out.println(arr[3]);
} catch (ArithmeticException | ArrayIndexOutOfBoundsException e) {
System.out.println("出错了");
} finally { } System.out.println("OVER");
}
}
/*
* 面试题:
* 如果catch里面有return语句,请问finally里面的代码还会执行吗?如果执行,请问在return前,还是return后?
*
* 执行。前。
* 准确的说,应该是在中间
* */
/*
* 面试题:
* 如果catch里面有return语句,请问finally里面的代码还会执行吗?如果执行,请问在return前,还是return后?
*
* 执行。前。
* 准确的说,应该是在中间
* */ public class IntegerDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub System.out.println(getInt());
} public static int getInt() {
System.out.println("beginning of getInt");
int a = 10; try {
System.out.println("beginning of try");
System.out.println(a / 0);
a = 20;
System.out.println("end of try");
} catch (ArithmeticException e) {
System.out.println("beginning of catch");
a = 30;
System.out.println("end of catch");
return a;
/*
* return a;在程序执行到这一步的时候,这里不是return a;而是return 30;这个返回路径就形成了
* 但是,程序发现后面还有finally,所以继承执行finally语句块,a = 40;
* 再次回到以前的返回路径,继续执行return 30;
*/
} finally {
System.out.println("beginning of finally");
a = 40;
System.out.println("end of finally");
} System.out.println("end of getInt");
return a;
}
}
/*
* 异常注意事项:
* A:子类重写父类方法时,子类的方法必须提出相同的异常或父类异常的子类。(父类坏了,子类不能比父类更坏)
* B:如果父类抛出了多个异常,子类重写父类时,只能抛出相同的异常或者是子类,子类不能抛出父类没有的异常
* C:如果被重写的方法没有异常抛出,那么子类的方法绝对不可以抛出异常。如果子类方法内有异常抛出,那么子类只能try,不能throws
* */
/*
* 异常注意事项:
* A:子类重写父类方法时,子类的方法必须提出相同的异常或父类异常的子类。(父类坏了,子类不能比父类更坏)
* B:如果父类抛出了多个异常,子类重写父类时,只能抛出相同的异常或者是子类,子类不能抛出父类没有的异常
* C:如果被重写的方法没有异常抛出,那么子类的方法绝对不可以抛出异常。如果子类方法内有异常抛出,那么子类只能try,不能throws
* */ public class IntegerDemo {
public static void main(String[] args) {
}
} class Fu {
public void show() throws Exception {
}
} class Zi extends Fu {
public void show() throws ArithmeticException {
}
}
try...catch语句的更多相关文章
- Java异常处理中finally中的return会覆盖catch语句中的return语句
Java异常处理中finally中的return会覆盖catch语句中的return语句和throw语句,所以Java不建议在finally中使用return语句 此外 finally中的throw语 ...
- Java 多重catch语句的具体使用介绍
某些情况,由单个代码段可能引起多个异常.处理这种情况,你可以定义两个或更多的catch子句,每个子句捕获一种类型的异常.当异常被引发时,每一个catch子句被依次检查,第一个匹配异常类型的子句执行.当 ...
- 作用域&作用域链和with,catch语句&闭包
作用域(函数) 作用域:变量与函数的可访问范围,即作用域控制着变量与函数的可见性和生命周期; 在一些类C编程语言中花括号内的每一段代码都有各自的作用域,而且变量在声明它们的代码段外是不可见的,称之为块 ...
- C# try catch语句&获取随机数的方法
try catch语句: try{ //无论如何都会走,必须写: } catch(Exception a){ //Exception报异常,需要定义,需要写输出语句: //如果上面执行失败走,必须写: ...
- Java知多少(47)多重catch语句的使用
某些情况,由单个代码段可能引起多个异常.处理这种情况,你可以定义两个或更多的catch子句,每个子句捕获一种类型的异常.当异常被引发时,每一个catch子句被依次检查,第一个匹配异常类型的子句执行.当 ...
- Atitit. Java script 多重多重catch语句的实现and Javascript js 异常机制
Atitit. Java script 多重多重catch语句的实现and Javascript js 异常机制 1. 语法错误(ERROR)和运行期错误(Exception) 1 2. 错误类型判断 ...
- 一个try可以跟进多个catch语句,用于处理不同情况,当一个try只能匹配一个catch
一个try可以跟进多个catch语句,用于处理不同情况.当一个try只能匹配一个catch. 我们可以写多个catch语句,但是不能将父类型的exception的位置写在子类型的excepiton之前 ...
- try...catch 语句
一般情况下,我们很少用到 try...catch 语句,但是有时候为了测试代码中的错误,也有可能会用到.小白我也在工作中用到过.那么好的程序设计,什么时候会用到呢? try...catch 一般用来捕 ...
- 六. 异常处理5.多重catch语句的使用
某些情况,由单个代码段可能引起多个异常.处理这种情况,你可以定义两个或更多的catch子句,每个子句捕获一种类型的异常.当异常被引发时,每一个catch子句被依次检查,第一个匹配异常类型的子句执行.当 ...
- try~Catch语句中异常的处理过程
[2014/10/12 21:40]文章待续~ 1.函数自身捕获处理异常的情况 以下的样例介绍了try~catch语句中出现异常时语句的运行顺序: package month10; import ja ...
随机推荐
- Codeforces Round #430 (Div. 2) - B
题目链接:http://codeforces.com/contest/842/problem/B 题意:给定一个圆心在原点(0,0)半径为r的大圆和一个圆内的圆环长度d,然后给你n个小圆,问你有多少个 ...
- PAT Advanced 1042 Shuffling Machine (20 分)(知识点:利用sstream进行转换int和string)
Shuffling is a procedure used to randomize a deck of playing cards. Because standard shuffling techn ...
- MySQL安装+更换yum源+mysql密码忘记(2019更新)
安装mysql步骤:1.yum install mysql-server -y2.service mysqld start3.mysql4.切换数据库 use mysql 查看表 show table ...
- JAVA(-Xms,Xmx,Xmn-XX:newSize,-XX:MaxnewSize,-XX:PermSize,-XX:MaxPermSize)区别
1.-Xms:表示java虚拟机堆区内存初始内存分配的大小,通常为操作系统可用内存的1/64大小即可,但仍需按照实际情况进行分配.2.-Xmx:表示java虚拟机堆区内存可被分配的最大上限,通常为操作 ...
- 关于在IOS中 contenteditable=true 无法输入的问题
解决: 1.添加样式-webkit-user-select:text 2.如果引入了fastclick,需要添加个类名 needsclick 来源于知乎(https://www.zhihu.com/q ...
- JavaSE---泛型系统学习
1.概述 1.1.泛型: 允许在 定义 类.接口.方法时 使用 类型形参,这个类型形参 将在声明变量.创建对象.调用方法时 动态地指定: 1.2.jdk5后,引入了 参数化类型(允许程 ...
- 【LuoguP4770】[NOI2018] 你的名字
题目链接 题意简述 给定一个串 \(S\) 多组询问 , 每次给定一个串 \(T\) 和一个 区间 \([l,r]\) 求串\(T\) 有多少个本质不同的子串 满足不是 \(S[l...r]\) 的子 ...
- Python中decode与encode的区别
摘抄: 字符串在Python内部的表示是Unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符解码(decode)成unicode,再从unicode编码 ...
- B1011. A+B 和 C
题目描述 给定区间[-2^63, 2^63]内的三个整数A.B 和 C,请判断A+B是否大于C 输入格式 第一行给出正整数T(≤10),即测试用例的个数.随后给出T组测试用例,每组占一行,顺序给出A. ...
- __new__与__init__的区别
__new__ : 控制对象的实例化过程 , 在__init__方法之前调用 __init__ : 对象实例化对象进行属性设置 class User: def __new__(cls, *args, ...