我正在NetBeans上工作,并面临以下通知。
1)当我声明和初始化private final int a=3;
Netbeans通知我移动初始化构造函数为什么?
2)当我声明并初始化private int a=3;
时,Netbeans通知我field can be final
,直到我在构造函数中初始化它。即使在Instance Members Block
中初始化也会导致相同的问题。
帮忙吗?为什么我会收到这些通知?
1)代码public class Testing
{
private final int a=3;
static{
System.out.println("Static Block");
}
Testing(){
System.out.println("Constructor");
}
public static void main( String args[])
{
Testing obj=new Testing();
}
}
2)代码public class Testing
{
private int a;
static{
System.out.println("Static Block");
}
{
this.a=0;
System.out.println("Instance Member Initializer");
}
Testing(){
this.a = 3; // when I remove this I got 1) Problem
System.out.println("Constructor");
}
public static void main( String args[])
{
Testing obj=new Testing();
}
}
private final int n=3;
由于变量不是static,即在类级别。
NetBeans要求你把它放在构造函数中。这不是错误,只是指南。
Oracle java doc
public class BedAndBreakfast {
// initialize to 10
public static int capacity = 10;
// initialize to false
private boolean full = false;
}
当初始化值可用且初始化可以放在一行中。然而,这种形式初始化由于其简单性而具有局限性。如果初始化需要一些逻辑(例如,错误处理或For循环来填充一个复杂的数组),简单的赋值是不够的。实例变量可以在构造函数中初始化,其中error可以使用处理或其他逻辑。来提供相同的功能对于类变量,Java编程语言包括static初始化块。