Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.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,为什么是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

为什么是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 <=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
的局部变量和实例字段提供初始值,必须在使用前进行初始化。请参阅:值得考虑的是,初始化实例字段,尽管本质上是一个无操作(代码与未初始化相比没有逻辑变化)用于(并且仍然可能)导致不同的、更大的编译代码。