异常处理

c++之智能指针,异常处理,枚举

拈花ヽ惹草 提交于 2020-02-13 11:15:32
智能指针,文件IO 二、智能指针&动态内存 1. 指针潜在问题 c++ 把内存的控制权对程序员开放,让程序显式的控制内存,这样能够快速的定位到占用的内存,完成释放的工作。但是此举经常会引发一些问题,比如忘记释放内存。由于内存没有得到及时的回收、重复利用,所以在一些c++程序中,常会遇到程序突然退出、占用内存越来越多,最后不得不选择重启来恢复。造成这些现象的原因可以归纳为下面几种情况: 野指针: 内存已经被释放、但是指针仍然指向它。这时内存有可能被系统重新分配给程序使用,从而会导致无法估计的错误 重复释放:程序试图释放已经释放过的内存,或者释放已经被重新分配过的内存,就会导致重复释放错误. 内存泄漏: 不再使用的内存,并没有释放,或者忘记释放,导致内存没有得到回收利用。 忘记调用delete 随着多线程程序的广泛使用,为了避免出现上述问题,c++提供了智能指针,并且c++11对c++98版本的智能指针进行了修改,以应对实际的应用需求。 2. 智能指针 在98版本提供的 auto_ptr 在 c++11得到删除,原因是拷贝是返回左值、不能调用delete[] 等。 c++11标准改用 unique_ptr | shared_ptr | weak_ptr 等指针来自动回收堆中分配的内存。智能指针的用法和原始指针用法一样,只是它多了些释放回收的机制罢了。 智能指针位于 头文件中

流状态和c++的异常处理

