为什么我可以两次声明变量的数据类型?

Bob*_*ith 3 java variables types class object

在下面的代码中:

public class Square 
{
    private double side;

    public Square(double a) 
    {
        double side = a;
    }

    public double area()
    {
        return side * side;
    }

    public static void main(String[] args) 
    {
        Square r = new Square(10.0);
        System.out.println(r.area());
    }
}
Run Code Online (Sandbox Code Playgroud)

声明字段时:

 private double side;
Run Code Online (Sandbox Code Playgroud)

然后在构造函数中:

double side = a;
Run Code Online (Sandbox Code Playgroud)

为什么不抛出错误?

我认为是因为我们两次声明了变量 double 的数据类型。为什么会执行这段代码?

Fed*_*oca 5

因为第二个声明了一个局部于构造函数的变量。它掩盖了成员变量(您仍然可以通过 访问它this.side)。

在这种情况下,该声明完全无用,因为该变量将在构造函数结束后立即消失。

此外,即使这是一个问题,它也不会抛出运行时错误。这将是一个编译时错误。