1java异常详解
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1java异常详解相关的知识,希望对你有一定的参考价值。
语法错误、编译时错误
语义错误、逻辑错误、运行时错误
语义错误、逻辑错误、运行时错误
1、注意:这里说的异常是运行期错误,不包括编译期错误。
2、try尝试运行,catch捕获并处理,finally无论出错不出错都会执行。
3、异常类根类:Throwable(注意,这是一个类)
Throwable又有两个子类,Error和Exception。Error不是我们关注的,不是我们能够处理的。
Exception还有一个子类,RuntimeException,可捕捉也可不捕捉。其它的Exception必须处理。
4、注意:不要轻易地抛出异常,不要轻易地吞掉异常。
该处理的一定要处理;处理不了,没关系,可以往外抛。在main方法上也可以抛异常,但永远都不要这样做,除非测试。
5、printStackTrace()打印堆栈错误信息,一个地方出错可能是另一个地方引起的。
6、java异常处理机制:
6.1、java程序执行过程中如出现异常,系统会监测到并自动生成一个相应的异常类对象,然后再将它交给运行时系统。
(自定义异常需要我们自己监测,并手动生成这个异常的对象,然后抛出交给运行时系统)
6.2、运行时系统再寻找相应的代码来处理这一异常。如果java运行时系统找不到可以处理异常的代码,则运行时系统将终止,相应的java程序也将退出。
public static void main(String[] args) {
String str = "1";
for(int i=0;i<10000;i++) {
str += str;
}
}
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
常见异常类:
RuntimeException 运行时异常
IndexOutOfBoundsException 下标越界异常
NullPointerException 空指向异常
ArrayIndexOutOfBoundsException 数组下标越界异常
StringIndexOutOfBoundsException 字符串下标越界异常
ClassCastException 类型转换异常
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Exception:
IOException
FileNotFoundException
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
String[] str = {"1","2","3"};
try {
for(int i=0;i<5;i++) {
System.out.print(str[i]);
}
}catch(ArrayIndexOutOfBoundsException e){
System.out.println("数组下标越界");
return;//如果return,下面的finally还会执行
//System.exit(0);//如果是exit()方法,那么下面的finally就不会被执行了。
//exit()终止虚拟机的运行
}finally{
System.out.println("我是finally");
}
System.out.println("程序结束");
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
人工抛出异常
java异常类对象除了在程序运行出错时由系统自动生成并抛出之外,也可根据需要人工创建并抛出。
throw new IOException();
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
自定义异常示例:
自定义异常需要人工抛出。
class MyException extends Exception {
public MyException(String message) {
super(message);
}
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
public class TestException {
public void regist(int number) throws MyException {
if (number < 0) {
throw new MyException("人数不能为负数");
}
}
public static void main(String[] args) {
TestException t = new TestException();
try{
t.regist(-1);
}catch(MyException m) {
m.printStackTrace();
}
}
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
重写:两同两小一大
方法名相同
形参列表相同
返回值类型小于或等于父类方法的返回值类型
抛出异常小于或等于父类方法的返回值类型
访问权限大于或等于父类方法的访问权限
以上是关于1java异常详解的主要内容,如果未能解决你的问题,请参考以下文章
致命异常:AsyncTask #1 java.lang.RuntimeException:执行 doInBackground() 时发生错误