Java异常

Posted 菜菜小谭

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java异常相关的知识,希望对你有一定的参考价值。

*************************如何处理异常********************************


try{

//可能出现错误的代码

}catch(异常类的类名 e){

//处理错误的代码

}


演示代码:


package com.chapter10;

//演示如何处理异常
public class TestTryCatch {
public static void main(String[] args) {

String[] friendsArr = { "tom", "john", "jenni" };

try{
for (int i = 0; i < 4; i++) {
System.out.println(friendsArr[i]);//当访问下标为3的元素的时候 报错 程序终止
}
}catch(ArrayIndexOutOfBoundsException e){

e.printStackTrace();//打印栈轨迹 最最简单 最最偷懒的方式
System.out.println("数组下标越界了");
}

//处理完错误以后 程序就是一个正常的程序了 就可以往下继续运行
System.out.println("here");
}




}

 

处理错误的时候 最简单的、最最偷懒的方式 就是只打印栈轨迹,不推荐..因为之前我们看到了

即使不做任何处理,虚拟机默认的处理方式就是打印栈轨迹...至少应该有一个良好的提示...

 

注意: Java中的异常处理不能从根本上修正错误,只是一个良好的提示作用,如果能帮我们

把4-->3 这不叫异常处理,这是人工智能..

 

*************************异常的分类(一个图)********************************

本章重点: 一个图、5个关键字

 

一个图:

Throwable(可抛出物 java中所有异常类的基类)

 

Error Exception

 

RuntimeException Others(CheckedException)

 

Error: 非常严重的错误..程序员在程序这个层次修改不了,例如硬件崩溃、操作系统崩溃、虚拟机崩溃...
开车时, 地震了...

 

Exception: 不太严重的错误。程序员可以通过修改程序来完成...

 


*************************Error 非常严重的错误******************************************


Error: 非常严重的错误..程序员在程序这个层次修改不了,例如硬件崩溃、操作系统崩溃、虚拟机崩溃...
开车时, 地震了...


内存溢出(内存不够用)


一.栈溢出

StackOverflowError


递归


栈深度: 栈能容纳方法调用的方法的个数...


演示代码:


package com.chapter10.error;

//演示栈溢出
public class TestStackOverflowError {

private int sum;

public void test(){

if(sum<=17000){
sum++;
test();
System.out.println("test方法被调用了");
}
}

public static void main(String[] args) {
TestStackOverflowError t = new TestStackOverflowError();
t.test();
}
}

 


二.堆溢出


OutOfMemoryError: Java heap space


long[] longArr = new long[125000000];

 

三.方法区


OutOfMemoryError: permgen space


当项目比较大的时候 同时使用n多类文件 类文件把方法区占满 会报方法区溢出

 

可以通过修改 MyEclipse下的myeclipse.ini 配置文件调整堆、方法区、栈的默认大小


*************************Exception 异常*****************************************

不太严重的错误,程序员可以通过修改代码来完成

 

具体又分为两种:


1.RuntimeException

运行时异常 运行的时候发生的错误 可以处理也可以不处理 就像开车中 遇见的小石子

 

2.Others(CheckedException)


检查性异常 编译时的异常 必须被处理 不处理编译不通过 就像开车中汽车抛锚

 

*************************RuntimeException ******************************************


运行时异常 运行的时候发生的错误 可以处理也可以不处理 就像开车中 遇见的小石子


五种常见的运行时异常(面试题)


1. 数组下标越界 ArrayIndexOutOfBoundsException


2. 算数异常 ArithmeticException


3. 空指针异常 NullPointerException (重点)

 

什么时候会出现空指针异常

(1) 在null上调用方法


(2) null上访问属性

 

4. 类转换异常 ClassCastException

 

5. 数字格式化异常 NumberFormatException

 

演示代码:


package com.chapter10.exception.runtimeException;

//演示五种常见的运行时异常
public class TestRuntimeException {

public static void main(String[] args) {
//1. 数组下标越界 ArrayIndexOutOfBoundsException
//2. 算数异常 ArithmeticException

/*int a = 10/0;
System.out.println(a);*/
//3.空指针异常 NullPointerException (重点)
//什么时候会出现空指针异常?
//(1) 在null上调用方法
//Student s = new Student();
//s.study();

//(2) null上访问属性
/*Student s = null;
System.out.println(s.sno);*/
//4. 类转换异常 ClassCastException
/*Person student = new Student();

Teacher teacher = (Teacher)student;*/

//5.数字格式化异常 NumberFormatException

try{
int a = Integer.parseInt("11");
System.out.println(a);
}catch(NumberFormatException e){
e.printStackTrace();
System.out.println("数字格式化异常");
}

System.out.println("here");

}
}


**************************Others(CheckedException)******************************


检查性异常、编译期的异常,必须被处理,不处理编译不通过..就像开车时汽车抛锚


处理方式有两种:


1. 使用try..catch 明确的处理


驾驶员自己会修

 

2. 使用throws 抛出给调用者处理

让别人修,让修理工修

 

检查性异常体现了java程序的健壮性...


***************************演示检查性异常的特点**************************

没有出现异常的情况

演示代码


package com.chapter10.exception.checkedException;

import java.io.FileInputStream;
import java.io.FileNotFoundException;

//演示检查性异常
//必须被处理 不处理编译不通过 就像开车中汽车抛锚
//处理完毕以后 程序才能编译通过
public class TestCheckedException {

public static void main(String[] args) {

//读文件

try{
FileInputStream fis = new FileInputStream("d:\jidi16\aaa.txt");
System.out.println("aaa");
}catch(FileNotFoundException e){
e.printStackTrace();
System.out.println("文件没有找到");
}

System.out.println("here");

}
}


***************************出现了异常并且捕获了**************************

 

抛出-捕获机制


注意: 不会回到错误发生的地方,继续往下执行

 

***************************不能有过大的try块**************************

 

































































































































以上是关于Java异常的主要内容,如果未能解决你的问题,请参考以下文章

面试Java异常面试题

Java异常

java中 方法中抛出异常处理方法

Java - 异常处理

Java的异常处理语法

Java异常结构