//非运行时异常,必须通过throws声明或try处理
class ExceptionOne extends Exception
{
ExceptionOne(String msg)
{
super(msg);
}
}
//运行时异常,可以通过throws声明或try处理,也可以不作处理直接将控制权交给虚拟机
class ExceptionTwo extends RuntimeException
{
ExceptionTwo(String msg)
{
super(msg);
}
}
class ExceptionTest
{
//非运行时异常
//throws声明
public void doExcceptionOneDeclare() throws ExceptionOne
{
throw new ExceptionOne("one wrong");
}
//调用声明了异常的函数时可以用try...catch块处理
public void doExceptionOneTry()
{
try
{
doExcceptionOneDeclare();
}
catch(ExceptionOne e)
{
e.printStackTrace();
}
}
//调用声明了异常的函数时也可以直接声明不处理
public void doExceptionOneDeclareCall() throws ExceptionOne
{
doExcceptionOneDeclare();
}
//运行时异常
public void doExceptionTwo()// throws ExceptionTwo,可写可不写
{
throw new ExceptionTwo("two wrong");
}
public void doExceptionTwoCall()// throws ExceptionTwo,可写可不写
{
doExceptionTwo();
}
public void doExceptionTwoTryCall()
{
//try...catch块可用可不用
try
{
doExceptionTwo();
}
catch(ExceptionTwo e)
{
e.printStackTrace();
}
}
}
<pre name="code" class="java">//finally块是一定会执行的
class test
{
public static void main(String[] args)
{
ExceptionTest et = new ExceptionTest();
try
{
et.doExcceptionOneDeclare();
}
catch(ExceptionOne e)
{
e.printStackTrace();
}
finally
{
System.out.println("this must be execute, one");
}
try
{
et.doExceptionTwo();
}
finally
{
System.out.println("this must be execute, two");
}
}
}
//定义包跟把类文件放在指定文件夹下差不多,编译时记得指定路径,不然要手工创建
//文件夹很麻烦,下面的定义相当于将本文件中定义的类放在./A/B/C/D路径下
package A.B.C.D;