混江龙づ霸主 提交于 2020-02-13 04:14:21
出来混迟早是要还的系列(误)。 在学习OpenGL的时候,遇到了一些语言上的障碍(可以读懂,但是不知道具体用法),因此补了一下相关知识。 源代码如下: std::ifstream vShaderFile; vShaderFile.exceptions(std::ifstream::failbit|std::ifstream::badbit); try { //...这里没有throw语句 } catch(std::ifstream::failure e) { std::cout<<"ERROR::SHADER::FILE_NOT_SUCCESFULLY_READ"<<std::endl; } 先从简单的讲起,也就是try......catch......语句。 我们知道,对于一些异常(exception) c++自己不会处理,当运行程序遇到异常的时候也只会崩溃(crash),因此我们需要手动去捕获异常(当然这建立在你知道哪个代码块可能会出现异常的情况),手动捕获异常就需要这个try......catch......语句。 它们的分工是这样的:try负责检测语句块,catch负责去捕获这个异常,这就好比catch告诉try,你去检测一下你那边的语句块有没有异常,有的话告诉我,我来搞定,没有的话就别来烦我。。。另外值得一提的是,在try语句块中,发生异常的语句之后的语句都不会被执行到

c++中的Exceptions异常处理(翁恺c++公开课[36])

让人想犯罪 __ 提交于 2020-02-13 01:47:52
Exceptions用于处理Run-time Error; //文件读取的异常捕获伪代码 try{ open the file; determine its size; allocate that much memory; read the file into memory; close the file; }catch(fileOpenFailed){ doSomething; }catch(sizeDeterMinationFailed){ doSomething; }catch(memoryAllocationFailed){ doSomething; }catch(readFailed){ doSomething; }catch(fileCloseFailed){ doSomething; } 异常,让函数发现有自己无法处理的错误时抛出一个异常 来源: https://www.cnblogs.com/go-ahead-wsg/p/12150226.html

异常处理总结

喜欢而已 提交于 2020-02-11 01:00:07
一,异常和错误 part1:程序中难免出现错误,而错误分成两种 1.语法错误(这种错误,根本过不了python解释器的语法检测,必须在程序执行前就改正) #语法错误示范一 if #语法错误示范二 def test: pass #语法错误示范三 print(haha 语法错误 语法错误 2.逻辑错误(逻辑错误) #用户输入不完整(比如输入为空)或者输入非法(输入不是数字) num=input(">>: ") int(num) #无法完成计算 res1=1/0 res2=1+'str' 逻辑错误 part2:什么是异常 异常就是程序运行时发生错误的信号,在python中,错误触发的异常如下 part3:python中的异常种类 在python中不同的异常可以用不同的类型(python中统一了类与类型,类型即类)去标识,不同的类对象标识不同的异常,一个异常标识一种错误 # 触发IndexError l=['egon','aa'] l[3] # 触发KeyError dic={'name':'egon'} dic['age'] #触发ValueError s='hello' int(s) 错误举例 AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x IOError 输入/输出异常;基本上是无法打开文件 ImportError 无法引入模块或包

Java异常处理之捕获异常

纵饮孤独 提交于 2020-02-10 16:33:22
目录 一、try-catch语句 1.try代码块 2.catch代码块 二、多catch代码块 三、try-catch语句嵌套 四、多重捕获 1.为什么使用多重捕获 2.如何使用多重捕获 一、try-catch语句 捕获异常是通过try-catch语句实现的,最基本try-catch语句语法如下: try { //可能会发生异常的语句 } catch ( Throwable e ) { //处理异常e } 1.try代码块 try代码块中应该包含执行过程中可能会发生异常的语句。 一条语句是否有可能发生异常,这要 看语句中调用的方法。 如下: public Date parse ( String source ) throws ParseException 方法后面的throws ParseException说明:当调用parse()方法时有可以能产生ParseException异常。 提示 :静态方法、实例方法和构造方法都可以声明抛出异常,凡是抛出异常的方法都可以 通过try-catch进行捕获,当然运行时异常可以不捕获。一个方法声明抛出什么样的异常需要 查询API文档。 2.catch代码块 每个try代码块可以伴随一个或多个catch代码块,用于处理try代码块中所可能发生的多种异常。 catch(Throwable e)语句中的e是捕获异常对象

2018年4月19日JAVA

断了今生、忘了曾经 提交于 2020-02-10 09:13:12
异常 异常处理机制能让程序在异常发生时,按照代码的预先设定的异常处理逻辑,针对性地处理异常,让程序尽最大可能恢复正常并继续执行,且保持代码的清晰。 Java中的异常可以是函数中的语句执行时引发的,也可以是程序员通过throw 语句手动抛出的,只要在Java程序中产生了异常,就会用一个对应类型的异常对象来封装异常,JRE就会试图寻找异常处理程序来处理异常。 Throwable类是Java异常类型的顶层父类,一个对象只有是 Throwable 类的(直接或者间接)实例,他才是一个异常对象,才能被异常处理机制识别。JDK中内建了一些常用的异常类,我们也可以自定义异常。 Java异常的分类和类结构图 Java标准库内建了一些通用的异常,这些类以Throwable为顶层父类。 Throwable又派生出Error类和Exception类。 错误:Error类以及他的子类的实例,代表了JVM本身的错误。错误不能被程序员通过代码处理,Error很少出现。因此,程序员应该关注Exception为父类的分支下的各种异常类。 异常:Exception以及他的子类,代表程序运行时发送的各种不期望发生的事件。可以被Java异常处理机制使用,是异常处理的核心。 总体上我们根据Javac对异常的处理要求,将异常类分为2类。 非检查异常(unckecked exception):Error 和

Java基础--异常处理

≡放荡痞女 提交于 2020-02-10 07:33:00
1.异常的传统处理方式 缺点 : [1] 通过判断影响执行效率。 [2] 判断逻辑和业务逻辑交织在一起,可维护性很差。 1 public class Test01 { 2 public static void main(String[] args) { 3 Scanner sc = new Scanner(System.in); 4 System.out.println("请输入第一个数:"); 5 6 int num1 = 0; 7 if(sc.hasNextInt()) { 8 num1 = sc.nextInt(); 9 10 System.out.println("请输入第二个数:"); 11 int num2 = 0; 12 if(sc.hasNextInt()) { 13 num2 = sc.nextInt(); 14 15 if(0 == num2) { 16 System.out.println("除数不能为0!"); 17 }else { 18 int r = num1 / num2; 19 System.out.println("num1/num2 = "+r); 20 } 21 22 }else { 23 System.out.println("第二个数输入不是数字"); 24 } 25 26 }else { 27 System.out.println(

JAVA异常

扶醉桌前 提交于 2020-02-09 03:34:27
throw关键字 /** * throw关键字 * 作用: * 可以使用throw关键字在指定的方法中抛出指定的异常 * 使用格式: * throw new xxxException("异常产生的原因"); * 注意: * 1.throw关键字必须写在方法内部 * 2.throw关键字后边new的对象必须是Exception或者Exception的子类对象 * 3.throw关键字抛出指定的异常对象,我们就必须处理这个异常对象 * throw关键字后边创建的是RuntimeException或者RuntimeException的子类对象,我们可以不处理,默认交给JVM处理(打印异常对象,中断程序) * throw关键字后边创建的是编译异常(写代码的时候报错),我们就必须处理这个异常,要么throws,要么try...catch */ public class Demo03Throw { public static void main ( String [ ] args ) { //int[] arr=null; int [ ] arr = new int [ 3 ] ; int e = getElement ( arr , 3 ) ; System . out . println ( e ) ; } /* 在工作中我们必须对方法传递过来的参数进行合法性校验 如果参数不合适

java之异常

房东的猫 提交于 2020-02-09 03:22:54
异常处理是程序设计中一个非常重要的方面,也是程序设计的一大难点,当我学习了Java异常机制后,才意识到从C开始,我就在使用异常机制了,知道如何去用if...else...来控制异常了,然而同一个异常或者错误如果多个地方出现,那么每个地方都要做相同处理,感觉相当的麻烦!因此基于OOP思想,Java语言在设计的当初就考虑到这些问题,提出了异常处理的框架的方案,所有的异常都可以用一个类型来表示,不同类型的异常对应不同的子类异常(这里的异常包括错误概念),定义异常处理的规范。 天有不测风云,人有旦夕祸福,Java的程序代码也如此。在编程过程中,首先应当尽可能去避免错误和异常发生,对于不可避免、不可预测的情况则在考虑发生异常时如何处理。    Java中的异常用对象来表示。Java对异常的处理是按异常分类处理的,不同异常有不同的分类,每种异常都对应一个类型(class),每个异常都对应一个异常类的对象。异常有两个来源,一是Java语言本身定义的一些基本异常类型,二是用户通过继承Exception类或者其子类自己定义的异常,即在方法体中,new一个Excption对象抛出。 异常的对象也有两个来源,一是Java运行时环境自动抛出系统生成的异常,而不管你是否愿意捕获和处理,它总要被抛出!比如创建文件时可能有不正确的路径的异常。二是程序员自己抛出的异常,这个异常可以是程序员自己定义的

【JVM虚拟机】(9)-- JVM是如何处理异常的

試著忘記壹切 提交于 2020-02-08 23:07:20
JVM是如何处理异常的 上篇博客我们简单说过 异常信息是存放在属性表集合中的Code属性表里 ,那么这篇博客就单独讲Code属性表中的exception_table。 在讲之前我们先思考两个问题? 1、为什么捕获异常会较大的性能消耗? 2、为什么finally中的代码会永远执行? 接下来会从JVM虚拟机的角度来解答这两个问题。 一、概念 1、JVM是如何捕获异常的? 1、编译而成的字节码中,每个方法都附带一个 异常表 。 2、异常表中每一个条目代表一个 异常处理器 3、触发异常时,JVM会遍历异常表,比较触发异常的字节码的索引值是否在异常处理器的 from指针到to指针 的范围内。 4、范围匹配后,会去比较 异常类型和异常处理器中的type是否相同 。 5、类型匹配后,会跳转到 target指针所指向的字节码 (catch代码块的开始位置) 6、如果没有匹配到异常处理器,会弹出当前方法对应的 Java栈帧 ,并对调用者重复上述操作。 2、什么是异常表? 1. 每个方法都附带一个异常表 2. 异常表中每一个条目, 就是一个异常处理器 异常表如下: 3、什么是异常处理器?其组成部分有哪些? 1、异常处理器由from指针、to指针、target指针,以及所捕获的异常类型所构成(type)。 2、这些指针的数值就是字节码的索引(bytecode index, bci),可以直接去定位字节码