本文由好程序员ava培训分享void的用法和意义,void在Java中一般用来表示方法没有返回值。例如:

那么其底层原理到底如何呢?我们来一点点的分析一下。

先来了解一下这个单词的基本含义,根据网络查询结果,如下:

说明void这个单词本身的含义就是空白,空的。在Java语言中,一般也用void这个关键字作为方法的返回值,表示该返回值为空。当定义一个方法没有返回值的时候,就可以使用该关键字,如果在代码中需要返回,可以使用return关键字,例如:

实际上,在Java中,有一个类java.lang.Void对应着void关键字,如下:

从上面的源代码来看,Void其实就是void的封装类型,一般被称为占位符(placeholder)。这里看起来好像有点类似于Integer跟int的关系,但其实并不是这样,Void比较特别:首先它不能实例化;其次它也没有内置的实例,也没有可以用的字面值。

所以声明一个Void变量通常是没有意义的,因为没有可以赋值的实例。所以Void变量唯一能赋值的就null。

Void唯一一个可用的地方就是用来判断反射时的类型。例如:

但是这里也可以使用void.class来替代。所以Void其实就是void的封装。

那么既然void就是表示没有返回值,为什么不能直接不写呢?一定需要一个void占位符呢?我们去研究一下Java的底层,也就是C/C++语言。在C/C++中,void一般有两种使用场景:一是对函数返回的限定;二是对函数参数的限定。第二种用法在Java中不能使用,所以这里我们只说di一种情况。

为什么需要对函数返回进行限定,其实在早期C语言的一些编译器中,如果不写函数的返回值时,可能会被编译器作为返回整型值处理(注,现在的大部分编译器一般会报错或警告)。但是许多程序员却误以为其为void类型。例如:

此处如果程序运行的结果为输出:2 + 3 = 5,这说明不加返回值的函数是int函数,并非void。

而在C++语言中有很严格的类型安全检查,不允许上述情况(指函数不加类型声明)发生。但是编译器可能不会这么认定,譬如在Visual C++6.0中上述add函数的编译无错也无警告且运行正确,所以不能寄希望于编译器会做严格的类型检查。

因此,为了避免不必要的问题发生(编程不规范导致出现的问题),在编写C/C++程序时,对于任何函数都必须一个不漏地指定其类型。如果函数没有返回值,一定要声明为void类型。这既是程序良好可读性的需要,也是编程规范性的要求。

而Java的底层就是使用的C++,也做好了良好的编程要求,所以也就有void的关键字作为占位符。

java里void的意思_void的用法和意义相关推荐

  1. java中void的含义_void在Java-java中void后面接什么-java中关键字void的含义

    JAVA里VOID是什幺意思. void是无返回值的意思. 比方说 public void walk() { System.out.print("你好!"); } 如果别的地方调用 ...

  2. Java 里的 for (;;) 与 while (true),哪个更快?

    点击关注公众号,Java干货及时送达 在JDK8u的jdk项目下做个很粗略的搜索: mymbp:/Users/me/workspace/jdk8u/jdk/src $ egrep -nr " ...

  3. 快手二面:Java 里的 for (;;) 与 while (true),哪个更快?

    转自:知乎 www.zhihu.com/question/52311366/answer/1300903 在 JDK8u 的 jdk 项目下做个很粗略的搜索: mymbp:/Users/me/work ...

  4. 【转】Java里如何实现线程间通信

    正常情况下,每个子线程完成各自的任务就可以结束了.不过有的时候,我们希望多个线程协同工作来完成某个任务,这时就涉及到了线程间通信了. 本文涉及到的知识点:thread.join(), object.w ...

  5. 原型模式(ProtoType) - Java里的对象复制

    一, 引用的复制和对象复制. 在编程中, 我们有时会用两个引用指向同一个对象. 例如: ArrayList a = new ArrayLIst(); ArrayList b = a; 看起来好像有a, ...

  6. Java里的数组介绍

    注意, 本文讲的是数组(Array),  非数组型线性表容器(ArrayList). 一. C语言的静态数组和动态数组. 稍微接触过c的程序猿都应该知道, c语言里的数组分为静态数组和动态数组. 1. ...

  7. Java 里的泛型简介.

    我们在JDK中有时回见到1个类or接口后面跟这1个尖括号. 例如: java.util.HashMap<K,V> 我们一开始大概知道K,V 大概就是Key和Value的意思, 键值对嘛, ...

  8. Java里的容器 Collection 简介

    容器也是Java面试经常问到的问题.  也是Java编程的其中1个难点. 在一篇文章中很难全部讲清楚, 我打算分几篇逐步介绍. 一.  什么是容器 1.1 容器的定义 Java里的容器的定义很简单: ...

  9. Java里的字符串, String类简单介绍.

    String类在java面试中也是1个常见的问题点. 所以也是写在这里方便以后查阅了. 大家都知道c语言里是没有String 字符串这个数据类型的. 只能用字符数组的1个特殊形式来表示一个字符串, 就 ...

最新文章

  1. 10000+ gif表情包不是梦,get这一篇文就够了!!!小哥哥快到碗里来,再也不怕斗图没有表情包了
  2. Tesla AutoPilot纯视觉方案解析
  3. 多维数组和C#中的数组数组有什么区别?
  4. apply和call
  5. 支付宝招兼职“找茬程序员” 不用坐班/最高奖励36万
  6. 动态ip地址方案有什么优点和缺点_OA期刊的优点和缺点是什么
  7. 消息队列简介-原理与应用
  8. 组策略管理(关闭UAC)
  9. 如何理解阿里月饼事件中各方的表现
  10. 【POJ 3764】 The xor-longest path
  11. 网上赚钱靠谱的方法,看懂了的都是老手!
  12. VM虚拟机占内存非常大
  13. 英雄联盟英雄技能总结
  14. 科研过程中Linux相关问题
  15. 踌躇满志 未来可期 华云数据广西公司正式乔迁
  16. 泊松图像编辑(Poisson image editing)
  17. HTML 基础教程:HTML 编辑器
  18. flashback总结六之Flashback_Transaction_Query
  19. AWD平台搭建–Cardinal
  20. 使用傲梅分区助手绿色版给C盘扩容

热门文章

  1. Android开发本地及网络Mp3音乐播放器(十五)网络音乐及歌词下载功能实现
  2. Python 还能实现图片去雾?FFA 去雾算法、暗通道去雾算法用起来! | 附代码
  3. Discover中英文显示问题
  4. 关于身份认证和鉴权过程
  5. 与某流氓网站的血泪交战史
  6. Keras预测股票走势
  7. SpringBoot + Vue 实现基于 WebSocket 的聊天室(单聊)
  8. 2021 ICPC 四川省赛 L - Spicy Restaurant(多源BFS,DP)
  9. 产品思维训练 | 百度搜索强制跳转APP,背后的逻辑和用户体验
  10. 【Python】pdf文件逐页转图片/修改图片存储大小脚本