public class TestException{
public void get(String str)throws ClassNotFoundException
{
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}catch(ClassNotFoundException e){
e.printStackTrace();
throw new ClassNotFoundException(); //这句
}
}
public void get1(String str)throws ClassNotFoundException
{
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}catch(ClassNotFoundException e){
e.printStackTrace();
}
}
public void get2(String str)throws ClassNotFoundException
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
public void get3(String str)
{
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}catch(ClassNotFoundException e){
e.printStackTrace();
}
}
}最好能详细解释try{}catch(){}、throws和throw的区别,以及什么时候分别该用他们,还有他们该如何配合使用????·!···
public void get(String str)throws ClassNotFoundException
{
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}catch(ClassNotFoundException e){
e.printStackTrace();
throw new ClassNotFoundException(); //这句
}
}
public void get1(String str)throws ClassNotFoundException
{
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}catch(ClassNotFoundException e){
e.printStackTrace();
}
}
public void get2(String str)throws ClassNotFoundException
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
public void get3(String str)
{
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}catch(ClassNotFoundException e){
e.printStackTrace();
}
}
}最好能详细解释try{}catch(){}、throws和throw的区别,以及什么时候分别该用他们,还有他们该如何配合使用????·!···
解决方案 »
- 求助!请问各位大神,如何使用嵌套的for循环输出以下内容?
- Java实现自动登录网站发帖
- 谁来分析下Gc
- 关于PrintWriter与其close()方法的困惑
- 跪求高手一个功能怎么写!在线等!
- 救命啊,怎么设备jdk的环境变量啊,有没有帮忙的啊~~~
- 在 native 方法GetMyMethod(String str, MyClass cls)中,如何在实现这个native方法的VC程序DLL中使用这个MyClass ?
- 哪位大哥在上海博科软件公司面试过???????????
- 请问一个float型的数字*35% 应该怎么做才能使仍是float型数字输出呢?下面有一段是此题的代码.请帮我看一下该怎么改.在此先谢过各位前辈了
- 如何让IE5 能运行JDK1.4编译产生的Applet类
- 急啊,java如何打包
- 怎样实时显示时间?
JAVA的异常处理是由五个关键字来管理的,TRY,CATCH,THROW,THROWS和FINALLY
如果TRY代码块中有异常发生,则可以使用CATCH捕获这个异常,并且转而执行CATCH代码块中的东西.系统产生的异常由JAVA运行时候自动抛出,我们也可以使用THROW手动抛出异常.比如你这里的throw new ClassNotFoundException(); //这句
如果一个方法产生自己不处理的异常,则需要使用THROWS子句声明该异常
而FINALLY中的语句是不论程序是否有异常都将执行的.比如你进行数据库操作,不论成功与否你都想最后断开连接,你就可以把断开的语句写到FINALLY代码块里.
throw 用来抛出异常
如果在方法内部抛出了异常(或者在方法内部调用的其他方法抛出了异常),这个方法将在抛出异常的过程中结束.要是不希望方法就此结束,可以在方法内设置一个特殊的快来捕获异常.因为在这个快尝试各种可能产生异常的方法调用,所以称为"try"块.
抛出的异常必须在某处得到处理.这个"地点"就是"异常处理程序",而且针对每个要捕获的异常,得准备相应的处理程序,这个就是"catch"块.
以上出自thinking in java 3rd
get方法调用Class.forName就有可能产生"ClassNotFoundException",然后被后面的catch块所捕获,然后把异常信息打印出来,最后在重新把异常抛出(这可以在以后调用get方法时再重新处理这个异常)
get1方法只是把异常捕获,然后打印异常信息
get2方法只是方法头声明了可能throws ClassNotFoundException,但并没有真正的抛出异常,也没有处理它,如果要调用get2方法,就必须把它放在try块然后对可能抛出的异常进行处理.
public void get(String str)throws ClassNotFoundException
{
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}catch(ClassNotFoundException e){
e.printStackTrace();
//throw new ClassNotFoundException();
//--使用新的异常通常用于更精确的提示问题, 上句可改为
throw new ClassNotFoundException("找不到指定类",e);
}
}
public void get1(String str)throws ClassNotFoundException
{
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}catch(ClassNotFoundException e){
e.printStackTrace();
//这样不会因为找不到类而抛出异常, 应用上认为通过上句提示就可以了, 写法上get3更合适
}
}
public void get2(String str)throws ClassNotFoundException
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
//和get()方法的效果一样的, 在这个层次不处理异常,而由上级调用者处理
}
public void get3(String str)
{
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}catch(ClassNotFoundException e){
e.printStackTrace();
}
}
}===================
一般常用
a() throws Exception1, Exception2, ...{ //抛出由调用层处理的异常
try{
//遇到逻辑错误, 抛出异常, 说明问题出在哪
throw new ...
}catch(... e){
//抓住已知错误, 并根据需要由程序处理
...
//也可继续抛出
throw e;
//也可形成更明确的异常
throw new ...
}finally{
//不管是否出现异常都要处理的模块, 如关闭stream, 关闭数据库连接等
}
}
a() throws Exception1, Exception2, ...{ //抛出由调用层处理的异常
try{
//遇到逻辑错误, 抛出异常, 说明问题出在哪
throw new ...
}catch(... e){
//抓住已知错误, 并根据需要由程序处理
...
//也可继续抛出
throw e;
//也可形成更明确的异常
throw new ...
}finally{
//不管是否出现异常都要处理的模块, 如关闭stream, 关闭数据库连接等
}
}
小张.请客(小王);
两个人吃得饱饱的;
} catch (小王有急事) {
小张省下一个人的饭钱;
}
小张手上还剩若干钱;