我不介意我不明白,但我想知道为什么会这样:

void something(String a) {

return hi();

}

void hi() {

return;

}

奇怪的是,hi()的返回类型void。 我在IDE中遇到语法错误:

Void methods cannot return a value

此外,代码不编译:

Exception in thread"main" java.lang.Error: Unresolved compilation problem:

Void methods cannot return a value

at Resources.setSystemProperties(Resources.java:33)

at Resources.main(Resources.java:49)

我希望这会发生:

hi() -> return nothing

return [nothing] -> hi() is nothing

所以最后,它什么都不返回,就像void方法一样。

为什么会出现这种情况? 当返回void方法的结果时,为什么代码不能编译?

答案:void方法无法返回值。 就如此容易。

并且a.notify()是void ...那么为什么我不能返回结果呢? 我有三个答案,但似乎没有人试图真正回答我的问题

return ;和return;之间存在差异。 我想这就是令你困惑的事情。

看看Scala,它有点像你在这里想做的那样。 Java没有。

@SotiriosDelimanolis我想OP对我上次评论感到困惑

这在JLS 14.17中定义:

A return statement with an Expression must be contained in one of the following, or a compile-time error occurs:

A method that is declared to return a value

A lambda expression

未声明void方法返回值,因此在这样的方法中不能发生带有表达式的return语句(如函数调用)。

此外,由于JLS 15.12.3中的此语言,您无法返回void方法的结果:

If the compile-time declaration is void, then the method invocation must be a top level expression (that is, the Expression in an expression statement or in the ForInit or ForUpdate part of a for statement), or a compile-time error occurs.

