1、return语句的作用:a、返回一个值,这个值可以是任意类型。b、使程序返回到操作系统(即终止程序)
2、java中对于一个函数,不论有没有返回值类型,都可以带有return 语句。
但是区别在于,return 语句是否可以返回一个值(这取决与该函数的返回值类型)。

a、如果函数有返回值类型(即返回值类型不为void ),则必须带有返回相应类型值的return 语句。
b、如果函数没有返回值(即返回值类型为void ),则函数中return 语句(如果存在return语句!)的后面不能加任何的变量。(该情况下的函数中也可以没有return 语句,但是如果有的话,return 只能作为返回操作系统的作用使用。)

关于java中的try-catch-finally语句和return

在Java中当try、finally语句中包含return语句时,执行情况到底是怎样的,finally中的代码是否执行,大家众说纷纭,有的说会执行,有的说不会执行,到底哪种说法正确,现在通过下面的例子加以说明:

第一种情况:try中包含return语句,finally中不包含

public class TestTry {
static String s="";
public static void main(String args[]){
s = test1();
System.out.println("8 "+s);
}
public static String test1(){ try{
System.out.println("try.....");
return s = "a";
}
finally{
s="b";
System.out.println("17 "+s);
}
}
}

这里我们定义了一个字符串 s,在try里面将"a"赋值给s,并直接返回,在finally里面把"b"赋值给s,最终s的值是a还是b呢?下面是执行的结果

 try.....
17 b
8 a

我们发现最后的结果是a,但是b优先于a打印出来了,这是为什么呢?通过debug单步调试我们发现,在执行try中的return之前会先执行finally中的代码,之后再执行return语句。如果finally中也包含return语句,会出现什么情况呢,我们看第二种情况。

第二种情况:try,finally中都包含return语句

我们将上面的代码稍作改动

 public class TestTry {
static String s="";
public static void main(String args[]){
s = test1();
System.out.println("8 "+s);
}
public static String test1(){ try{
System.out.println("try.....");
return s = "a";
}
finally{
return s="b"; }
}
}

将finally中的s="b";直接改成return s="b";,会出现什么样的结果呢?字符串s是a还是b呢?

try.....
8 b

结论:

1.无论try里面有没有return语句,finally语句一定都会执行。

2.如果finally中没有return语句,try里面有return,那么在执行try中的return语句之前会先去执行finally中的代码,再去执行try中的return语句;如果在finally中也包含return语句,将会直接返回,不再去执行try中的return语句。

Java中return的语句的更多相关文章

  1. 经典的java中return和finally问题!

    经典的java中return和finally问题! 标签: 杂谈 分类: java学习 前一段时间 参加公司的笔试问了这个问题,回来一查才知道当时自己做错了,百思不得其解,上网查到下面的程序,但是运行 ...

  2. Java中的switch语句后面的控制表达式的数据类型

    Java中的switch语句后面的控制表达式的数据类型 1.byte 2.char 3.short 4.int 5.枚举类型 6.Java 7允许java.lang.String类型

  3. Java中的if-else语句——通过示例学习Java编程(7)

      作者:CHAITANYA SINGH 来源:https://www.koofun.com/pro/kfpostsdetail?kfpostsid=18 当我们需要根据一个条件执行一组语句时,我们需 ...

  4. Java中关于static语句块的理解

    Java中关于static语句块的理解 一.static块会在类被加载的时候执行且仅会被执行一次,一般用来初始化静态变量和调用静态方法. 实例一 public class A{ String name ...

  5. Java中的forin语句

    forin的原理 forin语句是JDK5版本的新特性,在此之前,遍历数组或集合的方法有两种:通过下标遍历和通过迭代器遍历.先举个例子: @Test public void demo() { Stri ...

  6. Java中 return 和finally

    1. 最简单的情形 public void main(){ String s = test(); System.out.println("s=[" + s + "]&qu ...

  7. Java基础知识强化19:Java中switch分支语句

    java中switch语句: 这里expression控制表达式的数据类型只能是byte.short.char.int四种整型类型和枚举类型,不能是boolean类型: Java7(1.7)改进了sw ...

  8. Java中的switch语句——通过示例学习Java编程(8)

    作者:CHAITANYA SINGH 来源:https://www.koofun.com//pro/kfpostsdetail?kfpostsid=19 当我们在代码逻辑中有多个选项,而且需要为每个选 ...

  9. 【视频+图文】带你快速掌握Java中含break语句的双重for循环

    双重for循环掌握后,我们就一起来看看双重for循环的进阶内容一之带break语句的双重for循环. 双重for循环[视频+图文]讲解传输门:点击这里可去小乔的哔哩哔哩观看~ 带continue语句的 ...

随机推荐

  1. POJ 2253 Frogger(最短路&Floyd)题解

    题意:想给你公青蛙位置,再给你母青蛙位置,然后给你剩余位置,问你怎么走,公青蛙全力跳的的最远距离最小. 思路:这里不是求最短路径,而是要你找一条路,青蛙走这条路时,对他跳远要求最低.这个思想还是挺好迁 ...

  2. xtu 1242 Yada Number 容斥原理

    Yada Number Problem Description: Every positive integer can be expressed by multiplication of prime ...

  3. XML_CPP_资料

    1.TinyXML解析xml文档 - zhoubl668的专栏:远帆,梦之帆! - 博客频道 - CSDN.NET.html http://blog.csdn.net/zhoubl668/articl ...

  4. eclipse下maven springMVC 整合 mybatis

    参考文档:http://blog.csdn.net/zhshulin/article/details/37956105   1.搭建maven工程,具体参见我另一篇博客:http://www.cnbl ...

  5. Cloud Native 环境

    当今软件行业正发生着巨变.自上世纪50年代计算机诞生以来,软件从最初的手工作坊式的交付方式,逐渐演变成为了职业化开发.团队化开发,进而定制了软件件行业的相关规范,形成了软件产业. 今天,无论是大型企业 ...

  6. 五句话搞定JavaScript作用域【转】

    JavaScript的作用域一直以来是前端开发中比较难以理解的知识点,对于JavaScript的作用域主要记住几句话,走遍天下都不怕... 一.“JavaScript中无块级作用域” 在Java或C# ...

  7. $.proxy用法详解

    jQuery中的$.proxy官方描述为: 描述:接受一个函数,然后返回一个新函数,并且这个新函数始终保持了特定的上下文语境. 官方API: jQuery.proxy( function, conte ...

  8. sqlplus中文问号

    添加两个环境变量后重启. 1.LANG=zh_CN.GBK(GBK是这样形式的,不同编码这里的value值需要跟着改变) 2.NLS_LANG=AMERICAN_AMERICA.ZHS16GBK(这个 ...

  9. Uedit个人专注

    Uedit个人专注   Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\*\Shell\Uedit] [HKEY_CLASSES_ROO ...

  10. 003PHP文件处理——目录操作:rename scandir

    <?php //目录操作:rename scandir /** * 修改目录名字: * rename('旧名字','新名字') 改变文件夹或者文件的名称 */ //var_dump(rename ...