当前位置: 代码网 > it编程>编程语言>Java > Java中`void`和`Void`的区别和特性详解

Java中`void`和`Void`的区别和特性详解

2026年03月13日 Java 我要评论
前言在 java 编程中,void 和 void 是两个容易混淆的概念。虽然它们看起来相似,但实际上有着截然不同的用途和特性。void关键字定义void 是 java 中的一个关键字。用于方法声明中,

前言

在 java 编程中,voidvoid 是两个容易混淆的概念。虽然它们看起来相似,但实际上有着截然不同的用途和特性。

void关键字

定义

  • void 是 java 中的一个关键字。
  • 用于方法声明中,表示该方法不返回任何值。

用途

  • 当一个方法执行某些操作(如打印、修改数据等),但不需要返回结果时,可以使用 void 作为返回类型。
  • 方法内部可以有任意数量的语句,但不能有 return 语句返回一个值。不过,可以使用 return; 来提前结束方法。

示例

public class example {
    public static void main(string[] args) {
        // 调用一个 void 方法
        printhello();
    }

    // 定义一个 void 方法
    public static void printhello() {
        system.out.println("hello, world!");
    }
}

在这个例子中,printhello 方法没有任何返回值,它只是简单地打印一条消息。

void类

定义

  • voidjava.lang 包中的一个类。
  • 它是 void 关键字的引用类型包装类。
  • void 类是一个不可实例化的类(即不能创建 void 对象)。
  • void 类只有一个静态字段 null,通常用来表示没有实际的 void 值。

用途

  • 主要用于泛型(generics)中,因为泛型不能直接使用基本类型或 void 关键字。
  • 在某些情况下,特别是使用函数式接口(如 consumersupplier)时,void 可以用来表示没有返回值的情况。

示例

泛型中的使用

import java.util.arraylist;
import java.util.list;

public class voidexample {
    public static void main(string[] args) {
        // 创建一个 list<void>,但实际上我们不会真正存储 void 实例
        list<void> voidlist = new arraylist<>();
        
        // 尝试添加 null 到列表中
        voidlist.add(null);
        
        // 打印列表
        for (void v : voidlist) {
            system.out.println(v);  // 输出: null
        }
    }
}

在这个例子中,虽然我们创建了一个 list<void>,但由于 void 类不可实例化,我们只能将 null 添加到列表中。

函数式接口中的使用

import java.util.function.consumer;

public class voidexample {
    public static void main(string[] args) {
        // 使用 consumer<void> 表示一个消费者,它接受一个 void 类型的参数
        consumer<void> consumer = (v) -> {
            system.out.println("this is a consumer that takes no input.");
        };
        
        // 传递 null 作为 void 类型的值
        consumer.accept(null);
    }
}

在这个例子中,consumer<void> 表示一个消费者,它接受一个 void 类型的参数。由于 void 类不可实例化,我们传递 null 作为参数。

获取void的唯一实例

public class voidexample {
    public static void main(string[] args) {
        // 获取 void 的唯一实例
        void avoid = null;  // 或者 void avoid = void.type;
        
        // 打印 void 实例
        system.out.println(avoid);  // 输出: null
    }
}

在这个例子中,void 类有一个静态字段 null,我们可以使用 nullvoid.type 来表示这个唯一的实例。

实际代码例子

使用r<void>的删除操作

假设你有一个 restful api 控制器,其中包含一个删除记录的方法:

import org.springframework.web.bind.annotation.deletemapping;
import org.springframework.web.bind.annotation.pathvariable;
import org.springframework.web.bind.annotation.restcontroller;

@restcontroller
public class warehousecontroller {

    private final immswarehousedetailedappservice immswarehousedetailedappservice;

    public warehousecontroller(immswarehousedetailedappservice immswarehousedetailedappservice) {
        this.immswarehousedetailedappservice = immswarehousedetailedappservice;
    }

    @deletemapping("/deletebyid/{detailid}")
    public r<void> deletebyid(@pathvariable long detailid) {
        boolean success = immswarehousedetailedappservice.deletebyid(detailid);
        return toajax(success);
    }

