栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

C ++和Java中的异常处理之间的区别?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C ++和Java中的异常处理之间的区别?

崩溃的行正在取消引用无效的指针。在C ++中,这不会引发异常。相反,它是未定义的行为。

C ++中不存在空指针异常,这与Java会抛出空指针异常不同。相反,取消引用无效的指针将导致未定义的行为。未定义的行为并不总是意味着崩溃,但是如果崩溃,您很幸运。

语言概述:

最后和RAII

C
++和Java之间最重要的区别之一是Java支持

finally
语句。在代码
finally
块始终不管前述代码中是否运行
catch
块执行与否。例如:

try{}catch (SomeException e){}finally{  //pre here is always exectued.}

finally语句的目的是允许程序员在那时进行清理,即释放套接字,关闭文件句柄等。即使Java运行垃圾回收器,垃圾回收也仅适用于内存,而没有其他资源。在某些情况下,您仍然必须手动处理资源。现在C
++没有

finally
声明,因此建议该语言的用户遵守RAII原则(资源获取是初始化)。Stroustrup在此提供了对此的解释:http
:
//www.stroustrup.com/bs_faq2.html#finally。我更喜欢调用它,
Resourcedestruction is deallocation
但是基本上,当您的对象超出范围时,调用析构函数,则该析构函数应该释放该对象维护的所有资源。

例如,C ++ 11x提供了一个std :: unique_ptr来管理它:

void foo(){  std::unique_ptr<T> t(new T)  try  {    //pre that uses t  }  catch (...)  {  }}

new
函数结束后,分配给via的资源将被删除。

捕捉所有陈述

因为

Exception
如果您希望catch子句捕获任何异常,那么Java中的所有异常都将从一个公共基类继承,因此请按以下步骤进行设置:

catch (Exception e){  //any exception thrown will land here.}

在C ++中,对引发的异常没有任何限制,并且对于所有异常都没有通用的基类。标准做法是通过继承std ::
exception来形成您的自定义异常类,但是语言不会强制执行此操作。而是有一种特殊的语法来捕获所有异常:

catch (...){}

未处理的异常

这是语言表现不同的另一个领域。在C ++中,未捕获的引发异常将调用std :: terminate。std ::
terminate的默认行为是调用abort,它会生成SIGABRT,并且整个程序都会停止。

在Java中,行为是打印堆栈跟踪并终止发生未捕获的异常的线程。但是,由于Java程序员可以提供UncaughtException处理程序,因此行为可能与终止线程的默认行为完全不同。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/410611.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号