我们什么时候应该在Java中使用/不使用初始化?
为什么是int脸;在这段代码中没有初始化?什么时候应该使用或不使用初始化我们什么时候应该在Java中使用/不使用初始化?,java,initialization,Java,Initialization,为什么是int脸;在这段代码中没有初始化?什么时候应该使用或不使用初始化 import java.util.Random; public class RandomIntegers { public static void main( String[] args ) { Random randomNumbers = new Random( 3 ); int face; for( int counter = 1; counter
import java.util.Random;
public class RandomIntegers
{
public static void main( String[] args )
{
Random randomNumbers = new Random( 3 );
int face;
for( int counter = 1; counter <=20; counter++)
{
face = 1 + randomNumbers.nextInt( 6 );
System.out.printf("%d ", face );
if( counter % 5 ==0 )
System.out.println();
}
}
}
import java.util.Random;
公共类随机整数
{
公共静态void main(字符串[]args)
{
随机数=新随机数(3);
内面;
对于(int counter=1;counter声明字段时并不总是需要赋值。已声明但未初始化的字段将由编译器设置为合理的默认值。一般来说,此默认值将为零或空,具体取决于数据类型。但是,依赖此类默认值通常被认为是不好的编程风格-您应该始终初始化变量以确保可读性,并避免混淆/错误
默认情况下,int用0值初始化
话虽如此,您必须知道,局部变量略有不同;编译器从不为未初始化的局部变量指定默认值。如果无法在声明局部变量的位置初始化它,请确保在尝试使用它之前为它指定一个值。访问未初始化的局部变量将导致c文件时间错误
Oracle文档:实际上,这是一个有趣的问题
编译器看到face
仅在for循环中使用。因此,如果输入了for循环(在本例中就是这样),则face
将始终在使用它的地方进行初始化
如果在循环外部使用face
,则会出现错误,因为编译器认为循环可能未执行(尽管在您的情况下,始终是这样)。“已声明但未初始化的字段将由编译器设置为合理的默认值”…这并不总是正确的。JVM没有为声明为final
的局部变量和实例字段提供初始值,必须在使用前进行初始化。请参阅:值得考虑的是,初始化实例字段,尽管本质上是一个无操作(代码与未初始化相比没有逻辑变化)用于(并且仍然可能)导致不同的、更大的编译代码。