Question: I can't answer completely "why should we call "**void**" is '**return type**'?"

*How do I prove that "**void**" is a type?*

Answer: 
`void` is not a type, it is not also a return type:

in [JLS 14.8](https://docs.oracle.com/javase/specs/jls/se8/html/jls-14.html#jls-14.8) you can find a note about this type:

> 
> Note that
>  the Java programming language does not allow a "cast to void"-**void is
>  not a type**
> 
> 
>
The [Java Language Specification](https://java.sun.com/docs/books/jls/third_edition/html/j3TOC.html) [says that](https://java.sun.com/docs/books/jls/third_edition/html/typesValues.html#24888):

> 
> [...] every variable and every expression has a type that can be determined at compile time. The type may be a primitive type or a reference type.
> 
> 
> 

`void` is not a [valid type](https://java.sun.com/docs/books/jls/third_edition/html/typesValues.html#4.1). However, `void` is a valid [keyword](https://java.sun.com/docs/books/jls/third_edition/html/lexical.html#3.9) used to indicate that a [method does not return a value](https://java.sun.com/docs/books/jls/third_edition/html/classes.html#37508).

The [Void JavaDoc](http://download.oracle.com/javase/7/docs/api/java/lang/Void.html) also says that `void` is a keyword:

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

Contrast that to the [Integer JavaDoc](http://download.oracle.com/javase/7/docs/api/java/lang/Integer.html):

> 
> The Integer class wraps a value of the primitive type int in an object. An object of type Integer contains a single field whose type is int.
> 
> 
> 

The `Void` class represents the `void` **keyword**; while the `Integer` class represents an `int` **type**.