Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.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_Initialization - Fatal编程技术网

java中的变量初始化

java中的变量初始化,java,initialization,Java,Initialization,我是java初学者,我想澄清一下变量初始化的概念。这是密码-- 通过连续两次调用myTest()方法,输出为1和4。所以我知道n的默认值是0。因此,对于myTest()的第一次调用,n将增加一个结果1,然后执行乘法行,即1*1,即1 对于myTest()的下一次调用,n最初是1,然后它将增加到2,然后是乘法,即2*2,即4 现在我正努力做到这一点-- 这里它给出了编译器错误,即m未初始化,这是显而易见的。所以我的问题是——在我创建myTest()方法的第一个选项中,编译器为什么不抱怨呢。在这里,

我是java初学者,我想澄清一下变量初始化的概念。这是密码--

通过连续两次调用myTest()方法,输出为1和4。所以我知道n的默认值是0。因此,对于myTest()的第一次调用,n将增加一个结果1,然后执行乘法行,即
1*1
,即
1

对于myTest()的下一次调用,n最初是1,然后它将增加到2,然后是乘法,即
2*2
,即
4

现在我正努力做到这一点--

这里它给出了编译器错误,即m未初始化,这是显而易见的。所以我的问题是——在我创建myTest()方法的第一个选项中,编译器为什么不抱怨呢。在这里,我不初始化
n
的值。是编译器在进行初始化吗?我想得到澄清

是编译器在进行初始化吗

n
NumberSequence
类的静态字段,如果未初始化,则默认情况下将用零初始化。但是,
m
是一个方法局部变量,您需要显式初始化它

是编译器在进行初始化吗


n
NumberSequence
类的静态字段,如果未初始化,则默认情况下将用零初始化。但是,
m
是一个方法局部变量,您需要显式初始化它

我认为static关键字默认为n为0。在你的第二个程序中,你只有“int m”

我认为static关键字默认为n为0。在第二个程序中,您只有“int m”

,因为编译器无法检查
静态变量是否在编译时初始化,它会为它们提供初始值

另一方面,局部变量应该而且必须在使用前进行初始化,编译器可以为您检查这一点,如果不进行初始化,则会出现错误

请注意,该变量是初始化的,因为它是一个类成员,因此它将获得其默认值,
int
s的默认值为0。

由于编译器无法检查
静态
变量是否在编译时初始化,因此它将为它们提供初始值

另一方面,局部变量应该而且必须在使用前进行初始化,编译器可以为您检查这一点,如果不进行初始化,则会出现错误


请注意,该变量是初始化的,因为它是一个类成员,因此它将获得其默认值,
int
s的默认值为0。

默认情况下,所有类或实例字段都初始化为
0、0.0、null
等。 默认情况下,所有局部变量都不会初始化

public class NumberSequence {
  // Static field is initailized to 0 by default
  private static int n; 

  public static void main(String[] args) {
    // Quite OK: n being a static field is initialized to zero
    n = n * n;

    // local variable, aren't initialized 
    // (so it contains trash)
    int m;
    // Attempt to use trash value (since m hasn't been initialized so far) 
    // results in compiler warning/error 
    int n = m * m;

默认情况下,所有类或实例字段都初始化为
0、0.0、null
等。 默认情况下,所有局部变量都不会初始化

public class NumberSequence {
  // Static field is initailized to 0 by default
  private static int n; 

  public static void main(String[] args) {
    // Quite OK: n being a static field is initialized to zero
    n = n * n;

    // local variable, aren't initialized 
    // (so it contains trash)
    int m;
    // Attempt to use trash value (since m hasn't been initialized so far) 
    // results in compiler warning/error 
    int n = m * m;

问题是为什么?:)我没有投反对票。@Sanbhat:我的解释有什么问题?@Sanbhat我想问题是“为什么编译器没有抱怨”,答案是“变量初始化为零”。为什么静态变量初始化为零似乎是另一个问题。你的答案没有错(因此我没有投反对票)。我想OP想知道为什么未初始化的实例变量是可以的?我认为OP知道如果uninitialized@KugathasanAbimaran
n
初始化为零,因为它是静态字段,而不是实例字段。问题是为什么?:)我没有投反对票。@Sanbhat:我的解释有什么问题?@Sanbhat我想问题是“为什么编译器没有抱怨”,答案是“变量初始化为零”。为什么静态变量初始化为零似乎是另一个问题。你的答案没有错(因此我没有投反对票)。我想OP想知道为什么未初始化的实例变量是可以的?我认为OP知道如果uninitialized@KugathasanAbimaran
n
初始化为零,因为它是一个静态字段,不是一个实例字段。请看,您可能还想看我猜这个问题已经问过了:请看,您可能还想看,我猜这个问题已经问过了:它与
静态
无关。任何字段、
static
或普通的非
static
实例字段都是用变量类型的默认值初始化的。@ErwinBolwidt我没有引用实例字段。请看问题和我的答案。@marounnaround完全正确,这就是问题所在。您说过“由于编译器无法检查静态变量是否在编译时初始化,因此它会为静态变量提供初始值。”但是编译器为它们提供初始值的事实与变量是静态的这一事实无关。@ErwinBolwidt但是
static
变量被初始化,即使它们在一个方法中:)我所说的没有错,但会添加注释。这与
静态
无关。任何字段、
static
或普通的非
static
实例字段都是用变量类型的默认值初始化的。@ErwinBolwidt我没有引用实例字段。请看问题和我的答案。@marounnaround完全正确,这就是问题所在。您说过“由于编译器无法检查静态变量是否在编译时初始化,因此它会为静态变量提供初始值。”但是编译器为它们提供初始值的事实与变量是静态的这一事实无关。@ErwinBolwidt但是
static
变量被初始化,即使它们在一个方法中:)我说的没有错,但是会的
public class NumberSequence {
  // Static field is initailized to 0 by default
  private static int n; 

  public static void main(String[] args) {
    // Quite OK: n being a static field is initialized to zero
    n = n * n;

    // local variable, aren't initialized 
    // (so it contains trash)
    int m;
    // Attempt to use trash value (since m hasn't been initialized so far) 
    // results in compiler warning/error 
    int n = m * m;