小编典典

Java默认值混乱,为什么没有函数作用域变量?

java

我对背后似乎是不一致的原因感到困惑。

例如

public class Test
{
    static int a;
    public static void main(String[] args)
    {
        System.out.println(a);
    }
}

因此,将按预期打印出0。但是说我们有这个

public class Test
{

    public static void main(String[] args)
    {
        int a;
        System.out.println(a);
    }
}

抱怨a尚未初始化,因此无法为我编译。我期望它能打印出0 …

这使我想到了一些问题:

1)为什么作用域变量没有默认值?

2)请问static关键字是原因吗?又为什么呢


阅读 209

收藏
2020-11-23

共1个答案

小编典典

Java语言规范解释了变量的默认初始值

每个类变量,实例变量或数组组件在创建时都会用默认值初始化(第15.9节,第15.10节):

对于字节类型,默认值为零,即(byte)0的值。

对于short类型,默认值为零,即(short)0的值。

对于int类型,默认值为零,即0。

对于long类型,默认值为零,即0L。

对于float类型,默认值为正零,即0.0f。

对于double类型,默认值为正零,即0.0d。

对于char类型,默认值为空字符,即’\ u0000’。

对于布尔类型,默认值为false。

对于所有引用类型(第4.3节),默认值为null。

并指出

必须在使用局部变量(第14.4节,第14.14节)之前通过初始化(第14.4节)或赋值(第15.26节)为它明确赋一个值,并可以使用确定赋值规则(第§1节)进行验证。
16)。

您的两个问题都可以通过“因为JLS如此回答”来回答。

更完整的答案如下:

类是状态和行为的描述。对象是实际数据。如果创建对象,则该对象必须具有确定的状态,不能处于未初始化状态。

2020-11-23