当前位置: 首页 > 知识库问答 >
问题:

用与类的名称相同的名称命名构造函数与用随机名称命名构造函数之间的区别

易昌翰
2023-03-14

我想问一下java编程语言,具体到构造函数。假设我们有一个类测试,在那里我们测试整个程序,和类点,在那里定义构造函数(集和获取方法btw)。类行:

public class Test {

    public static void main(String[] args) {
        
        
        Point p = new Point();
        

        p.setX(10);
        System.out.println("X coordinate point1: " + p.getX());
        p.setY(20);
        System.out.println("Y coordinate point1: " + p.getY());
}

类点:

public void setX(int x) {
        this.x = x;
    }

    public int getX() {
        return x;
    }

    public int getY() {
        return y;
    }

    public void setY(int y) {
        this.y = y;
    }

现在,如果我在构造函数中输入类点的名称,那将是一个错误:

public void Point(intx){this.x=x;}

public int Point(int x)

{this.x=x;}

从逻辑上讲,我想我只需要在main方法中重命名构造函数的名称,但我还是不太确定。

我将构造函数的名称重命名为类Point,也重命名为主方法,但是,正如我所想的,由于某种原因,它是错误的。它没有直接显示错误描述


共有2个答案

巢安澜
2023-03-14

构造函数没有返回类型。例如,

public Point(int x, int y) {
    this.x = x;
    this.y = y;
}

试图这样定义它。。。

public int Point(int x) {}

...实际上是声明一个方法,只是与类的名称混淆。

傅俊德
2023-03-14

嗯,我想你对构造函数感到困惑。他们有两个要求:

  • 它们必须与封闭类同名
  • 它们没有返回类型

所以不,ulualPoint()永远不是一个构造函数,而且在Point类中,除了Point之外的任何东西都不会是一个构造函数。

请注意,编写void Point()仍然有效(不幸的是),但它不是一个构造函数,只是一个常规方法,碰巧与它的封闭类同名。编译器可以区分它们,因为它们的用法从来都不含糊。但是,您永远不应该给方法起与封闭类相同的名称,因为它既令人困惑,又违反了Java命名约定。

还要注意,如果您不定义任何构造函数,编译器会自动为您生成一个无参数构造函数。

所以这个:

class Point {
    public void setX(int x) { this.x = x; }
    public void setY(int y) { this.y = y; }
    public int getX() { return x; }
    public int getY() { return y; }
}

相当于:

java prettyprint-override">class Point {

    public Point() { }

    public void setX(int x) { this.x = x; }
    public void setY(int y) { this.y = y; }
    public int getX() { return x; }
    public int getY() { return y; }
}
 类似资料:
  • 我不太清楚kotlin是如何管理属性名和主构造函数参数名的。如果我写了相同的属性名和参数名,那么kotlin编译器会给出一个错误。 它给出了这个错误。 但是,当我更改属性的名称或更改主构造函数的参数名称时,代码将工作并编译。 这将工作或编译罚款。 这背后的原因是什么?为什么主构造函数的参数名和属性名不能相同?

  • 问题内容: 在我的Java应用程序中,我使用第三方库。 但是,我发现有些奇怪,有一些嵌套的程序包,有些类的名称可能与程序包的名称相同。 恐怕我不清楚。这是一个例子: 包 在“ com.xx.a”内部有一个名为“ a”的类。 因此,如果我想将此类称为“ a” … 我写: 然后,IDE将认为我的意思是软件包“ com.xx.a.a”。 那我就不能打电话了。 我想知道为什么? 顺便说一句,图书馆提供者似

  • 问题内容: 学术界认为表名应该是存储其属性的实体的单数形式。 我不喜欢任何需要在名称两边加上方括号的T-SQL,但是我将表重命名为单数,永远判刑那些使用该表的人有时不得不使用方括号。 我的直觉是保持单数形式更正确,但我的直觉也认为方括号表示不受欢迎的内容,例如列名中带有空格等。 我该留下还是该走? 问题答案: 就“标准”而言,其他人给出了很好的答案,但我只想补充一下……“用户”(或“用户”)是否可

  • 有没有一种方法可以在Haskell中有类似于创建“构造函数别名”的东西?我的想法与类型别名类似,您可以给类型一个不同的名称,但它仍然以别名类型的方式表现。 我的用例是一个系统,其中我有一个指定的时间作为我要建模的一些对象的属性,所以。其中一些可能是“可变”时间,这意味着它可能还没有被分配一个时间,或者它拥有的时间是“可移动的”。所以。 我非常肯定我对Haskell非常了解,可以说不存在构造函数别名

  • 问题内容: 有没有一种方法可以给定类名称(动态)来创建特定类的实例,并将参数传递给其构造函数。 就像是: 的构造函数的参数在哪里? 问题答案: 是的,类似: 当然,这仅适用于单个字符串参数,但是你可以轻松地对其进行修改。 注意,类名必须是完全合格的,即包括名称空间。对于嵌套类,你需要使用美元(因为这是编译器使用的美元)。例如: 要获得该Class对象,你需要。

  • 我需要填写时间偏移的方法,但使用类名作为参数名,我不知道如何做到这一点我已经尝试将变量添加在一起,但我得到错误说"你不能将时间转换为int" 所以我不知道该怎么办,请尽快回复谢谢! 错误类型: