首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【007期】JavaSE面试题(七):异常

什么时候执行,return前还是return后? 如果try中有return语句, 那么finally代码还是会执⾏。...因为return表示的是要整个方法体返回, 所以,finally语句会在return之前执⾏。...代码走到第 3 行的时候遇到了一个 MathException,这时第四行的代码就不会执行了,代码直接跳转到 catch语句中,走到第 6 行的时候,异常机制有这么一个原则如果在 catch 遇到了...return 或者异常等能使该函数终止的话那么有 finally 就必须先执行完 finally 代码里面的代码然后再返回值。...因此代码又跳到第 8 行,可惜第 8 行是一个return 语句,那么这个时候方法就结束了,因此第 6 行的返回结果就无法被真正返回

38410
您找到你想要的搜索结果了吗?
是的
没有找到

JAVA异常处理实战心得

尤其是各种服务相关的代码可能正常业务逻辑的代码量很少,大部分都是各种try catch处理各种异常的代码,因为实际异常情况很多,为了保证服务的健壮与稳定性,要尽可能考虑与处理掉各种异常情况。... finally 代码,可以运行清理类型等收尾善后性质的语句。比如关闭数据库连接、断开网络连接和关闭磁盘文件等。 throw: 用来抛出异常。...如果try里面有个return语句,try 后的 finally{} 里的 code 会在方法返回调用者前被执行。 什么意思呢?总结起来一句话:finally改变返回值的做法是不好的。...因为如果存在finally代码,try的return语句不会立马返回调用者,而是记录下返回值待finally代码执行完毕之后再向调用者返回其值,然后如果在finally修改了返回值,就会返回修改后的值...,try的return语句依然会返回进入finally之前保留的值。

50220

Conscript_const let var

上面代码代码之中,分别用let和var声明了两个变量。然后代码之外调用这两个变量,结果let声明的变量报错,var声明的变量返回了正确的值。这表明,let声明的变量只它所在的代码有效。...ES6 规定暂时性死区和let、const语句不出现变量提升,主要是为了减少运行时错误,防止变量声明前就使用这个变量,从而导致意料之外的行为。...为什么需要级作用域?...因为级作用域内声明的函数类似于let,对作用域之外没有影响。但是,如果你真的 ES6 浏览器运行一下上面的代码,是会报错的,这是为什么呢?...同一段代码为了能够各种环境,都能取到顶层对象,现在一般是使用this关键字,但是有局限性。 全局环境,this会返回顶层对象。

38120

let 和 const 命令

然后代码之外调用这两个变量,结果let声明的变量报错,var声明的变量返回了正确的值。这表明,let声明的变量只它所在的代码有效。 for循环的计数器,就很合适使用let命令。...使用let声明变量时,只要变量还没有声明完成前使用,就会报错。上面这行就属于这个情况,变量x的声明语句还没有执行完成前,就去取x的值,导致报错”x 未定义“。...ES6 规定暂时性死区和let、const语句不出现变量提升,主要是为了减少运行时错误,防止变量声明前就使用这个变量,从而导致意料之外的行为。...因为级作用域内声明的函数类似于let,对作用域之外没有影响。但是,如果你真的 ES6 浏览器运行一下上面的代码,是会报错的,这是为什么呢?...同一段代码为了能够各种环境,都能取到顶层对象,现在一般是使用this变量,但是有局限性。 全局环境,this会返回顶层对象。但是,Node 模块和 ES6 模块,this返回的是当前模块。

94620

【Java学习笔记之三十三】详解Javatry,catch,finally的用法及分析

程序会在throw语句后立即终止,它后面的语句执行不到,然后包含它的所有try可能在上层调用函数)从里向外寻找含有与其匹配的catch子句的try。...如果在你的代码中期望通过捕捉被调用的下级函数的异常来给定返回值,那么一定要注意你所调用的下级函数的finally语句,它有可能会使你throw出来的异常并不能真正被上级调用函数可见的。...-->某些表达式的计算也可能从java虚拟机抛出异常,这些表达式在上一小节已经总结过了;一个显式的的throw语句也将导致异常的抛出。...按照第一段代码的解释,先进行try{}语句,然后return之前把当前的t的值try保存到一个变量t',然后执行finally语句,修改了变量t的值,返回变量t。...首先程序执行try语句返回执行,执行finally语句,finally语句抛出NPE异常,整个结果返回NPE异常。

7.7K112

分享丨CC++内存管理详解--堆、栈

他分配的是一栈内存,所以这句话的意思就是:栈内存存放了一个指向一堆内存的指针p。...程序会先确定在堆中分配内存的大小,然后调用operator new分配内存,然后返回这块内存的首地址,放入栈,他VC6下的汇编代码如下: 00401028 push 14h 0040102A call...特别是for循环语句中,循环次数很容易搞错,导致数组操作越界。 忘记了释放内存,造成内存泄露。含有这种错误的函数每被调用一次就丢失一内存。刚开始时系统的内存充足,你看不到错误。...从语法上看,编译器并不觉得语句p[0]= ‘X’有什么不妥,但是该语句企图修改常量字符串的内容而导致运行错误。...无论什么时候调用GetString2,它返回的始终是同一个“只读”的内存。 杜绝“野指针” “野指针”不是NULL指针,是指向“垃圾”内存的指针。