换句话说,因为a.notify()是void,你可以在它看起来像一个语句的上下文中使用它(即,所有单独在一行上),但不能在它看起来像表达式的上下文中使用它(即,你可以' t将其值赋给变量,返回它等。

我发誓,所有这些答案......这个实际上让我有点理解这种行为。 谢谢。

因为这就是语言的运作方式。您不能使用return关键字在返回类型为void的方法中返回值。 void不是可以传递的实际值:

The Void class is an uninstantiable placeholder class to hold a reference to the Class object representing the Java keyword void.

这是James Iry的一篇文章,将Java中的void与Scala中的Unit进行比较。 (与void不同,unit是可以返回的实际值。)他演示了使用Unit类型而不是void的优点:

Java, C++, and C# programmers do solve this problem all the time. One common option is to not use Function but some other concept like"Action" to mean a function that takes a string, performs a side effect, and returns nothing useful. Then you essentially duplicate"map" into something called perhaps"foreach" that expects an Action and returns void. That probably makes sense in this case since a list of references to a meaningless value is perhaps silly, but it also means a great deal of code duplication if this kind of higher order programming is common. For instance, you can't write just one compose function that creates a function from two other functions, you also have to write a compose that takes an action and a function to create an action.

@Codebender:对,修好了。

a.notify()只是用作void方法的一个例子,仅仅因为我想不出任何其他方法。

@Zizouz212:明白了,这只是一个非常糟糕的例子。 你可以使用返回类型为void的另一个方法。

当然,在那种情况下,我会这样做。

声明为void的函数不能return任何东西,就像错误所说的那样。你假设a.notify()返回任何东西都是假的,因为a.notify()也不能返回任何东西(因为它是无效的)。

a.notify()是void方法。 我从来没有说它会返回任何东西。

return  statements simply cannot be used with `Void` as it's Return type.

你无法改变语言规则!

Java编译器不会那么深入。当它在void函数中看到返回关键字后面带有一些值时会抛出编译错误。这是编程的。就如此容易。

我可以将简单的return;放在我的代码中......没有错误

java void 返回_关于java:Void方法不能返回void方法的值?相关推荐

  1. java 重用性_提高Java代码重用性的三个方法

    三种修改现有代码提高其可重用性的方法,它们分别是:改写类的实例方法,把参数类型改成接口,选择最简单的参数接口类型. 措施一:改写类的实例方法 通过类继承实现代码重用不是精确的代码重用技术,因此它并不是 ...

  2. java skip函数_【Java必修课】图说Stream中的skip()和limit()方法及组合使用

    1 简介 本文将讲解Java 8 Stream中的两个方法:skip()和limit().这两个方法是Stream很常用的,不仅各自会被高频使用,还可以组合出现,并能实现一些小功能,如subList和 ...

  3. java matcher函数_在Java正则表达式中使用Matcher.end()方法

    方法java.util.regex.Matcher.end()返回根据正则表达式从序列中匹配最后一个字符后的偏移值.此方法不需要任何参数.如果没有匹配发生,或者匹配操作失败,则抛出IllegalSta ...

  4. java 调用关系_【Java基础】几种简单的调用关系与方法

    直接上代码吧. class lesson4AB //同一个类下的public修饰的方法A,B可以相互调用 { public void A() { B();//等价于this.B(); } public ...

  5. java图片叠加_[原创]JAVA中图片上叠加文字的方法

    --sunfruit JDK:1.3.x以上 功能:下面是一个简单在图片上面叠加文字的方法,有朋友如果有这方面的问题,就起个了解的作用 代码如下: import java.io.IOException ...

  6. java 客户端定时任务_定时任务最简单的3种实现方法(超实用)

    定时任务在实际的开发中特别常见,比如电商平台 30 分钟后自动取消未支付的订单,以及凌晨的数据汇总和备份等,都需要借助定时任务来实现,那么我们本文就来看一下定时任务最简单的几种实现方式. TOP 1: ...

  7. java pow实现_实现Java Math.pow(double a,double b) 方法

    使用 Java 开发移动设备应用程序时,可能需要用到特定 Java VM 所没有的数学方法.本文将专门解决 Java ME 没有"幂"方法 Math.pow() 的问题.我们将演示 ...

  8. java 倾斜校正_简述Java图像倾斜方法及实例

    可以使用 graphics2D 类提供的 shear() 方法设置绘图的倾斜方向,从而使图像实现倾斜的效果.下面,我们一起来看一下它的使用方法和实例. 语法如下: shear(double shx,d ...

  9. java深度克隆_浅析Java中clone()方法浅克隆与深度克隆

    现在Clone已经不是一个新鲜词语了,伴随着"多莉"的产生这个词语确实很"火"过一阵子,在Java中也有这么一个概念,它可以让我们很方便的"制造&qu ...

最新文章

  1. 微信小程序 统一支付 php,微信/微信小程序统一下单(PHP版)
  2. VSTO Office二次开发PPTRibbonX命令操作及对象添加
  3. 内置函数sorted的10个小tips
  4. 经典背包问题 01背包+完全背包+多重背包
  5. HTML/CSS——网页SVG ICON(小图标)解决方案
  6. 百度地图实现定位功能
  7. 1001. A+B Format (20)---------------PAT开始
  8. AD+DNS安装步骤详解
  9. 面试官:this和super有什么区别?this能调用到父类吗?
  10. vscode 注释快捷键_koroFileHeader:一个用于生成文件头部注释和函数注释的插件
  11. ActiveMQ RabbitMQ RokcetMQ Kafka实战 消息队列中间件视频教程
  12. Android应用程序开发以及背后的设计思想深度剖析(3)
  13. 使用Tesseract对图片文字OCR识别
  14. 「网络流 24 题」负载平衡
  15. 新鲜出炉:2021 编程语言排行榜~
  16. android基础 [超级详细android Activity组件解析(Activity综述,Activity生命周期,Activity启动--携带参数启动)]
  17. oracle 11g 新特性之动态绑定变量窥视(一)
  18. nz-tree的右键菜单的实现, 以及选中状态的实现
  19. 怎样输入字符型数据技巧
  20. 信息系统开发与管理【五】之 系统分析

热门文章

  1. sourceinsight设置背景颜色
  2. 数据库获取本年所有月份
  3. lunix常用命令,日常操作lunix,查看日志,轻松搞定
  4. 大学生就业咨询系统c语言,大学生就业咨询系统课程设计方案报告.doc
  5. macos提示[某某软件]将对您的电脑造成伤害:[简介]勾选[覆盖恶意软件保护]
  6. 我的创作纪念日,3周年总结
  7. Android TextView字体加粗
  8. 我搞自由职业怎么样了
  9. js 获取剪切板内容
  10. 利用AI进行智能安全防护:案例与经验分享