`

C++和Java异常区别的个人总结

 
阅读更多

(个人总结,不全面)

 

1. 【C++】没有finally,只有RAII(资源申请即初始化,即栈分配对象的析构函数)或std::auto_ptr/boost::shared_ptr(即堆分配对象的析构函数),借助析构函数的能力来实现,see http://topic.csdn.net/t/20060610/10/4813049.html

【Java】支持finally,期望程序员在finally中显式地释放系统资源。

结论:Java的异常写法更清晰,而C++的异常较隐晦和自动)。

 

2. 【C++】强调异常安全性(既要求资源正确释放,还要求在函数被中止抛出时保护类成员变量的不变式)

【Java】同样强调异常安全,但更侧重于资源释放,较少会顾及类的不变式(因为大多数操作是在临时的堆变量上)或者总是会检查类的不变式。(有些Java书把异常安全性称为异常原子性)

结论:Java的异常比C++的写法更随意,不需要重新抛出异常。

 

3. 【C++】异常不一定要明确catch

【Java】异常不catch可能会导致编译失败

结论:C++认为绝大部分情况下异常不会发生(也不必要)。Java大量使用异常可能是因为内部有众多分散的模块,以及虚拟机自身的不稳定。Java需要一种清晰而且高效的控制方式及时地处理异常,但C++认为只有标准库那样子复杂才有必要。

 

4.  【C++】没有强制的异常基类,捕获所有异常可以用catch(...)

【Java】用户异常必须继承自Exception,捕获所有异常则是用catch(Throwable x)(包括JVM内部错误Error异常、可以用编译器消除的RuntimeException异常,和用户定义的Exception派生类异常)

结论:C++可以抛出各种类型的变量,Java则严格规定三类异常:Error、RuntimeException和Exception的派生类(Exception也是RuntimeException的基类)。C++的运行期错误处理比Java的写法要宽松。

C++和Java都希望用户自己定义异常类以使异常处理更高效和准确。

 

(待补充)

分享到:
评论

相关推荐

    Java 基础个人总结

    - Java基于C++,但简化了许多复杂的特性,例如指针和内存管理。 - Java程序由类组成,这些类定义了数据和行为,并通过类的实例(对象)进行操作。 2. **Java环境配置**: - 学习Java前,需要安装Java ...

    总结了一些我的学习笔记,包括linux、C++、Java、Python、算法等,以及找工作时候的一些面经和笔记等。.zip

    C++的学习包括基本语法、类与对象、模板、异常处理、STL(标准模板库)、内存管理和多线程编程等。理解指针和引用,熟悉OOP概念如封装、继承、多态,以及学习如何使用STL中的容器(如vector、list、map)和算法,是...

    JAVA写的个人博客源码

    Java语法简洁且与C++相似,但更注重内存管理和异常处理,旨在降低程序出错的可能性。 【博客系统架构】 一个基于Java编写的个人博客系统通常会采用MVC(Model-View-Controller)架构模式,这是一种将业务逻辑、...

    c++课程设计-个人收支管理系统.zip

    总结,C++课程设计的个人收支管理系统项目不仅涵盖了C++语言的核心概念和技术,还涉及软件工程的多个方面,包括设计原则、数据库交互、UI设计、数据结构与算法、异常处理和安全性。通过这个项目,学生将得到实际编程...

    Java与.net的区别.txt

    综上所述,Java和.NET各有千秋,选择哪种技术栈取决于具体的应用场景和个人偏好。对于追求跨平台能力和大型企业级应用的开发者来说,Java可能是更好的选择;而对于希望利用微软生态系统和寻求高性能解决方案的开发者...

    前辈的c++50个建议

    根据给定的信息,“前辈的C++50个建议”提供了关于如何有效学习和掌握C++语言的指导思想和实用建议。下面将详细解释这些建议,并深入探讨它们背后的原理和重要性。 ### 1. C++的学习应当从C语言入手 C++是一种基于...

    Java期末考试题库(总结型,非商用)

    Java是一种广泛使用的面向对象的编程...这个题库资源虽然标明为“总结型”,不用于商业用途,但它的价值在于可以帮助学生系统地复习和巩固Java编程知识,提升解决问题的能力,对于个人学习和技能提升有着积极的作用。

    c++ 连接 mysql 官方文档

    - **兼容性**:基于 JDBC 4.0 的设计确保了与 Java 生态系统的高度兼容性和一致性,同时又充分利用了 C++ 的性能优势。 - **设计理念**:通过借鉴 Java 的 JDBC 设计,提高了 C++ 应用程序开发的效率和可维护性。 #...

    JAVA开发 个人简历模板.docx

    【Java开发个人简历模板】展示了求职者在Java开发领域的专业知识和实践经验。简历中提到了以下几个重要的知识点: 1. **核心Java编程**:求职者掌握了Core Java编程基础,这包括对象导向编程、数据结构、异常处理、...

    给C++初学者的忠告

    - **解释**:作为一门功能强大的编程语言,C++具备高度的灵活性与控制力,但这也意味着它比其他一些现代语言(如Python或Java)更难上手。初学者在学习过程中会遇到诸多挑战,比如指针、内存管理等复杂概念。 - **...

    兰州理工大学C++课设 班级考勤管理系统的设计与实现

    总结,兰州理工大学的这个C++课设项目,不仅锻炼了学生的编程能力,也体现了C++在解决实际问题中的实用性。通过设计与实现班级考勤管理系统,学生们能够理论联系实际,提升自己的综合能力,为未来的职业生涯打下坚实...

    JAVA学习笔记-良葛格

    然后可以开始学习Java的基础语法,包括数据类型、控制流程、类和对象、异常处理等。随着学习的深入,可以进一步探索Java标准库的使用,以及如何应用Java进行网络编程、多线程编程等高级主题。 此外,初学者应该参与...

    c++课程设计-个人收支管理系统(完整源码+说明).zip

    总结,C++个人收支管理系统课程设计是一个极好的学习项目,它涵盖了C++的核心知识点,同时也涉及到了软件工程的实际应用。通过这个项目,不仅能提升编程技能,还能培养解决问题和项目管理的能力。对于想要深入学习...

    C ++ 实践;用于C++ 入门

    对于初学者,掌握C++的基础语法、类和对象的概念、模板、异常处理以及STL(标准模板库)是入门的关键。 在C++编程中,VC++(Visual C++)是微软开发的一款集成开发环境,它提供了编写、调试和优化C++代码的全套工具...

    C++面试集锦,全面

    总结来说,上述知识点涵盖了从C++面试技巧到Java、JSP、JDBC和数据库触发器的基础和进阶概念,是IT从业者尤其是软件工程师和Web开发者必备的知识体系。理解和熟练掌握这些技术,不仅有助于提升个人编程技能,还能在...

    经典C/C++学习资料下载地址,包你满意!初学者必看

    书籍的深度和广度往往超越了在线教程或短期课程,因此对于想要系统学习C/C++的个人来说,这是一个理想的选择。 #### 6. **Teach Yourself C in 21 Days [ISO]** 这个资源可能是一本旨在帮助读者在三周内掌握C语言...

    java调用第三方dll

    它是Java平台标准的一部分,允许Java代码与其他语言编写的代码进行交互,例如C和C++。 - **作用**:通过JNI,Java程序能够调用本地方法(非Java编写的代码),实现与操作系统或硬件设备的交互。 - **原理**:JNI为...

    Java常见基础知识点.md

    ### Java 基础知识点详解 #### 面向对象和面向过程的区别 - **概念对比**:面向对象(OOP)和面向过程(P)是两种...以上总结了Java的一些基础知识点,希望能帮助你更好地理解和掌握Java语言的关键概念和技术细节。

Global site tag (gtag.js) - Google Analytics