【问题标题】:Default values in java [duplicate]java中的默认值[重复]
【发布时间】:2014-01-06 05:27:27
【问题描述】:

您好,我有以下代码。当我使用实例变量时,我得到如下输出(默认值)

int value: 0
float value: 0.0
String value: null
Static int value: 0

但是,如果我尝试声明局部变量并打印默认值,则会给出一个应该初始化变量的错误。谁能解释一下原因?

public class DefaultValues {
  int a;
  float b;
  String c;
  static int d;
  public static void main(String[] args) {      
    int e;                                     // <----
    DefaultValues dv = new DefaultValues();
    System.out.println("int value: "+dv.a);
    System.out.println("float value: "+dv.b);
    System.out.println("String value: "+dv.c);
    System.out.println("Static int value: "+d);
    System.out.println("local int value: "+e); // <----
  }
}

【问题讨论】:

  • 局部变量没有默认值。它们必须在使用前进行初始化。

标签: java initialization instance-variables local-variables


【解决方案1】:

只有实例变量、静态(类)变量和数组组件被初始化为默认值。

局部变量不能被使用,除非它们被初始化,因为它们没有被赋予默认值。

【讨论】:

  • 是数组你是想说别的吗?
  • 是的数组初始化器创建一个数组并为其所有组件提供初始值根据 JLS。
  • 哦,现在明白了。谢谢!
【解决方案2】:

来自Java Language Specification 3.0, 4.12.5变量的初始值:

必须明确地给局部变量(§14.4、§14.14)一个值 在使用之前,通过初始化(§14.4)或赋值 (§15.26),编译器可以使用 明确分配的规则(§16)。

【讨论】:

    【解决方案3】:

    我们可能有未初始化的本地变量,但编译器不允许使用,除非我们明确初始化它们。这是 Java 语言规则。见 JLS 4.12.5。变量初始值http://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html

    •必须明确地为局部变量(第 14.4 节、第 14.14 节)赋值 在使用之前,通过初始化(§14.4)或赋值 (§15.26),以一种可以使用明确规则验证的方式 分配(§16)。

    【讨论】:

      【解决方案4】:

      对于类成员(变量),JVM 将放置默认值或将其初始化为默认值,对于局部变量,它使您在访问变量之前分配和初始值。

      来自文档:

      声明字段时并不总是需要赋值。 已声明但未初始化的字段将设置为 编译器的合理默认值。一般来说,这个默认 将为零或空,具体取决于数据类型。依靠这样的 然而,默认值通常被认为是糟糕的编程 风格。

      您可以查看Primitive Data Types 中不同数据类型的默认值以获取有关类成员默认值的更多信息。

      【讨论】:

        猜你喜欢
        • 2014-02-25
        • 2016-10-31
        • 2010-11-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多