文章目录
1.java将如何处理异常?
1.Java通过面向对象的方法进行异常处理,把各种不同的异常进行分类,并提供了良好的接口。
2.在Java中,每个异常都是一个对象,它是Throwable类或其它子类的实例。
当一个方法出现异常后便抛出一个异常对象,该对象中包含有异常信息,调用这个对象的方法可以捕获到这个异常并进行处理。
3.ava的异常处理是通过5个关键词来实现的:try、catch、throw、throws和finally。
1.1Java中的异常处理机制的简单原理和应用。
- 当JAVA程序违反了JAVA的语义规则时,JAVA虚拟机就会将发生的错误表示为一个异常。违反语义规则包括2种情况。
- 一种是JAVA类库内置的语义检查。例如数组下标越界,会引发IndexOutOfBoundsException;访问null的对象时会引发NullPointerException。
另一种情况就是JAVA允许程序员扩展这种语义检查,程序员可以创建自己的异常,并自由选择在何时用throw关键字引发异常。
所有的异常都是java.lang.Thowable的子类。
-
Java通过面向对象的方法进行异常处理,把各种不同的异常进行分类,并提供了良好的接口。
在Java中,每个异常都是一个对象,它是Throwable类或其它子类的实例。
当一个方法出现异常后便抛出一个异常对象,该对象中包含有异常信息,调用这个对象的方法可以捕获到这个异常并进行处理。
Java的异常处理是通过5个关键词来实现的:try、catch、throw、throws和finally。 -
一般情况下是用try来执行一段程序,如果出现异常,
系统会抛出(throws)一个异常,这时候你可以通过它的类型来捕捉(catch)它,或最后(finally)由缺省处理器来处理。
用try来指定一块预防所有“异常”的程序。紧跟在try程序后面,应包含一个catch子句来指定你想要捕捉的“异常”的类型。
throw语句用来明确地抛出一个“异常”。throws用来标明一个成员函数可能抛出的各种“异常”。 -
Finally为确保一段代码不管发生什么“异常”都被执行一段代码。
可以在一个成员函数调用的外面写一个try语句,在这个成员函数内部写另一个try语句保护其他代码。每当遇到一个try语句,
“异常”的框架就放到堆栈上面,直到所有的try语句都完成。
如果下一级的try语句没有对某种“异常”进行处理,堆栈就会展开,直到遇到有处理这种“异常”的try语句。
1.1 可以用以下代码实现:
下面展示一些 Test 测试 代码片
。
public class Test {
public static void main(String[] args) throws InterruptedException {
System.out.println("hello");
int a = 10;
int b = a/0; // 运行时异常。 除数不能为零。
int[] arrs = new int[10];
arrs[11] = 10; // 运行时异常。 数组下标越界异常。
System.out.println("正在登陆中");
for(int i=0;i<100;i++){
Thread.sleep(1000); // 请看main方法上的throws 删除它,你就会看见非运行时异常。需要强制处理的异常。
System.out.println("*");
if(i==10){
break;
}
}
System.out.println("登录成功");
}
}
2.如何处理异常
2.1 try , catch
- try 用来定义可能出现异常的代码块。
- catch 用来捕捉异常, 处理异常。
下面展示一些 Test 测试 代码片
。
public class Test2 {
public static void main(String[] args) {
System.out.println("hello1");
System.out.println("hello2");
System.out.println("hello3");
System.out.println("hello4");
System.out.println("hello5");
try{
int a = 10;
int b = a/0;
}catch(ArithmeticException e){
System.out.println("保险公司报销");
}
System.out.println("hello6");
try{
System.out.println("hello7");
System.out.println("hello8");
System.out.println("hello9");
String string = null;
System.out.println(string.charAt(2));
}catch(NullPointerException e){
System.out.println("第二个异常被处理掉");
}
System.out.println("hello10");
}
}
2.2 finally
- finally 无论是否出现异常,都必须执行的代码块。一般用来关闭连接,释放流。
下面展示一些 Test 测试 代码片
。
public class Test3 {
public static void main(String[] args) {
System.out.println("hello1");
System.out.println("hello2");
System.out.println("hello3");
System.out.println("hello4");
System.out.println("hello5");
try{
int a = 10;
int b = a/0;
}catch(ArithmeticException e){
System.out.println("保险公司报销");
}finally{
System.out.println("我继续喝咖啡");
}
System.out.println("hello6");
try{
System.out.println("hello7");
System.out.println("hello8");
System.out.println("hello9");
String string = null;
// System.out.println(string.charAt(2));
}catch(NullPointerException e){
System.out.println("第二个异常被处理掉了");
}finally{
System.out.println("我继续喝咖啡");
}
System.out.println("hello10");
}
}
2.3 语法结构
下面展示一些 Test 测试 代码片
。
public class Test4 {
public static void main(String[] args) {
try{
// 可能出现异常的代码块。
}catch(Exception e){
// Exception 或子类,处理异类。
}finally{
// 无论是否出现异常,都必须执行代码块。 finally不是不想存在的。
}
}
}
3.面试题
3.1 面试题 一
下面展示一些 面试题一 测试 代码片
。
public class Test5 {
public static void main(String[] args) {
// 一个catch只处理一个异常。
// 一个try后面可以有多个catch吗? 可以。
// 要求: 异常的父类必须写在子类之后。
try {
int a = 10/1;
String str = null;
System.out.println(str.charAt(0));
System.out.println("77777777");
int</