异常
简介: try{
一切正常,执行这里
}catch(Exception e) {
如果不正常,执行这里(异常)
}
如果代码出现问题时,使用"异常机制"比选择结构更加方便。
异常的继承结构:

package Exception;
public class Demo01
{
public static void main(String[] args) {
// int [] num=new int[3];
// System.out.println(num[3]); //运行时异常,选择性处理
// Class.forName("Exception.Demo01");//检查异常, 强制处理
}
}
异常重点:
try catch finally throws throw
处理异常:try catch 或者 throws
try catch: 自己(当前方法)能够处理,使用try catch
try:将可能发生异常的代码用{}包囊起来
catch:捕获特定类型的异常;捕获时,先写范围小的类型,后写范围大的类型 如果try中的代码的确发生了异常,
则程序不再执行try中异常之后的代码,而是直接跳到catch中执行。
public static void test04()
{
try{
Object obj=null;
obj.equals("");//空指针异常
int []num=new int[3];
num[3]=3;//数组越界异常
}catch (NullPointerException e)
{
System.out.println("空指针异常");
}
catch (ArrayIndexOutOfBoundsException e)
{
System.out.println("数组越界异常....");
}catch(Exception e)//还有一些 根本临时想不到的异常
{
System.out.println("其它异常....");
System.out.println(e);//e:异常对象
e.printStackTrace();//打印异常的堆栈信息
System.out.println(e.getMessage());//提示你哪错了
}
}
finally:
无论正常,还是异常,始终都会执行的代码
public static void test01()
{
try {
System.out.println("1");
Object boj=null;
boj.equals("");//可能产生异常的代码
System.out.println("2");
}catch (NullPointerException e) //捕获特定类型的异常
{
System.out.println("发生了空指针异常");
}finally {
System.out.println("无论正常或异常,始终都会执行的代码");
}
/*
结果
1
发生了空指针异常
无论正常或异常,始终都会执行的代码
*/
}
无论执行完try,还是执行完catch,最终都会执行finally代码
1.即使遇到return,也仍然执行finally。(先执行finally在执行return)
public static int test02()
{
try {
Object object=new Object();
object.equals("");
return 1;
}catch (Exception e)
{
return 0;
}finally {
System.out.println("finally...");
}
/*
结果
finally...
1
*/
}
2.除非虚拟机关闭,才不会执行finally
public static int test03()
{
try {
Object object=null;
System.exit(1);//关闭jvm(关闭程序)
object.equals("");
return 1;
}catch (Exception e)
{
return 0;
}finally {
System.out.println("finally...");
}
/*
结果
1
*/
}
throws 自己(当前方法)不能处理,上交给上级(方法调用处)处理,使用throws
public static void test05() throws NullPointerException//抛出异常,抛出给上级(方法调用处)
{
try {
Object obj=null;
obj.equals("");//空指针
}catch (NullPointerException e)
{
e.printStackTrace();
}catch (Exception e)
{
}
}
public static void main(String[] args) throws Exception {//继续往上抛出异常(JVM)
test05();
}
throw一般和自定义异常使用一起使用:
jdk自带了很多类型的异常,但如果这些内置的异常
仍然不能满足项目的需求,那么就需要创建 自定义异常。
如何编写自定义异常:
1. 类,继承Exception,调用super("异常信息"):super就是把异常信息传递到父类里面,然后在子类声明
package Exception;
public class MyException extends Exception
{
public MyException(String message) //异常信息
{
super(message);
}
}
2. 使用throw声明一个自定义异常,并且进行try catch或throws
package Exception;
public class Demo03
{
public static void main(String[] args) throws Exception{
int age=188;
//约定,年龄不能大于120
if (age<=0||age>120)
{
//手工抛出(声明)一个异常
throw new MyException("年龄不能大于120");
}
}
}
浙公网安备 33010602011771号