97921

【Java】try-catch-finally语句中return的执行顺序思考

finall语句也有return语句的话,那么直接从finally返回了,这也是不建议finallyreturn的原因。 ...:3  总结  1、不管有没有出现异常,finally代码都会执行;  2、当try和catch中有return时,finally仍然会执行;  3、finally是return后面的表达式运算之后执行的...;  对于含有return语句的情况,这里我们可以简单地总结如下:   try语句返回前,将其他所有的操作执行完,保留好要返回的值,而后转入执行finally语句,而后分为以下三种情况:  情况一...对该基本数据的改变不起作用,try的return语句依然会返回进入finally之前保留的值。...2)如果return的数据是引用数据类型,而在finally对该引用数据类型的属性值的改变起作用,try的return语句返回的就是finally改变后的该属性的值。

68920

Java finally 语句到底是 return 之前还是之后执行?

1 finally语句return语句执行之后return返回之前执行的 2 finally的return语句会覆盖try的return返回 3 如果finally语句中没有return语句覆盖返回值...,那么原来的返回可能因为finally里的修改而改变也可能不变 4 try里的return语句异常的情况下不会被执行,这样具体返回哪个看情况 5 当发生异常后,catch的return执行情况与未发生异常时...这就是Java到底是传值还是传址的问题了,简单来说就是:Java只有传值没有传址,这也是为什么map = null这句不起作用。...当然只有异常的情况下才有可能会执行,那么是finally之前就返回吗?看下面。...6 最后总结 finally语句try或catch的return语句执行之后返回之前执行且finally里的修改语句可能影响也可能不影响try或catch return已经确定的返回值,若finally

1.2K10

React 语法之let和const命令

然后代码之外调用这两个变量,结果let声明的变量报错,var声明的变量返回了正确的值。这表明,let声明的变量只它所在的代码有效。 for循环的计数器,就很合适使用let命令。...又声明了一个局部变量tmp,导致后者绑定这个级作用域,所以let声明变量前,对tmp赋值会报错。...typeof undeclared_variable // "undefined" 上面代码,undeclared_variable是一个不存在的变量名,结果返回“undefined”。...function bar(x = y, y = 2) { return [x, y]; } bar(); // 报错 上面代码,调用bar函数之所以报错(某些实现可能不报错),是因为参数x默认值等于另一个参数...const foo = Object.freeze({}); // 常规模式时,下面一行不起作用; // 严格模式时,该行会报错 foo.prop = 123; 上面代码,常量foo指向一个冻结的对象

6.3K60

MySQL数据库,详解MySQL缓存机制

一、MySQL缓存规则 1.开启了缓存,MySQL Server会自动将查询语句和结果集返回到内存,下次再查直接从内存取; 2.缓存的结果是通过sessions共享的,所以一个client查询的缓存结果... 5.1 之后会得到改善。 5.where条件如包含任何一个不确定的函数将永远不会被cache, 比如current_date, now等。...9.执行SQL里有触发器,自定义函数时,MySQL缓存也是不起作用的 二、缓存失效 表的结构或数据发生改变时,查询缓存的数据不再有效。...当查询结果需要缓存的时候,先从空闲申请一个数据为参数query_cache_min_res_unit配置的空间,即使缓存数据很小,申请数据也是这个,因为查询开始返回结果的时候就分配空间,此时无法预知结果多大...分配内存需要先锁住空间,所以操作很慢,MySQL会尽量避免这个操作,选择尽可能小的内存,如果不够,继续申请,如果存储完时有空余则释放多余的。

4.2K10

Java finally语句到底是return之前还是之后执行?

2. finally的return语句会覆盖try的return返回。...这就是Java到底是传值还是传址的问题了,简单来说就是:Java只有传值没有传址,这也是为什么map = null这句不起作用。...4. try里的return语句异常的情况下不会被执行,这样具体返回哪个看情况。...当然只有异常的情况下才有可能会执行,那么是finally之前就返回吗?看下面。 5. 当发生异常后,catch的return执行情况与未发生异常时tryreturn的执行情况完全一样。...最后总结 finally语句try或catch的return语句执行之后返回之前执行且finally里的修改语句可能影响也可能不影响try或catch return已经确定的返回值,若finally

77520

Java finally语句到底是return之前还是之后执行?

