Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从另一个构造函数调用默认构造函数_Java - Fatal编程技术网

Java 从另一个构造函数调用默认构造函数

Java 从另一个构造函数调用默认构造函数,java,Java,我应该使用用户提供的3个点创建一个三角形对象,如果该三角形不合法,则创建默认三角形。 这是一种使用默认方法创建默认值的“合法”方法,还是一种奇怪的场景,而不是人们做事的方式 public class Triangle private Point _point1; private Point _point2; private Point _point3; public Triangle() { _point1 = new Point(1,0); _point2 = new Po

我应该使用用户提供的3个点创建一个三角形对象,如果该三角形不合法,则创建默认三角形。 这是一种使用默认方法创建默认值的“合法”方法,还是一种奇怪的场景,而不是人们做事的方式

public class Triangle

private Point _point1;
private Point _point2;
private Point _point3;

public Triangle()
{
    _point1 = new Point(1,0);
    _point2 = new Point(-1,0);
    _point3 = new Point(0,1);
}

public Triangle(Point point1,Point point2,Point point3)
{
    if (isLegal(point1,point2,point3))
        {
        _point1 = new Point(point1);
        _point2 = new Point(point2);
        _point3 = new Point(point3);
        }
    else
        new Triangle();
}

允许有多个构造函数,一个构造函数可以调用另一个构造函数。这称为构造函数链接

在构造函数中使用this()引用同一类的另一个构造函数。使用super()引用超类的构造函数。传递给this或super的参数决定调用哪个构造函数

创建一个主构造函数,它接受您需要的所有参数。然后,您可以让二级构造函数调用另一个构造函数,传递默认值


对this()或super()的调用必须是构造函数中的第一条语句。这是你想做什么的问题。将验证与构造分开处理可能更好。

您可以这样解决您的问题(代码稍微清理一下):

最后用现有的点
p1
p2
3
,像这样创建
三角形:

final Triangle t = Triangle.isLegal(p1, p2, p3) ? new Triangle(p1, p2, p3) : new Triangle();

静态方法
isLegal
用于在调用构造函数之前检查参数。
构造函数内部的检查确保具有三个点的构造函数不会与非法参数一起使用。如果给定的点是“非法”的,则会抛出异常,如果未在某处捕获到异常,则会退出应用程序(Google:java exception)。

您可以使用
this()调用同一类的默认构造函数作为构造函数的第一行。也就是说,一个更好的方法可能是让另一个构造函数使用您想要的默认值调用3参数构造函数。这是“合法的”,也是一个奇怪的场景。一般来说,如果你试图创建一个参数不正确的对象,它会抛出一个IllegalArgumentException,而不是给你一个意外的结果。例如,如果您尝试创建一个初始容量为负的
ArrayList
。但这听起来像是教你关于构造函数的作业,所以这可能有点做作。@azurefrog是的,这项作业是教你关于构造函数的,最初“else”下的代码只是我创建的默认构造函数的副本。由于这是对同一代码图的重复使用,我不妨调用另一个构造函数。您的代码看起来不太像Java代码(
{
在新行中),
\uu
作为变量前缀)。您是这样学的吗?@Datz{在新行中是我高中学C时的习惯,我喜欢它,因为它更容易注意到我是否漏掉了一个。把uu视为变量是前缀,是的,这是他们希望我这样做的,但只是在object方法下,在main()中,我应该使用em作为普通单词(而且期末考试总是大写).我不理解抛出新的IllegalArgumentException(“点是非法的”);这不是我们到目前为止学到的东西,我怀疑我能使用它。此外,我也不知道最后的三角形t=Triangle.isLegal(p1,p2,p3)?新三角形(p1,p2,p3):新三角形();goes(?)@Croompy我添加了一些解释,并改进了无参数构造函数以使用
this(…)
您想要使用的内容
final Triangle t = Triangle.isLegal(p1, p2, p3) ? new Triangle(p1, p2, p3) : new Triangle();
Triangle t;
if(Triangle.isLegal(p1, p2, p3)) {
    t = new Triangle(p1, p2, p3);
} else {
    t = new Triangle();
}