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

时间:2015-09-20 12:37:30

标签: java constructor arguments double

我有一个带有一个带有两个double类型参数的construktor的类。

public class NetcdfHandler {

double x;
double y;

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

当我在我的Servlet的doGet方法中调用它时,给定的double值在某种程度上不会被构造函数“接收”。这意味着在创建NetcdfHandler的实例后,虽然“Lat”和“Lng”设置正确,但x和y都具有值0.0(但不是“null”):

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);
}

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

1 个答案:

答案 0 :(得分:4)

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

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

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

如果您在施工后不打算更改字段xy,最好将其声明为最终字段:

final double x;
final double y;

这样可以更容易地防止一些编程错误。特别是您的代码会导致编译错误,例如“最终字段未在构造函数中初始化”。