Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.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_Initialization_Constructor - Fatal编程技术网

Java 初始化变量的正确方法

Java 初始化变量的正确方法,java,swing,initialization,constructor,Java,Swing,Initialization,Constructor,好吧,这只是一个在黑暗中拍摄,但它可能是我得到的大多数错误的原因 当你开始做某事的时候。比如说一个小小的挥杆项目。是这样吗 variables here { private Jlist contactList; String [] contactArray; ArrayList <String> contactArrayList; ResultSet namesList // constructor here public whatever() { Gr

好吧,这只是一个在黑暗中拍摄,但它可能是我得到的大多数错误的原因

当你开始做某事的时候。比如说一个小小的挥杆项目。是这样吗

variables here
{
  private Jlist contactList;
  String [] contactArray;
  ArrayList <String> contactArrayList;
  ResultSet namesList


// constructor here

public whatever()
{
    GridLayout aGrid = new GridLayout(2,2,10,10);

    contact1 =  new String();
    contact2 =  new String();
    contact3 =  new String();

    contactArrayList = new ArrayList<String>();

// is something supposed too go in the () of this JList?
   contactList = new JList();

   contactArray = new String[5];

   from1 =new JLabel ("From: " + contactArray[1]);



gridlayout.add(components)// theres too many components to write onto SO.

}


// methods here

public void fillContactsGui()
{
    createConnection();
ArrayList<String> contactsArrayList = new ArrayList<String>();

    while (namesList.next())
    {
        contactArrayList.add(namesList.getString(1));
        ContactArray[1] = namesList[1];
    }
}
 public class test
{
  int i;

  public test()
  {
    i = 0;
 }

  public void addi()
  {
   i = i +1;
  }
}
public class test
{
  int i = 0;

  public test()
  {
   int i = 0;
  }


  public void addi()
  {
    int i = i +1;
  }
}
而不是像这样

variables here
{
  private Jlist contactList;
  String [] contactArray;
  ArrayList <String> contactArrayList;
  ResultSet namesList


// constructor here

public whatever()
{
    GridLayout aGrid = new GridLayout(2,2,10,10);

    contact1 =  new String();
    contact2 =  new String();
    contact3 =  new String();

    contactArrayList = new ArrayList<String>();

// is something supposed too go in the () of this JList?
   contactList = new JList();

   contactArray = new String[5];

   from1 =new JLabel ("From: " + contactArray[1]);



gridlayout.add(components)// theres too many components to write onto SO.

}


// methods here

public void fillContactsGui()
{
    createConnection();
ArrayList<String> contactsArrayList = new ArrayList<String>();

    while (namesList.next())
    {
        contactArrayList.add(namesList.getString(1));
        ContactArray[1] = namesList[1];
    }
}
 public class test
{
  int i;

  public test()
  {
    i = 0;
 }

  public void addi()
  {
   i = i +1;
  }
}
public class test
{
  int i = 0;

  public test()
  {
   int i = 0;
  }


  public void addi()
  {
    int i = i +1;
  }
}

我正在试图找出初始化变量的正确方法。因为我每次使用它们时都会定义它们,所以不初始化东西的唯一问题是你会让自己面对空指针异常。理想情况下,您应该初始化构造函数中需要的所有内容,这样您就可以确保其他每个方法都可以使用。另一种方法是在调用方法之前检查对象是否为null(例如,if(list!=null&&list.size()>0))

不初始化对象的唯一问题是您会遇到null指针异常。理想情况下,您应该初始化构造函数中需要的所有内容,这样您就可以确保其他每个方法都可以使用。另一种方法是在调用方法之前检查对象是否为null(例如,如果(list!=null&&list.size()>0))

只要初始值已知,通常应尽快初始化变量。而不是

ArrayList<String> contactArrayList;

通常,只要初始值已知,就应该尽快初始化变量。而不是

ArrayList<String> contactArrayList;

由于不同的原因,可以在不同的位置初始化变量。例如,在示例代码中,您总是将联系人列表初始化为新的JList。这可以在“此处变量”部分中完成,如
private JList contactList=new JList()

contactArrayList看起来通常基于传递到构造函数中的参数,因此应该在构造函数中将这些项添加到它中。如果采用这种方法,那么contactArrayList应该声明为final。这将强制所有构造函数初始化列表。(如果您不想将其声明为最终版本,则需要在声明时以处理联系人列表的相同方式对其进行初始化。)


有时,在类的实例构造完成之前,字段不能(或不应该)初始化。在这些情况下,您必须非常小心地访问和使用字段,以确保它不会在未初始化状态下使用。

由于不同的原因,可以在不同的位置初始化变量。例如,在示例代码中,您总是将联系人列表初始化为新的JList。这可以在“此处变量”部分中完成,如
private JList contactList=new JList()

contactArrayList看起来通常基于传递到构造函数中的参数,因此应该在构造函数中将这些项添加到它中。如果采用这种方法,那么contactArrayList应该声明为final。这将强制所有构造函数初始化列表。(如果您不想将其声明为最终版本,则需要在声明时以处理联系人列表的相同方式对其进行初始化。)


有时,在类的实例构造完成之前,字段不能(或不应该)初始化。在这些情况下,您必须非常小心地访问和使用字段,以确保它不会在未初始化状态下使用。

本教程中回答了您的许多问题

您将了解到实例变量根据其类型初始化为默认值、何时使用静态初始值设定项、何时使用构造函数、关于继承的初始化等

以下是一些其他有价值的资源:


本教程将回答您的许多问题

您将了解到实例变量根据其类型初始化为默认值、何时使用静态初始值设定项、何时使用构造函数、关于继承的初始化等

以下是一些其他有价值的资源:

您的最后一个示例——带有“public test(){int i=0;}”的示例可能无法正常工作。通过在test和addi中重新定义变量“int”,您现在有三个名为“i”的变量:顶部定义的成员变量、test中的一个局部变量和addi中的另一个局部变量。两个函数都不会更改成员值

我绝对不会用伪值初始化变量,比如“contact1=newstring()”。是的,这可以防止未初始化变量出现编译错误,或者引发空指针异常。但是,如果您得到一个没有这个的错误,那么这一定意味着您没有将实际值放入变量中。设置虚拟值并不能解决问题,它只是隐藏了它。这就像在仪表板上的警示灯上贴胶带一样:是的,你再也看不到警告了,但这不是因为问题已经解决,而是因为你把它掩盖了

在某些情况下,设置一个默认值是有意义的,然后您可能会用其他值替换它,而您可能不会。我不是说这是一个坏习惯。我是说,如果单位化变量出现错误,不要盲目地将它们初始化为无意义的东西。找出他们没有价值的原因并解决真正的问题

除此之外,我不知道该怎么说你的例子。我不知道你想完成什么。您有名为contact1、contact2和contact3的变量,这些变量似乎从未使用过。contactArray显然应该由fillContactsGui填充,但我看不出它在哪里被调用过。我不确定这些是否是你逻辑中的缺陷,或者这只是一个不完整的例子

关于初始化和使用数据的一般正确方法:

如果变量可以是局部变量,则将其设为局部变量。在这种情况下,理想的情况是在您声明时初始化它