本文小千分享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的用法和意义相关推荐

  1. Java培训分享void的用法和意义

    本文由小千分享void的用法和意义,void在Java中一般用来表示方法没有返回值.例如: 那么其底层原理到底如何呢?我们来一点点的分析一下. 先来了解一下这个单词的基本含义,根据网络查询结果,如下: ...

  2. Java技术分享:什么是数据库连接池?

    在JDBC编程中,每次创建和断开Connection对象都会消耗一定的时间和IO资源.这是因为在Java程序与数据库之间建立连接时,数据库端要验证用户名和密码,并且要为这个连接分配资源.Java程序则 ...

  3. Java技术分享:Lambda表达式之接口实例化

    今天小千给大家分享的技术是:Lambda表达式之接口实例化. Lambda表达式是Java SE 8中一个重要的新特性.lambda表达式允许你通过表达式来代替功能接口. lambda表达式就和方法一 ...

  4. Java技术分享:NIO实战教程!

    Java NIO(New IO)是一个可以替代标准Java IO API的IO API(从Java 1.4开始),Java NIO提供了与标准IO不同的IO工作方式.NIO可以理解为非阻塞IO,传统的 ...

  5. Java技术分享之函数式编程

    Java是一种计算机编程语言,可用于编写桌面应用程序.Web应用程序.分布式系统和嵌入式系统应用程序等,是IT开发行业中最受欢迎的编程语言之一.想要学好Java必须要一步一个脚印打好基础.积攒实战经验 ...

  6. java future 不足_java Future用法和意义一句话击破

    在并发编程时,一般使用runnable,然后扔给线程池完事,这种情况下不需要线程的结果. 所以run的返回值是void类型. 如果是一个多线程协作程序,比如菲波拉切数列,1,1,2,3,5,8...使 ...

  7. MyCat:第二章:Mycat前世今生(1),java技术分享主题

    高可用性: 分片节点dn2_M1配置了两个dataSource,并且配置了心跳检测(heartbeat)语句,在这种配置下,每个dataNode会定期对当前 正在使用的dataSource执行心跳检测 ...

  8. Java技术分享:Java基本数据类型

    数据类型在计算机语言里面,是对内存位置的一个抽象表达方式,可以理解为针对内存的一种抽象的表达方式.接触每种语言的时候,都会存在数据类型的认识,有复杂的.简单的,各种数据类型都需要在学习初期去了解,Ja ...

  9. Java技术分享:Java的运行机制

    初识Java,总感觉是一头雾水,不知道该如何开始自己的学习.在开始之前,必要的理论基础是不可少的,可以先了解一下,Java的运行机制,然后再写个简单的"hello world"!以 ...

最新文章

  1. Ubuntu16.04下arm-linux-gcc交叉编译环境搭建
  2. 科技在进步,一文带你看看 MATLAB R2020a 为工程师和科学家带来哪些 AI 功能?
  3. easypoi 多sheet导入_程序员接私活利器 玩转excel导入导出
  4. 卷积为什么如此强大?一文全解深度学习中的卷积
  5. 智慧气象机器_智慧电缆隧道火热建设中 传感器+机器人成标配
  6. 程序包java.awt不存在_IDEA解决Java:程序包xxxx不存在的问题
  7. git 报错does not have a commit checked out
  8. BIEE11G系统数据源账号过期问题(默认安装步骤)
  9. 禁止WinXP文件夹自动展开
  10. Vue前端路由~非常详细哦,不要错过
  11. cmd 220 ftp 远程主机关闭连接_网络基础知识:FTP工作流程
  12. 学习React中遇到的问题
  13. karto探秘之open_karto 第一章 --- 数据结构与类的初始化
  14. 在NVME SSD上安装WIN7
  15. java判断日期是否是本月_Java写一个函数判断一个日期是否在本月之内
  16. 输入一个三位数,求个位十位百位java代码
  17. VUE-Cli报No Babel config file detected错误的一系列解决方法
  18. ArcGIS工具 - 导出数据库结构
  19. Flyte简介:云原生机器学习和数据处理平台
  20. 第二章 学生指导(01 小学生身心发展的规律 02 学生心理发展与教育 03 小学生的学习)

热门文章

  1. 【学习笔记】吴恩达机器学习 WEEK1
  2. python读取只读word只读_Python用于NLP :处理文本和PDF文件
  3. Dubbo启动,调用方法失败【问题:调用超时】
  4. username is marked non-null but is null
  5. c语言实现循环单链表
  6. Middle of the Contest
  7. 计算机网络(谢希仁第八版)第二章:物理层
  8. java的格式化时间工具类
  9. 【记录】python多线程的使用 线程同步(LOCK和RLOCK) python与mysql数据库交互实现增加和查找 python的格式化输出
  10. ThinkPHP调用连连支付