异常
RuntimeException
错误的类型转换
数组下标越界
空指针访问
IOExeption
从一个不存在的文件中读取数据**FileNotFoundException**
越过文件结尾继续读取EOFException
连接一个不存在的URL
异常概述
例如除数为0,数组下标越界,要读写的文件不存在等等。
除数为0
Exception in thread “main” java.lang.ArithmeticException: / by zero
at day10.Test.main(Test.java:13)
public class Test {
public static void main(String[] args) {
int a = 0;
int b = 4/a;
System.out.println(b);
}
}
数组下标越界
Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3
at day10.Test.main(Test.java:9)
public class Test {
public static void main(String[] args) {
String[] str1 = new String[] {"10","20","30"};
for(int i =0 ; i < 4; i ++) {
//,i <3,才正确,这种是数组越界异常
System.out.println(str1[i]);
}
}
}
空指针异常:
Exception in thread “main” java.lang.NullPointerException
at day10.Test.main(Test.java:9)
public class Test {
public static void main(String[] args) {
// A a = new A();
A a = null;
System.out.println(a.i);
}
}
class A{
int i;
}
异常处理机制
try
捕获异常的第一步是用try{…}语句块选定捕获异常的范围,将可能出现异常的代码放在try语句块中。
如果明确知道产生的是何种异常,可以用该异常类作为catch的参数;也可以用其父类父类Exception类作为catch的参数。
可以用ArithmeticException类作为参数,也可以用RuntimeException类作为参数,或者用所有异常的父类Exception类作为参数**。但不能是与ArithmeticException类无关的异常,如NullPointerException,那么,catch中的语句将不会执行。**
使用 try…catch…finally 处理异常
异常处理是通过try-catch-finally语句实现的。
try
{
… //可能产生异常的代码
}
catch( ExceptionName1 e )
{
… //当产生ExceptionName1型异常时的处置措施
}
catch( ExceptionName2 e )
{
… //当产生ExceptionName2型异常时的处置措施
}
[ finally{
… //无条件执行的语句
} ]
不论在try、catch代码块中是否发生了异常事件,finally块中的语句都会被执行。
声明抛出异常
package day10;
public class Test1 {
public static void main(String[] args) {
B b = new B();
try{
b.test();
}catch(Exception e) {
e.printStackTrace();
}
}
}
class B {
int i;
public void test() throws Exception{
B b = null;
System.out.println(b.i);
}
}
java.lang.NullPointerException
at day10.B.test(Test1.java:21)
at day10.Test1.main(Test1.java:7)
告诉你是第七行,main方法里面有异常,test里面第21行有异常。
重写方法不能抛出比被重写方法范围更大的异常类型
子类不能抛出比父类更大的异常
人工抛出异常
package day10;
public class Test1 {
public static void main(String[] args) {
B b = new B();
try{b.test1(-100);
}catch(Exception e) {
e.printStackTrace();
}
}
}
class B {
int age;
public void test1(int age) throws Exception{
if(age > 0 && age< 150) {
this.age = age;
System.out.println("年龄是"+ this.age);
}else {
throw new Exception("年龄不在1·150");
}
}
}
java.lang.Exception: 年龄不在1·150
at day10.B.test1(Test1.java:29)
at day10.Test1.main(Test1.java:6)
创建用户自定义异常类
了解性内容,因为只有特殊情况才需要自己定义异常类!!!
package day10;
public class Test1 {
public static void main(String[] args) {
B b = new B();
//打印异常
try{
// b.test1(-100);
b.test2(-10);
}catch(Exception e) {
e.printStackTrace();
}
}
}
class B {
int age;
public void test1(int age) throws Exception{
if(age > 0 && age< 150) {
this.age = age;
System.out.println("年龄是"+ this.age);
}else {
throw new Exception("年龄不在1·150");
}
}
//自定义异常类MyException
public void test2(int age) throws MyException{
if(age > 0 && age< 150) {
this.age = age;
System.out.println("年龄是"+ this.age);
}else {
throw new MyException("年龄不在1·150");
}
}
}
//自定义异常类MyException
class MyException extends Exception{
//构造方法
public MyException(String msg) {
//子类调用父类的构造方法
super(msg);
}
}
day10.MyException: 年龄不在1·150
at day10.B.test2(Test1.java:35)
at day10.Test1.main(Test1.java:9)
转载:https://blog.csdn.net/weixin_41710541/article/details/105277114