Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中不正确的对象创建_Java_Swing - Fatal编程技术网

java中不正确的对象创建

java中不正确的对象创建,java,swing,Java,Swing,我在welcomepage类中声明了bec(后端代码对象,以便整个类都能看到它)作为成员数据,并在其构造函数中进行了初始化 但它是在construcor内部通过一些初始化创建的,但jButton1ActionPerformed方法中的bec对象值将为null。为什么。。获得初始化对象实例的解决方案是什么 更改此行 backendcode bec=新的后端代码(“虚拟”) 关于这一行: public class welcomepage extends javax.swing.JFrame {

我在welcomepage类中声明了bec(后端代码对象,以便整个类都能看到它)作为成员数据,并在其构造函数中进行了初始化 但它是在construcor内部通过一些初始化创建的,但jButton1ActionPerformed方法中的bec对象值将为null。为什么。。获得初始化对象实例的解决方案是什么

更改此行

backendcode bec=新的后端代码(“虚拟”)

关于这一行:

public class welcomepage extends javax.swing.JFrame {
    backendcode bec;
    String username;
    public welcomepage() {
            initComponents();
            username=null;
            backendcode bec= new backendcode("dummy");
            System.out.println("bec created "+ bec);
    }

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
            System.out.println("bec created "+ bec);
            bec.back_login_credentials(username);
    }
    /*
    and other private methods(not mentioned here) which also needs to access bec object
    */
}

 public class backendcode {
     public backendcode(String dummy) {
           //some code
     }
     public void back_login_credentials(String username, String password) {
          //some code
     }
  }
如果仔细查看代码,您正在隐藏全局变量bec。

更改此行

backendcode bec=新的后端代码(“虚拟”)

关于这一行:

public class welcomepage extends javax.swing.JFrame {
    backendcode bec;
    String username;
    public welcomepage() {
            initComponents();
            username=null;
            backendcode bec= new backendcode("dummy");
            System.out.println("bec created "+ bec);
    }

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
            System.out.println("bec created "+ bec);
            bec.back_login_credentials(username);
    }
    /*
    and other private methods(not mentioned here) which also needs to access bec object
    */
}

 public class backendcode {
     public backendcode(String dummy) {
           //some code
     }
     public void back_login_credentials(String username, String password) {
          //some code
     }
  }

如果仔细查看代码,您将隐藏全局变量bec。

您将在构造函数中隐藏带有此行的字段

bec = new backendcode("dummy");
应该是

backendcode bec= new backendcode("dummy");
你所做的事叫做


我还建议你向上看。这将使您的代码更易于阅读。

您在构造函数中隐藏了带有此行的字段

bec = new backendcode("dummy");
应该是

backendcode bec= new backendcode("dummy");
你所做的事叫做


我还建议你向上看。这将使您的代码更易于阅读。

在构造函数中,您正在执行以下操作:

bec= new backendcode("dummy");
…这将创建一个新变量。您希望按如下方式设置现有字段:

backendcode bec= new backendcode("dummy");
无论何时指定类型,都是在创建新变量,而不是设置现有变量的值。这可能会让人困惑,因为正如您所发现的,局部变量可能与字段具有相同的名称-当它们具有相同的名称时,它被称为阴影,并且该方法的其余部分默认引用的是局部变量,而不是字段

通过使用
this
关键字,可以显式引用字段,而不是局部变量。例如,如果将构造函数更改为以下内容:

bec= new backendcode("dummy");
public welcomepage() {
    initComponents();
    username=null;
    backendcode bec= new backendcode("dummy");
    System.out.println("bec created "+ this.bec);
}
…您将看到字段(
this.bec
)仍然为空


顺便说一句,您可能应该将该字段声明为private,这样它对整个类仍然可见(这就是为什么它是一个字段),但对任何其他类都不可见(或者更重要的是,不可更改)。如果确实需要其他类来更改字段的状态,则可以通过getter/setter方法以更可控的方式进行更改。

在构造函数中,您正在执行以下操作:

bec= new backendcode("dummy");
…这将创建一个新变量。您希望按如下方式设置现有字段:

backendcode bec= new backendcode("dummy");
无论何时指定类型,都是在创建新变量,而不是设置现有变量的值。这可能会让人困惑,因为正如您所发现的,局部变量可能与字段具有相同的名称-当它们具有相同的名称时,它被称为阴影,并且该方法的其余部分默认引用的是局部变量,而不是字段

通过使用
this
关键字,可以显式引用字段,而不是局部变量。例如,如果将构造函数更改为以下内容:

bec= new backendcode("dummy");
public welcomepage() {
    initComponents();
    username=null;
    backendcode bec= new backendcode("dummy");
    System.out.println("bec created "+ this.bec);
}
…您将看到字段(
this.bec
)仍然为空


顺便说一句,您可能应该将该字段声明为private,这样它对整个类仍然可见(这就是为什么它是一个字段),但对任何其他类都不可见(或者更重要的是,不可更改)。如果确实需要其他类来更改字段的状态,则可以通过getter/setter方法以更可控的方式进行更改。

全局
bec
变量永远不会初始化。在构造函数的作用域中创建一个新的
bec
变量

请尝试以下操作:

bec= new backendcode("dummy");
public welcomepage() {
    initComponents();
    username=null;
    backendcode bec= new backendcode("dummy");
    System.out.println("bec created "+ this.bec);
}

全局
bec
变量从未初始化。在构造函数的作用域中创建一个新的
bec
变量

请尝试以下操作:

bec= new backendcode("dummy");
public welcomepage() {
    initComponents();
    username=null;
    backendcode bec= new backendcode("dummy");
    System.out.println("bec created "+ this.bec);
}

如果一个问题没有被接受的机会,我就没有动力去回答它。。。嗯,通常不。。。如果一个问题没有被接受的机会,我就没有动力去回答。。。嗯,通常不。。。叹息