finally的return语句会覆盖try的return返回。...这就是Java到底是传值还是传址的问题了,具体请看精选30道Java笔试题解答,里面有详细的解答,简单来说就是:Java只有传值没有传址,这也是为什么map = null这句不起作用。...try里的return语句异常的情况下不会被执行,这样具体返回哪个看情况。...当然只有异常的情况下才有可能会执行,那么是finally之前就返回吗?看下面。 当发生异常后,catch的return执行情况与未发生异常时tryreturn的执行情况完全一样。...最后总结: finally语句try或catch的return语句执行之后返回之前执行且finally里的修改语句可能影响也可能不影响try或catch return已经确定的返回值,若finally

79820

es6的Let和Const详解

也就是说,所有数组a的成员里面的i,指向的都是同一个i,导致运行时输出的是最后一轮的i的值,也就是 10。 如果使用let,声明的变量仅在级作用域内有效,最后输出的是 6。...,利用 let 声明一个变量的时候,的开始部分到该变量的声明语句之间,我们称之为临时性死区,你不可以在这个区域内使用该变量,直到遇到其 let 语句为止 只要在同一作用域内存在let命令,他所声明的变量就...凡是声明之前就使用这些变量,就会报错。 总之,代码内,使用let命令声明变量之前,该变量都是不可用的。...使用let声明变量时,只要变量还没有声明完成前使用,就会报错。上面这行就属于这个情况,变量x的声明语句还没有执行完成前,就去取x的值,导致报错”x 未定义“。...const foo = Object.freeze({}); // 常规模式时,下面一行不起作用; // 严格模式时,该行会报错 foo.prop = 123; 上面代码,常量 foo指向一个冻结的对象

52930

常见的C编程段错误及对策

但是我们要知道,assert 宏只是帮助我们调试代码用的,它的一切作用就是让我们尽可能调试函数的时候把错误排除掉,而不是等到Release 之后。它本身并没有除错功能。...这样的话将导致p1 字符串中最后一个空字符“\0”没有被拷贝到p2 。...他很自然的定义了一个结构体变量,然后把他想要的字库代码赋值给了相关的变量。但是,问题就来了,不管怎么调试,他所需要的这种字体效果总是不出来。我检查了他的代码之后,没有发现什么问题,于是单步调试。...既然malloc 函数申请内存有不成功的可能,那我们使用指向这块内存的指针时,必须用if(NULL != p)语句来验证内存确实分配成功了。...= p)语句校验将不起作用。 4、内存释放 既然有分配,那就必须有释放。不然的话,有限的内存总会用光,而没有释放的内存却在空闲。与malloc 对应的就是free 函数了。

1.4K41

PHP技巧和窍门来简化你的代码

实际上,代码中使用else和else if是没错的,但是,某些情况下,这些变得多余。...当在函数中使用return时,return语句下面的任何代码都将被完全忽略,因此,如果 user_is_male为true,则else将被忽略,因为返回了值。...if/else甚至使用技巧1的示例,您可能会遇到以下情况:一个(不管为if或else)的代码少于另一个。 在这种情况下,最好先用较少的代码处理该。 让我们看一个真实的例子。...为什么? 如果将“ chair”传递到函数,它将被评估为allItems()["c"],最终将导致错误,使您在12am起床。...谢谢阅读 这些是我PHP之旅中发现的一些技巧和窍门,其中一些可能对您有用,而另一些则可能不起作用,请随时选择自己喜欢的并坚持使用。

3.1K40

学习下隔壁的异常处理通关指南

Java会将异常相关信息封装在一个异常类的实例,上面 catch 代码 ex 变量就是指向这个异常实例的引用。...上面的程序有两个tray catch ,可以看到两个try语句都有问题,第一个是数组索引越界(数组长度为1索引只有0),第二个是字符串索引的越界。...Java 强制要求程序的方法通过 try catch 语句捕获处理它,或者是用 throws 语句抛出它给外层,否则编译不会通过。这类异常一般是由程序的运行环境导致的。...以及抛出自己代码的异常。 可以使用 throws 关键字方法上声明方法可能会抛出的异常,抛出的异常类型可以是实际异常的父类或者本身。...无论finally 代码怎么样,返回的值都不会改变,仍然是之前return语句中保存的值,所以我们不要再 finally 的代码里尝试修改要 return 给调用者的返回值。

24320

Python学习笔记(八)——错误、调试、测试

ZeroDivisionError as e: print('except:', e) finally: print('finally...') print('END') 当我们认为某些代码可能会出错时...,就可以用try来运行这段代码,如果执行出错,则后续代码不会继续执行,而是直接跳转至错误处理代码,即except语句,执行完except后,如果有finally语句,则执行finally语句,至此...此外,如果没有错误发生,可以except语句后面加一个else,当没有错误发生时,会自动执行else语句: try: print('try...')...raise bar() bar()函数,我们明明已经捕获了错误,但是,打印一个ValueError!后,又把错误通过raise语句抛出去了,这不有病么?...设想你的测试需要启动一个数据库,这时,就可以setUp()方法连接数据库,tearDown()方法关闭数据库,这样,不必每个测试方法重复相同的代码: class TestDict(unittest.TestCase

75920
领券