2015-07-19 35 views
0

编译器说illegal modifier for parameter i
请告诉我我做错了什么。为什么我不能在Java构造函数中使用静态变量?为什么我不能在java构造函数中使用静态变量?

class Student5{ 

    Student5() { 
     static int i = 0; 
     System.out.println(i++); 
    } 

    public static void main(String args[]){ 
     Student5 c1 = new Student5(); 
     Student5 c2 = new Student5(); 
     Student5 c3 = new Student5(); 
    } 
} 
+0

请正确格式化您的代码和问题。 – Turing85

+1

[在构造函数中初始化静态final字段]的可能重复(http://stackoverflow.com/questions/5093744/initialize-a-static-final-field-in-the-thetructor) –

回答

4

因为你在哪里声明i的:

Student5(){ 
    static int i=0; 
    System.out.println(i++); 
} 

,编译器将其作为构造函数的局部变量: 局部变量不能被声明为static。有关本地变量允许使用哪些修饰符的详细信息,请参阅Section 14.4 of the Java Language Specification

从出现什么样的代码是试图做判断,你可能想i是的Student5静态成员,而不是在构造函数中的局部变量:

class Student5{ 
    private static int i = 0; 

    Student5(){ 
     System.out.println(i++); 
    } 

. . . 
} 
0

这就是语言是如何设计的。什么,如果你想有另一场int名为i在构造函数?然后i应考虑?另外,在调用构造函数之前初始化静态字段,即在类初始化阶段阶段。只有在创建新实例时才会调用构造函数。

想象一下,如果你加载和初始化一个类但不是创建一个新实例会发生什么(应该发生)。

1

如果你想声明static变量然后声明它的构造之外,在一流水平这样的 -

public class Student5{ 

    private static int i; 

} 
static

您声明发生在你的构造函数是一个局部变量和局部变量不能static。这就是为什么你越来越 - illegal modifier for parameter i。最后初始化变量static您可以使用一个静态初始化块(尽管它不是强制性的) -

public class Student5{ 

    private static int i; 

    static { 
     i = 5; 
    } 

} 
0

静态变量是可以在不具有类的实例引用变量。通过定义一个而不是一个构造函数,当你创建一个类的实例时会调用这个构造函数,这是矛盾的。要么定义它没有一个实例(在构造函数和静态之外),要么将它定义为一个实例(在构造函数内而不是静态的)。

你可能想重新考虑你实际上想要做什么以及你是否真的需要一个静态变量。

相关问题