Java &引用;构造函数调用必须是构造函数中的第一条语句;错误

Java &引用;构造函数调用必须是构造函数中的第一条语句;错误,java,Java,我正在尝试创建一个构造函数,它接受一个字符串并构造一个日期对象。到目前为止,这是我的解决方案,但我遇到了以下错误: 构造函数调用必须是构造函数中的第一条语句 我意识到我需要这个(…)在做任何事情之前,但是当我需要首先填充日期字符串时,我该怎么做呢? 如何避免这个错误? 注意:要用字符串构造日期,它的格式为“月/日/年”首先需要调用this() 而是将赋值移动到私有方法 private void assginValues (int month, int day, int year){

我正在尝试创建一个构造函数,它接受一个字符串并构造一个日期对象。到目前为止,这是我的解决方案,但我遇到了以下错误:

构造函数调用必须是构造函数中的第一条语句

我意识到我需要
这个(…)
在做任何事情之前,但是当我需要首先填充日期字符串时,我该怎么做呢? 如何避免这个错误? 注意:要用字符串构造日期,它的格式为“月/日/年”

首先需要调用this()

而是将赋值移动到私有方法

private void assginValues (int month, int day, int year){
          m = month;
          d = day;
          y = year;  
}
如果还需要填充
日期字符串
,也可以使用此方法构建它

然后从两个构造函数调用该方法。确保接受字符串的构造函数不调用
this()
,因为共享方法负责赋值

您也可以在一行中完成所有操作,但随后多次调用
split()
,这是一种浪费:

this(Integer.parseInt(s.split("/")[0]), Integer.parseInt(s.split("/")[1]), Integer.parseInt(s.split("/")[2]));
this()
需要先调用

而是将赋值移动到私有方法

private void assginValues (int month, int day, int year){
          m = month;
          d = day;
          y = year;  
}
如果还需要填充
日期字符串
,也可以使用此方法构建它

然后从两个构造函数调用该方法。确保接受字符串的构造函数不调用
this()
,因为共享方法负责赋值

您也可以在一行中完成所有操作,但随后多次调用
split()
,这是一种浪费:

this(Integer.parseInt(s.split("/")[0]), Integer.parseInt(s.split("/")[1]), Integer.parseInt(s.split("/")[2]));

我发现避免这种情况的最好方法是使用静态工厂

public static Date MakeDate(String s) {
  dateStrings = s.split("/");
  return new Date(Integer.parseInt(dateStrings[0]), Integer.parseInt(dateStrings[1]),  
     Integer.parseInt(dateStrings[2]));
 }
看在警察的份上,我可能会让这项工作负担过重,只是为了避免一个工厂和一个建设者的怪诞

 private Date(int month, int day, int year) {
      m = month;
      d = day;
      y = year;  
  }

 public static MakeDate(int mont, int day, int year){
      //You can figure this part out
 }

这样做的一个好处是,你可以对这些工厂进行不同的命名,以明确它们的意图。在这种情况下可能没有必要,但这是一个很好的选择,特别是对于更复杂的类。

我发现避免它的最好方法是使用静态工厂

public static Date MakeDate(String s) {
  dateStrings = s.split("/");
  return new Date(Integer.parseInt(dateStrings[0]), Integer.parseInt(dateStrings[1]),  
     Integer.parseInt(dateStrings[2]));
 }
看在警察的份上,我可能会让这项工作负担过重,只是为了避免一个工厂和一个建设者的怪诞

 private Date(int month, int day, int year) {
      m = month;
      d = day;
      y = year;  
  }

 public static MakeDate(int mont, int day, int year){
      //You can figure this part out
 }

这样做的一个好处是,你可以对这些工厂进行不同的命名,以明确它们的意图。在这种情况下可能没有必要,但这是一个很好的选择,特别是对于更复杂的类。

此(…)
应该是构造函数中的第一行。但是,如果不首先填充
日期字符串,如何构造它呢?
此(…)
应该是构造函数中的第一行。但是,如果不首先填充
日期字符串,如何构造它呢?