    public static <t> r<t> toajax(boolean success) {
        if (success) {
            return new r<>(200, "操作成功", null);
        } else {
            return new r<>(500, "操作失败", null);
        }
    }
}

// 自定义响应类
class r<t> {
    private int code;
    private string message;
    private t data;

    public r(int code, string message, t data) {
        this.code = code;
        this.message = message;
        this.data = data;
    }

    // getter 和 setter
    public int getcode() {
        return code;
    }

    public void setcode(int code) {
        this.code = code;
    }

    public string getmessage() {
        return message;
    }

    public void setmessage(string message) {
        this.message = message;
    }

    public t getdata() {
        return data;
    }

    public void setdata(t data) {
        this.data = data;
    }
}

解析

  1. @deletemapping 注解

    • @deletemapping 用于映射 http delete 请求到特定的处理方法。
    • /deletebyid/{detailid} 是请求路径,其中 {detailid} 是路径变量,表示要删除的记录的 id。
  2. 方法签名

    • public r<void> deletebyid(@pathvariable long detailid)
      • r<void> 表示返回一个泛型类型 r,其泛型参数是 void。这意味着该方法不会返回具体的业务数据,只会返回一个状态信息。
      • @pathvariable long detailid 表示从 url 路径中提取 detailid 参数,并将其作为方法参数传递。
  3. 方法体

    • return toajax(immswarehousedetailedappservice.deletebyid(detailid));
      • immswarehousedetailedappservice.deletebyid(detailid) 调用服务层的方法来删除指定 id 的记录。
      • toajax(...) 是一个工具方法,将服务层的返回结果转换为一个 r 类型的对象,通常包含成功或失败的状态码和消息。
  4. 自定义响应类 r<t>

    • r<t> 是一个泛型类,用于封装 api 的响应数据。
    • 它包含三个属性:code(状态码)、message(消息)和 data(数据)。
    • data 属性的类型是泛型 t,当 tvoid 时,表示该方法不返回具体的业务数据。
  5. 工具方法 toajax

    • toajax 是一个工具方法,用于将布尔值转换为 r 对象。
    • 如果删除成功,返回 r<void> 对象,包含成功状态码和消息;否则,返回失败状态码和消息。

总结

  • void 是一个关键字,用于方法声明,表示该方法不返回任何值。
  • void 是一个类,主要用于泛型和某些特定场景下表示没有返回值的情况。它是一个不可实例化的类,只有一个静态字段 null

void

  • 定义void 是 java 中的一个关键字。
  • 用途:用于方法声明,表示该方法不返回任何值。
  • 通俗理解void 就像一个“空盒子”,表示这个方法执行完之后不会给你任何东西。它只是做一些事情,比如打印信息、修改数据等,但不会返回任何结果。

void

  • 定义voidjava.lang 包中的一个类。
  • 用途:主要用于泛型中,因为泛型不能直接使用基本类型或 void 关键字。
  • 通俗理解void 是一个特殊的“盒子”,虽然它里面什么也没有(不可实例化),但它可以用来表示“没有具体的返回值”。在某些情况下,特别是在使用泛型时,我们需要一个占位符来表示没有返回值的情况,这时就可以使用 void

通俗对比

  • void:方法执行完后没有任何返回值,就像你做了一件事但没有得到任何回报。
  • void:方法可能有返回值,但返回的是一个特殊的对象,表示“没有具体的业务数据”,但它仍然可以包含一些状态信息(如成功或失败的状态码和消息)。

附:java 方法中加void和不加void的区别

只要记住void即无返回值就ok了,如果不用void,那么这个地方一定是被一个其它的数据类型所替代,比如下面用的是string,当然也可能是int或者boolean等等,那么此时我们下面就要有一个return返回值。

package com.thursday.one;
 
public class variable {
 
	
	public static void speaker(){
		system.out.println("你好");
	}
	public static string talk(){
		return "hello";
	}
	public static void main(string[] args) {
		speaker();
		talk();
		string astring = talk();
		system.out.println(astring);
	}
}

到此这篇关于java中void和void的区别和特性的文章就介绍到这了,更多相关java void和void区别内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com