Java:无法将参数传递给构造函数

时间:2015-07-29 12:56:59

标签: java

我试图将布尔值从1个类传递给另一个类的构造函数。

基本上我的程序从Main开始如下:

    boolean  bbb = true;
    System.out.println("Value of bbb " + bbb);
    signup s = new signup(bbb);
    s.signupnow(driver);

" bbb"的价值设置为true。

"注册"看起来像这样(我通过" bbb&#34的值;作为下一个构造函数的参数)

public class Signup {
    boolean isStealthEnabled;
    public Signup(boolean b)
    {
        this.isStealthEnabled = b;
        System.out.println("Value of b inside \"Signup\" " + b);
    }

    Reg signup = new Reg(isStealthEnabled);

我将布尔值传递给" Reg"类。

但由于某种原因,显示的值(并执行为false)..

" Reg" class看起来像这样:

boolean isStealthEnabled;
public Reg(boolean isStealthEnabled) {
    super(isStealthEnabled);
    System.out.println("Value of isStealthEnabled inside of Reg " + isStealthEnabled);
}
StealthWatchDog watchdog = new StealthWatchDog(isStealthEnabled);

"格雷格"继承" Reg"类。

公共类Gmail注册扩展了注册{

//boolean isStealthEnabled;
public GReg(boolean isStealthEnabled) {
    super(isStealthEnabled);
    System.out.println("Value of isStealthEnabled inside of GReg " + isStealthEnabled);
}
StealthWatchDog watchdog = new StealthWatchDog(isStealthEnabled);

最初该值显示为true但是由于某些奇怪的原因变为false ..为什么会这样?

更新:

在我的测试中,当我尝试回显isStealthEnabled(或bbb)的值时,我得到以下内容:

Value of bbb true
Value of b inside StealthWatchDog false
Value of isStealthEnabled inside Reg  false
Value of b inside StealthWatchDog false
Value of isStealthEnabled inside of GReg false
Value of b inside "Signup" true

显然,即使我在" Main"中首先调用它,注册仍在运行。

5 个答案:

答案 0 :(得分:2)

boolean默认为false - 在构造函数运行之前构建Reg对象。

将Reg的构造移动到构造函数内部。

public class Signup {
  boolean isStealthEnabled;
  Reg signup;
  public Signup(boolean b)
  {
    this.isStealthEnabled = b;
    this.signup = new Reg(isStealthEnabled);
    System.out.println("Value of b inside \"Signup\" " + b);
  }
}

答案 1 :(得分:2)

您的代码中存在两个问题:

首先:

您必须使用正确的名称初始化您的班级。 您已将您的班级定义为"注册"但是你已经初始化了:

signup s = new signup(bbb);

问题在于它应该是:

Signup s = new Signup(bbb);

第二

您已将Reg元素声明为任何方法。它将初始化为:

boolean iStealthEnabled = false; 

这是布尔值的默认值。它不会是你选择的那个,因为在初始化时它还没有被分配。

你必须在你的注册构造函数中初始化Reg类,然后它才能工作。

正确的代码将是

主要课程:

boolean  bbb = true;
System.out.println("Value of bbb " + bbb);
Signup s = new Signup(bbb);
s.signupnow(driver);

注册声明将是:

public class Signup {
boolean isStealthEnabled;
Reg signup;
public Signup(boolean b)
{
    this.isStealthEnabled = b;
    System.out.println("Value of b inside \"Signup\" " + b);
    signup = new Reg(isStealthEnabled);
}

答案 2 :(得分:1)

您不需要在子类中声明成员变量boolean isStealthEnabled;。它可能会影响您在父类中设置的父类成员。

答案 3 :(得分:1)

请注意,您的主要代码应为

boolean  bbb = true;
System.out.println("Value of bbb " + bbb);
Signup s = new Signup(bbb); // Changed first letter to capital
s.signupnow(driver);

这是因为类应该在Java中的CamelCase中。 见the documentation

答案 4 :(得分:1)

根据@Michael Watson的回答,我能够解决问题如下:

我改变了两个班级

public class Reg {
boolean isStealthEnabled;
StealthWatchDog watchdog;
public Reg(boolean isStealthEnabled)
{
    this.isStealthEnabled = isStealthEnabled;
    watchdog =   watchdog = new StealthWatchDog(isStealthEnabled);
    System.out.println("Value of isStealthEnabled inside Reg  " + isStealthEnabled);
}



public class Signup {
boolean isStealthEnabled;
GReg signup;
public Signup(boolean b)
{
    this.isStealthEnabled = b;
    System.out.println("Value of b inside \"Signup\" " + b);
    signup = new GReg(isStealthEnabled);

}

我赞美@Watson但是我自己添加了这个,因为它没有修复这两个类(虽然概念是相同的)