finally语句块与return的执行关系
- 格式:doc
- 大小:37.50 KB
- 文档页数:5
Java⽇常练习题,每天进步⼀点点(60)⽬录1、假设 A 类有如下定义,设 a 是 A 类同⼀个包下的⼀个实例,下列语句调⽤哪个是错误的?()2、Java中基本的编程单元为:3、下列代码的执⾏结果是:()4、给定以下JAVA代码,这段代码运⾏后输出的结果是()5、以下哪⼀项正则能正确的匹配⽹址: /video/av21061574 ()6、下列关于异常处理的描述中,错误的是()。
7、以下哪项不属于java类加载过程?8、对于⽂件的描述正确的是()9、有关hashMap跟hashtable的区别,说法正确的是?10、java中 String str = "hello world"下列语句错误的是?答案汇总:总结承蒙各位厚爱,我们⼀起每天进步⼀点点!(⿏标选中空⽩处查看答案)1、假设 A 类有如下定义,设 a 是 A 类同⼀个包下的⼀个实例,下列语句调⽤哪个是错误的?()class A{ int i; static String s; void method1() { } static void method2() { } }正确答案:CA System.out.println(a.i);B a.method1();C A.method1();D A.method2()题解:1、⾮静态⽅法只能通过实例对象来调⽤,不能直接通过类名调⽤。
静态⽅法(static)才能通过类名直接调⽤.2、类中变量:除了private权限外,其他权限的变量(没有表⽰默认default),均可以⽤“对象.变量名”来调⽤。
对于private变量,即使使⽤static,也不能⽤“类.变量名”来调⽤私有变量。
只能通过类中的public get()⽅法来调⽤。
类中⽅法:除了private权限外,其他权限的⽅法(没有表⽰默认default),均可以⽤“对象.⽅法名”来调⽤。
private ⽅法可以⽤java反射机制调⽤。
JAVA中try、catch、finally带return的执⾏顺序总结 异常处理中,try、catch、finally的执⾏顺序,⼤家都知道是按顺序执⾏的。
即,如果try中没有异常,则顺序为try→finally,如果try中有异常,则顺序为try→catch→finally。
但是当try、catch、finally中加⼊return之后,就会有⼏种不同的情况出现,下⾯分别来说明⼀下。
也可以跳到最后直接看总结。
⼀、try中带有return1private int testReturn1() {2int i = 1;3try {4 i++;5 System.out.println("try:" + i);6return i;7 } catch (Exception e) {8 i++;9 System.out.println("catch:" + i);10 } finally {11 i++;12 System.out.println("finally:" + i);13 }14return i;15 }输出:try:2finally:32 因为当try中带有return时,会先执⾏return前的代码,然后暂时保存需要return的信息,再执⾏finally中的代码,最后再通过return返回之前保存的信息。
所以,这⾥⽅法返回的值是try中计算后的2,⽽⾮finally中计算后的3。
但有⼀点需要注意,再看另外⼀个例⼦:1private List<Integer> testReturn2() {2 List<Integer> list = new ArrayList<>();3try {4 list.add(1);5 System.out.println("try:" + list);6return list;7 } catch (Exception e) {8 list.add(2);9 System.out.println("catch:" + list);10 } finally {11 list.add(3);12 System.out.println("finally:" + list);13 }14return list;15 }输出:try:[1]finally:[1, 3][1, 3] 看完这个例⼦,可能会发现问题,刚提到return时会临时保存需要返回的信息,不受finally中的影响,为什么这⾥会有变化?其实问题出在参数类型上,上⼀个例⼦⽤的是基本类型,这⾥⽤的引⽤类型。
java中return用法主题:Java中return用法简介:在Java中,return关键字用于在一个方法中返回值。
它具有许多用途,包括返回数据、终止方法、跳转控制流以及进行异常处理。
本文将为你详细解释Java 中return关键字的使用方法和其对程序的影响。
内容:一、返回值1.1 返回基本类型值1.2 返回引用类型值二、终止方法2.1 返回void类型2.2 返回其他类型三、控制流3.1 结束当前循环3.2 结束当前方法3.3 结束当前线程四、异常处理4.1 使用return终止方法遇到的异常4.2 使用return返回异常信息五、其他用途5.1 返回null值5.2 返回默认值六、注意事项6.1 方法中的多个return语句6.2 finally代码块和return语句的关系一、返回值1.1 返回基本类型值在Java中,我们可以使用return关键字将基本类型值返回给调用者。
例如,一个计算两个整数和的方法可以定义如下:javapublic int add(int a, int b) {return a + b;}1.2 返回引用类型值同样,我们也可以使用return关键字返回引用类型的值。
例如,一个返回数组的方法可以定义如下:javapublic int[] createArray() {int[] array = new int[5];填充数组的逻辑...return array;}二、终止方法2.1 返回void类型如果一个方法的返回类型是void,意味着它不返回任何值。
那么使用return关键字会直接终止该方法的执行。
例如:javapublic void printHello() {System.out.println("Hello");return; 可省略下面的代码不会被执行System.out.println("World");}2.2 返回其他类型如果一个方法的返回类型不是void,并且在代码中出现return关键字,那么该方法必须返回一个与返回类型匹配的值。
javareturn用法JavaReturn:一种有助于简化程序的强大工具!Java return,是一个Java语言的返回方法,任何Java函数在运行完成后都可以使用它来明确反馈结果。
本文将介绍Java return的用法及其功能、使用语法示例及Java returnfinally块中使用return方法等内容。
一、Java return 的用法1.用途Java return 语句可以从执行方法的地方返回,并提供一个结果给调用者。
也就是使用 Java return 语句时,可以结束当前函数,并让当前函数返回一个结果。
2.特点(1)Java return 语句可以从方法中直接返回结果,或者再次调用当前模型。
(2)对于Void类型的方法,Java return语句可以用于结束当前函数的执行。
(3)如果某个方法具有多个return语句,那么最后调用的return语句将作为结果返回,并且终止函数的执行。
二、Java return 语法示例以下是一个经典的 Java return 语法示例:```// Java static return 语句public static int getMax(int a, int b){int max;if(a > b) {max = a;} else {max = b;}return max;}```上述例子中,max变量是在if语句中定义的,最后一行return,就是返回结果,结束程序的执行。
三、Java return finally块中使用在finally块中也可以使用 Java return 语句,但是应该避免。
在finally 块中使用return可能会产生大量的冗余代码,其结果可能并不是想象中的那样,此时应该尽量避免使用return语句。
四、总结综上所述,Java return 指的是在Java语言中的一个返回方法,用以明确反馈结果。
它的用法重点包括具有以下特点:可用于从方法中返回结果,可用于void类型的方法,最后被调用的return语句将会作为结果返回,但是它在finally块中并不好用,应尽量避免。
try-catch-finally语句的说明
try-catch-finally语句是一种异常处理机制,用于捕获和处理代
码中可能发生的异常。
它由三个部分组成:try、catch和finally。
1. try:try块中包含了可能抛出异常的代码。
如果try块中的代码正常执行,即没有抛出异常,那么将跳过catch块,直接执
行finally块。
但是,如果try块中的代码抛出了异常,那么后
续的代码将不会被执行,而是跳转到catch块。
2. catch:catch块用于捕获和处理try块中抛出的异常。
在
catch块中,可以定义一个或多个catch子句,每个catch子句
处理一种类型的异常。
当捕获到匹配的异常类型时,相应的catch子句将被执行。
如果没有匹配的catch子句,异常将被传
递给上一级调用栈。
3. finally:finally块中的代码无论是否发生异常,都会被执行。
finally块通常用于执行清理操作,例如关闭打开的文件或释放
资源。
即使在try块中使用了return语句来退出方法,finally
块中的代码也会被执行。
总结:try-catch-finally语句允许我们在代码中捕获和处理异常,确保程序的正常执行,在发生异常时执行相应的操作,并在方法返回之前执行必要的清理操作。
finally的用法搭配一级标题:finally的用法搭配二级标题1:finally的基本用法和作用在编程语言中,finally是一个关键字,常常与try和catch连用,用于处理异常情况。
当我们使用try块捕获异常时,可以在finally块中编写一些必须执行的代码。
不论是否发生异常,最终都会执行finally代码块中的内容。
finally块通常被用于清理资源或确保特定操作无论发生什么情况下都会被执行。
这有助于避免资源泄露和进行必要的清理工作。
二级标题2:try-catch-finally的搭配try-catch-finally是一种结构,在处理可能引发异常的代码片段时很有用。
下面是它们之间的基本搭配:```javatry {// 可能引发异常的代码} catch (ExceptionType1 e) {// 处理ExceptionType1类型异常的代码} catch (ExceptionType2 e) {// 处理ExceptionType2类型异常的代码} finally {// 必须执行的清理或收尾工作}```上述示例中,首先尝试执行"可能引发异常的代码"。
如果在此过程中抛出了ExceptionType1类型的异常,则catch子句将处理该异常;如果抛出了ExceptionType2类型的异常,则相应地处理。
无论是否发生了异常,而且无论catch块内是否捕获了异常,都会执行finally 块中的代码。
这使得无论异常如何处理,我们都可以确保特定代码段的执行。
二级标题3:finally用于资源释放和清理finally块通常被用于关闭打开的资源,如文件、数据库连接等。
由于资源在使用完毕后需要进行释放或清理操作,因此将这些代码放在finally块中是一个良好的做法。
例如,在Java中使用了try-with-resources语句:```javatry (Resource resource = new Resource()) {// 使用资源的代码} catch (Exception e) {// 处理可能发生的异常}```不管发生什么情况,当try块中的代码执行完毕后,系统会自动调用resource 对象上的close()方法来关闭该资源。
java中异常处理中return的用法关于try、catch、finally语句块中含有return语句的几点说明:1、第一种情况:try块有return语句,catch块没有return,函数末尾也没有return:看代码:import java.util.*;public class demo{public static void main(string args[]){int num = 10;test(num);}public static int test(int b){try{b += 10;return b;}catch(exception e){}finally{}}}编译结果:h:\java demo>javac demo.javademo.java:18: 缺少返回语句}^1 错误有人可能会说,我在try块中不是有return语句吗?为什么会提示缺少return语句呢?这是因为编译器认为try块中是又可能产生异常操作的,也就是说在return语句之前如果出现异常的话,那么return语句根本没有机会得到执行,所以编译器会认为缺少return语句。
解决办法:a、在catch块中加入return语句,因为一旦出现异常,catch中的语句可以保证函数会有一个返回值b、在finally块中加入return语句,同样只要系统不退出,finally语句块会始终得到执行的代码:import java.util.*;public class demo{public static void main(string args[]){int num = 10;system.out.println(test(num));}public static int test(int b){try{b += 10;return b;}catch(exception e){}finally{ return 0;}}}c、在函数末尾加入return语句代码:import java.util.*;public class demo{public static void main(string args[]){int num = 10;system.out.println(test(num));}public static int test(int b){ try{b += 10;return b;}catch(exception e){}finally{}return 0;}}2、第二种情况,看代码:import java.util.*;public class demo{public static void main(string args[]){int num = 10;system.out.println(test(num));}public static int test(int b){try{b += 10;}return 0;}}结果:h:\java demo>javac demo.javademo.java:8: try 不带有 catch 或 finallytry{^1 错误说明:也就是说,如果有try语句的话,可以有catch语句,没有finally语句,但是如果没有catch语句的话,那么一定要有finally语句。
try⾥有return,finally⾥还会执⾏吗?
经常⽤到try catch finally 结构,遇到return 具体执⾏顺序是啥样的?
finnaly 经常被⽤在需要释放资源的情况下去使⽤,最终⼀定要执⾏⼀下,但是有两种情况,finally 代码块也不会被执⾏
1 程序在进⼊try之前就异常了,就直接结束了,不会进⼊finally。
2 try中遇到强制退出的情况(⽐如 exit),也不会进⼊finally 执⾏。
正题解答:
try中有return, 会先将值暂存,⽆论finally语句中对该值做什么处理,最终返回的都是try语句中的暂存值。
当try和finally⾥都有return时,会忽略try的return,⽽使⽤finally的return。
根据:JVM规范:
If the try clause executes a return, the compiled code does the following:
1. Saves the return value (if any) in a local variable.
2. Executes a jsr to the code for the finally clause.
3. Upon return from the finally clause, returns the value saved in the local variable.。
finally的用法一、了解finally关键字的作用与用法在编程领域中,finally是一个常见的关键字。
它通常与try和catch结构一起使用,用于处理异常情况和资源的释放。
在本文中,将探讨finally关键字在不同编程语言中的用法,以及如何正确使用它来优化代码。
二、finally的基本语法无论try块是否出现异常,finally块中的代码都会被执行。
finally块位于try-catch语句的末尾,并且是可选的。
下面以Java为例,具体说明finally的基本语法:```try {// 可能出现异常的代码} catch(Exception e) {// 异常处理逻辑} finally {// 无论是否出现异常都会执行的代码}```三、为什么要使用finally?1. 保证资源释放:有些操作可能会涉及到打开文件、数据库连接等需要手动关闭或释放资源的情况。
如果没有正确地处理这些资源,在发生异常时可能导致资源泄露及其他问题。
2. 提供清理机会:有些情况下,在try块中执行完一系列操作后,不管是否抛出异常,需要进行额外的操作或清理工作。
比如关闭网络连接、删除临时文件等。
3. 确保最终执行:即使在catch块内部抛出新异常或在try块中使用了return语句,finally块中的代码也会被执行。
这样可以确保最终要执行的逻辑得到执行,避免因为异常或提前返回而导致未完成的操作。
四、finally关键字的具体应用过程1. 释放资源:利用finally关键字可以确保资源被正确释放。
例如,在Java中打开文件读取数据时,可能会出现文件无法打开等异常情况。
通过在finally块中关闭文件流,即使出现异常,也能够保证文件锁定和资源释放。
2. 数据库连接管理:在数据库相关操作中,通常需要手动建立数据库连接,并且必须在使用完毕后关闭连接。
如果不正确处理异常或手动关闭连接,则可能导致数据库连接池耗尽或造成性能问题。
3. 清理工作:有时候需要进行一些清理工作来确保系统正常运行。
这是一道Java面试题:try{ }里有一个return语句,那么紧跟在这个try后的finally{}里的code会不会被执行,什么时候被执行,在return前还是后?(如果try后面有个catch块,里面有return语句,那么finally语句会不会执行?)
finally语句块的作用就是为了保证无论出现什么情况,一定要执行的,那么finally里的code 肯定会执行,并且是在return前执行。
(只要语句执行了,肯定是在return前执行的。
finally 中也可以有return,并且会覆盖其他的return)
根据java规范:在try-catch-finally中,如果try-finally或者catch-finally 中都有return,则两个return语句都执行并且最终返回到调用者那里的是finally中return的值;而如果finally中没有return,则理所当然的返回的是try或者catch中return的值,但是finally中的代码是必须要执行的,方法在return的时候并不是把它所拥有的那个值给返回了,而是复制一份返回!因此,对于基本类型的数据,在finally中改变return的值对返回值没有任何影响,而对于引用类型的数据,就有影响。
(JAVA中基本类型变量存储在___中,引用类型的对象存储在____中,对象的引用地址存储在____中。
A. 堆
B. 栈
C. 寄存器
D. 静态存储区
BBA
基本类型和对象的引用都放在栈中,new出的对象和数组放在堆中
)
public class FinallyTest
{
public static void main(String[] args) {
System.out.println("x的值是"+new FinallyTest().test());;
}
@SuppressWarnings("finally")
static int test()
{
int x = 1;
try
{
//x++;
return x;
}
finally
{
++x;
System.out.println("x的值当前值是" +x);
//return x;
}
}
}
执行结果:x的值当前值是2
x的值是1
若finally中包含return语句
public class FinallyTest
{
public static void main(String[] args) {
System.out.println("x的值是"+new FinallyTest().test());;
}
@SuppressWarnings("finally")
static int test()
{
int x = 1;
try
{
//x++;
return x;
}
finally
{
++x;
System.out.println("x的值当前值是" +x);
return x;
}
}
}
执行结果是:x的值当前值是2
x的值是2
若引用类型的数据,就有影响,
public class FinallyTest4 {
public static void main(String[] args) {
System.out.print("k的最终返回值是: "+tt());
}
public static StringBuffer tt() {
StringBuffer k = new StringBuffer();
try {
k.append(2);
return k;
} catch(Exception e){
k.append(3);
return k;
} finally {
k.append(5);
}
}
}
执行结果是:的最终返回值是: 25
补充:java存储数据的地方以及java九种基本类型
2009-12-14 10:09
程序运行时6个不同地方可以存储数据:
1、寄存器(register):这是最快的存储区——处理器内部。
但是寄存器数量及其有限,所以寄存器由编
译器根据需求进行分配,你不能直接控制,也不能在程序中感觉到寄存器存在的任何迹象。
2、堆栈(stack):位于通用的RAM中,但通过它的“堆栈指针”可以从处理器哪里获得直接支持。
堆栈指
针若向下移动,则分配新的内存;若向上移动,则释放那些内存。
这是一种快速有效的分配存储方法,仅
次于寄存器。
创建程序时,Java编译器必须知道存储在堆栈内所有数据的确切大小和生命周期。
因为它必
须生产相应的代码,以便上下移动堆栈指针。
这一约束限制了程序的灵活性,所以虽然某些Java数据存储
于堆栈中——特别是对象引用,但是Java对象并不存储于其中。
3、堆(heap):一种通用性的内存池(也在RAM区),用于存放所有的Java 对象。
堆不同于堆栈的好处是
:编译器不需要知道要从堆里分配多少存储区域,也不必知道存储的数据在堆里存活多长时间。
因此,在
队里分配存储有很大的灵活性。
当需要创建一个对象时,只需要new下。
执行这行代码时,会自动在堆里进
行存储分配。
当然,为这种灵活性必须付出相应的代价。
用堆进行存储分配比用堆栈进行存储需要更多的
时间。
4、静态存储(static storage):这里的“静态”是指“在固定的位置”(虽然也在RAM)。
静态存储里
存放程序运行时一直存在的数据。
可以用关键字static来标识一个对象的特定元素是静态的,但Java对象
本身从来不会存放在静态存储空间里。
5、常量存储(constant storage):常量值通常直接存放在程序代码内部,这样做是安全的,因为他们永
远不会被改变。
有时,在嵌入式系统中,常量本身会和其它部分隔离开,所以在这种情况下,可以选择将
其存放在ROM中。
6、非RAM存储(non-RAM storage):如果数据完全存活于程序外,那么它可以不受程序的任何控制,在程
序没有运行时也可以存在。
其中两个最基本的例子就是“流对象”(stream object)和“持久化对象”(
persistent object)。
特例:基本类型(primitive type)
不用new来创建变量,而是创建一个并非是“引用”的“自动”变量。
这个变量拥有它的“值”,并置于堆
栈中,因此更加高效。
要确定每种基本类型所占存储空间的大小。
基本类型大小最小值最大值包装器类型
boolean - - - Boolean
char 16bit Unicode 0 Unicode 2(16)-1 Character
byte 8b -128 +127 Byte
short 16b -2(15) 2(15)-1 Short
int 32b -2(31) 2(31)-1 Integer
long 64b -2(63) 2(63)-1 Long
float 32bit IEEE754 IEEE754 Float
double 64b IEEE754 IEEE754 Double
void - - - Void
2. Java中的return语句总是和方法有密切关系,return语句总是用在方法中,有两个作用,一个是返回方法指定类型的值(这个值总是确定的),一个是结束方法的执行(仅仅一个return 语句)。
return结束当前方法,后面语句除了finally语句块都不会执行
break跳出当前语句块,循环则跳出当前循环,也可在多重循环嵌套时跳出指定循环层
System.exit(0)表示关闭虚拟机,即使是finally语句块也不会执行。