我想知道为什么有些数据类型可以在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
}
向向量中添加值在构造函数或函数内部工作,但为什么它不能像其他数据类型一样在外部工作?
答案 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
}
}