Java 为什么void方法不接受参数中的整数?

Java 为什么void方法不接受参数中的整数?,java,class,object,methods,parameters,Java,Class,Object,Methods,Parameters,我的代码是: public class Q2Client { public static void main(String[] args) { Q2 newq2 = new Q2(5); } } 我在创建newq2时遇到了一个错误,即不接受整数(必需:无参数),但Q2显然接受整数。当我删除Q2类中的void时,它不会给出错误并且运行良好。void会导致参数(int y)无效吗?构造函数没有返回类型! 按如下方式更改您的Q2课程 class Q2 { int x;

我的代码是:

public class Q2Client {
   public static void main(String[] args) {
   Q2 newq2 = new Q2(5);
   }
} 


我在创建newq2时遇到了一个错误,即不接受整数(必需:无参数),但Q2显然接受整数。当我删除Q2类中的void时,它不会给出错误并且运行良好。void会导致参数(int y)无效吗?

构造函数没有返回类型! 按如下方式更改您的Q2课程

class Q2 {
   int x;
   public Q2 (int y) {
     this.x = y;
   }
}
这样编码:

 class Q2 {
     int x;
     public Q2 (int y) { // attention:remove the void 
     int x = y;
   }
}
意味着Q2的方法是类Q2的构造函数,它接受类型为integer的参数。 但是,如果您这样定义方法:

 public void Q2 (int y) { // attention:NOT remove the void 
      int x = y;
    }

意思是你告诉机器要定义一个公共方法,注意:这个类没有构造函数!参考JAVA参考,将调用没有参数的默认构造函数,然后调用新的Q2(5)将是错误的。

您试图使用方法作为构造函数。从
Q2
的签名中删除单词
void
。另外,您正在创建一个局部变量
x
,该变量隐藏类变量
x
只需在
public void Q2(int y)
中跳过void,您已经将该方法定义为一个构造函数,可由
new Q2(5)
调用。现在Q2只有一个默认的构造函数,没有参数,因此问题就来了。在java中,如果你创建了一个与类同名的方法,那么它就是一个“构造函数”,而不是一个常规方法。它创建Q2类的一个新实例,并自动返回它(因此您无法选择返回类型)。您仍然错误地隐藏了
x
字段
 public void Q2 (int y) { // attention:NOT remove the void 
      int x = y;
    }