java 返回0 和 1_Java中返回值定义为int类型的 方法return 1返回的是int还是Integer&&finally中return问题...

在Java中返回值定义为int类型的 方法return 1;中返回的是Integer值,在返回的时候基本类型值1被封装为Integer类型。

定义一个Test类,在异常处理try中和finally中分别return ;

public classTest {public static voidmain(String[] args) {

System.out.println(newTest().test());

}inttest() {try{returnfunc1();

}finally{returnfunc2();

}

}intfunc1() {

System.out.println("func1");return 1;

}intfunc2() {

System.out.println("func2");return 2;

}

运行结果:

6d420e1dfb9811c96e79640ee78aeed0.png

嗯,没问题,最后执行finally改变return的返回值。下面在看一个:

public classTest {public static voidmain(String[] args) {

System.out.println(newTest().test());

}static inttest() {int x = 1;try{returnx;

}finally{++x;

}

}

}

按照上面的逻辑会返回执行结果为2,但结果并不是这样:

a2aa773d492fe653a06f7c29ac5b8ffc.png

这里就要讲到finally对于return的处理:

在finally块中处理返回值,当定义为引用类型时,会先返回try中的返回值,然后执行finally会重置返回值,当定义为基本类型时,不会重置try的返回值。

异常代码加上try语句就标志着运行时会有一个Throwable线程监视该方法的运行,当出现异常时,交由异常逻辑处理,方法在栈内存中运行的,会按照“先进后出”的原则执行,main方法调用异常方法,main方法在下层,异常方法在上层。

当为基本类型时,异常方法执行完毕return x后,此方法的返回值以确定为固定值(基本类型为值拷贝),此后finally代码块修改已经没有意义(类似值传递,可以把finally块看做方法体)当为引用类型时,因为是地址拷贝,所以值会改变。(类似于地址传递)

即当定义为int类型时,return x;是值拷贝,所以finally无法修改x的值。

当为return 1;时,因为结果发生个改变,即返回的是finally中的值,即为地址拷贝,返回的是引用类型,即可确定return 1;此时为return new Integer(1);

即return 1;返回的是Integer对象。

关于finally中return的处理;学习与《编写高质量代码(改善Java程序的151个建议)》书中  第113条建议----不要在finally块中处理返回值;笔记见博客:https://blog.csdn.net/sanhewuyang/article/details/84333062

理解不足之处请大家指正。嗯,愿我们都被温柔以待。^_^

原文:https://www.cnblogs.com/liruilong/p/11250521.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Javareturn语句用于从方法返回值。当在方法调用return语句时,方法将立即退出,并返回指定的值。以下是关于return返回值的用法详解: 1. 返回void类型 如果方法返回任何值,则可以使用void关键字来定义方法。例如: ``` public void printMessage() { System.out.println("Hello World!"); } ``` 在这个例子,printMessage()方法返回任何值,因此它使用void关键字来定义。 2. 返回基本数据类型 如果方法返回基本数据类型(如int,double,boolean等),则必须在方法声明指定返回类型,并使用return语句返回值。例如: ``` public int addNumbers(int a, int b) { int sum = a + b; return sum; } ``` 在这个例子,addNumbers()方法返回一个整数值,因此它使用int关键字来定义,并使用return语句返回sum变量的值。 3. 返回对象 如果方法返回一个对象,则必须在方法声明指定返回类型,并使用return语句返回对象。例如: ``` public String getGreeting() { String greeting = "Hello World!"; return greeting; } ``` 在这个例子,getGreeting()方法返回一个字符串对象,因此它使用String关键字来定义,并使用return语句返回greeting变量的值。 4. 返回数组 如果方法返回一个数组,则必须在方法声明指定返回类型,并使用return语句返回数组。例如: ``` public int[] getNumbers() { int[] numbers = {1, 2, 3, 4, 5}; return numbers; } ``` 在这个例子,getNumbers()方法返回一个整数数组,因此它使用int[]关键字来定义,并使用return语句返回numbers数组。 需要注意的是,在Java,只能返回一个值。如果需要返回多个值,则可以将它们封装在一个对象,并返回该对象。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值