为什么某些Java数据类型可以在声明中初始化而其他Java数据类型不能?

时间:2015-12-11 17:47:13

标签: java

我想知道为什么有些数据类型可以在Java中同时初始化和声明,而其他数据类型不能?

例如,可以在任何构造函数之外立即初始化字符串和int数据类型。

// This works fine
public class SomeClass {
    String someString = "This variable is initialized";
    int someInt = 5;
}

这不起作用,这里的数据类型是矢量:

public class SomeClass {
    Vector<String> someVector = new Vector<>();
    someVector.add("Test"); // This doesn't work
}

向向量中添加值在构造函数或函数内部工作,但为什么它不能像其他数据类型一样在外部工作?

4 个答案:

答案 0 :(得分:2)

您可以将变量声明放在类中,但不能放在语句中。你可以使用:

public class SomeClass {
    Vector<String> someVector = new Vector<>();
    { // this is implicitly part of the constructor function
        someVector.add("Test");
    }
}

答案 1 :(得分:1)

public class SomeClass {
    String someString = "This variable is initialized";
    int someInt = 5;
    someInt++;  // this won't work..why??
}

++ for integer variable和add for Vector类似。你只能创建/声明/初始化对象/原语。

someVector.add( “测试”);


这里你试图使用方法操纵对象。这不是初始化。这需要在某种方法中。
您已经在

中创建了对象
`Vector<String> someVector = new Vector<>();`//create an empty vector that will be used to store multiple String objects


它必须在一个方法中,因为java纯粹是面向对象的语言。您需要使用类和方法。您正在创建一个全局变量。现在,只有在需要包含一些数据的情况下,才可以在方法或构造函数内部进行此操作。

答案 2 :(得分:1)

当你打电话时,

class SomeClass只是声明某个对象 SomeClass var = new SomeClass(),jvm定义此对象的内存及其所有属性。

因此,如果你有private int prop编译器将在ram中定义32位。 private int prop = 10只是意味着您使用值10来初始化此内存单元格。 但是,在此步骤中,您无法对此属性执行任何操作。

同样,您可以使用默认值声明Vector:

  public String[] a = new String[]{"1"};
  public Vector<String> v = new Vector<>(Arrays.asList(a));
  //equal, but with one variable
  public Vector<String> v = new Vector<>(Arrays.asList(new String[]{"1"}));

答案 3 :(得分:0)

这个someVector.add("Test");是一个调用语句而不是一个初始化,你可以声明一些对象或一些变量并初始化它们,但是call方法语句应该在这样的方法中:

 public class SomeClass {
    Vector<String> someVector = new Vector<>();
    public void someMethod(){
    someVector.add("Test"); // This does work
    }
  }