2010-09-12 82 views
1

您好我在java中有初始化问题,下面的代码给我编译错误称为:expected instanceInt = 100;但我已经宣布了它。如果这些东西堆和栈的东西涉及请深入浅出的讲解,我新手Java和我对这些区域没有先进的知识Java实例变量在两个语句中声明和初始化


public class Init { 

int instanceInt; 
instanceInt = 100; 

    public static void main(String[] args) { 

    int localInt; 
    u = 9000; 
    } 

} 
+0

谢谢大家,非常感谢您的帮助 – ddfnfal 2010-09-15 17:28:33

回答

8

您不能在班级中使用语句。它必须与您的声明在同一行或同一行。


通常的方法可以做到你想要的是那些:

  • 声明中初始化

    public class MyClass{ 
        private int i = 0; 
    } 
    

    通常这是一个好主意,如果你想定义您的字段的默认值。

  • 在构造块

    public class MyClass{ 
        private int i; 
        public MyClass(){ 
         this.i = 0; 
        } 
    } 
    

    此块初始化可以,如果你想有一些逻辑(如果/循环)所在领域的初始化过程中使用。它的问题是,你的构造函数会互相调用,或者它们都具有基本相同的内容。
    在你的情况下,我认为这是最好的方法。

  • 的方法块

    public class MyClass{ 
        private int i; 
        public void setI(int i){ 
         this.i = i; 
        } 
    } 
    

    它的初始化不是一个真正的初始化,但是只要你愿意,你可以设置你的价值。

  • 在实例初始化块

    public class MyClass{ 
        private int i; 
        { 
         i = 0; 
        } 
    } 
    

    当构造是不够的(见构造块注释),但通常开发商倾向于避免这种形式使用这种方式初始化。


资源:

关于同一主题:


奖励:

这说明什么码?

public class MyClass { 
    public MyClass() { 
     System.out.println("1 - Constructor with no parameters"); 
    } 

    { 
     System.out.println("2 - Initializer block"); 
    } 

    public MyClass(int i) { 
     this(); 
     System.out.println("3 - Constructor with parameters"); 
    } 

    static { 
     System.out.println("4 - Static initalizer block"); 
    } 

    public static void main(String... args) { 
     System.out.println("5 - Main method"); 
     new MyClass(0); 
    } 
} 

The answer

+0

您的回答链接已经过期。你能否请在实际的文章中包含这些信息? – apraetor 2016-09-14 18:19:05

1

你不能有一个单独的语句来赋值给宣布区的集体成员。你必须从一个函数做到这一点,通常是一个类方法。

对于您的情况,请尽快在您声明的情况下完成任务。

3

把它放在一个初始化块中。

public class Init { 

    int instanceInt; 
    { 
    instanceInt = 100; 
    } 

    public static void main(String[] args) { 
    int localInt; 
    int u = 9000; 
    } 
} 

或者干脆初始化而它声明:

public class Init { 

    int instanceInt = 100; 

    public static void main(String[] args) { 
    int localInt; 
    int u = 9000; 
    } 
} 

参考文献:

1

你需要做的:

int instanceInt = 100; 

如果是static,你可以在一个static块初始化。

0

按照Java Language Specification

类体可以包含声明的类的成员的 ,即, 字段(§8.3),类( §8.5), 接口(§8.5)和方法(§8.4)。 类的主体还可能包含类的构造函数(§8.8)的初始值设定项(§8.6),静态 初始值设定项(§8.7)和声明 的实例 。

然而,该声明

instanceInt = 100; 

是没有这些东西,因此不允许作为一类身体的一部分。什么,你需要做的是这样的:

int instanceInt = 100; 

这是允许的,因为它是一个字段声明包括变量初始化