Java: 构造函数参数(double 类型)始终为 0

Java: constructor argument (type double) always 0

我有一个 class,它的构造函数有两个双精度类型的参数。

public class NetcdfHandler {

double x;
double y;

public NetcdfHandler (double x, double y){
    x = this.x;
    y = this.y;
}
}

当我在我的 Servlet 的 doGet 方法中调用它时,构造函数以某种方式不 "received" 给定的双精度值。这意味着在创建 NetcdfHandler 实例后,x 和 y 的值都为 0.0(但不是 "null"),尽管 "Lat" 和 "Lng" 设置正确:

public class Test extends HttpServlet {
    private static final long serialVersionUID = 1L;

    double Lat;
    double Lng;

public Test() {
        super();
    }

protected void doGet(HttpServletRequest req, HttpServletResponse rsp) throws ServletException, IOException {
        Lat = Double.parseDouble(req.getParameter("lat"));
        Lng = Double.parseDouble(req.getParameter("lng"));

        NetcdfHandler nc = new NetcdfHandler(Lat, Lng);
}

我想这是一个初学者的错误,但我无法弄清楚这里的问题是什么。也许有人可以提供帮助?

您的构造函数不正确。这样写:

public NetcdfHandler (double x, double y){
    this.x = x;
    this.y = y;
}

目前您正在做相反的事情:将默认字段值(0.0)放入参数中。因此在构造函数退出时字段不会更改并且参数会被遗忘。

如果您不打算在构建后更改字段 xy,最好将它们声明为 final:

final double x;
final double y;

这样更容易防止一些编程错误。特别是您的代码会导致编译错误,例如 "final field is not initialized in constructor".