为什么如果方法名与类名不同,这段Java代码无法工作?

4
package tut;
import java.awt.Graphics;
import javax.swing.JFrame;


public class javaconcepts extends JFrame
   {
      public void paint(Graphics g)
      {
              g.drawOval(100,50,50,50);
      }

public javaconcepts()
   {
    setSize(600,400);
    setDefaultCloseOperation(EXIT_ON_CLOSE);

   }
public static void main(String[] args)
   {
    javaconcepts guiWindow = new javaconcepts();
    guiWindow.setVisible(true);
   }    
}

抱歉,这是一个非常新手的问题,但我在教材中看到了一些代码,我不明白。教材版本创建了一个笑脸,但我只是复制了程序,以便显示一个简单的圆形。非常感谢您的帮助。
如果我将“public javaconcepts()”的名称更改为任何其他内容,则会出现错误,提示将其更改为void类型。将其更改为void类型会导致程序不执行“public javaconcepts()”括号中的内容。
我正在自学,所以没有老师可以问。谢谢。

5
因为构造函数必须要与类名相同。一旦你重命名了类,构造函数的名称就不再相同,因此编译器会将其视为具有无效语法的普通方法。 - sstan
2
另外,请熟悉Java命名规范。类名应该采用UpperCamelCase(因此,在您的示例中,class和构造函数应该是JavaConcepts而不是javaconcepts)。 - Mick Mnemonic
3个回答

4

public javaconcepts() 是一个特殊的 "方法"(见注释)- 构造函数。

那么为什么重命名后它不起作用呢?在Java中,构造函数不返回任何内容,并且它们的名称与封闭类的名称相同 - 因此,如果更改其中一个,代码将会出错。 如果您更改了类名,则构造函数将被破坏,因为它不是有效的常规方法 - 它没有返回类型。看一下这个方法的模式:

访问修饰符 返回类型 方法名称(参数)

构造函数是什么?

构造函数是一种使用关键字new调用的方法,它创建和初始化新对象。

它在这一行中使用: javaconcepts guiWindow = new javaconcepts();

构造函数定义来自: http://www.homeandlearn.co.uk/java/class_constructor.html

您可以使用的方法来设置字段变量的初始值。当 创建对象时,Java首先调用构造函数。然后将执行您在构造函数中编写的任何代码。您不需要 对构造函数方法进行任何特殊调用 - 当您创建新对象时,它们会自动发生。

[通过new关键字]


1
public javaconcepts()是一个特殊的方法 - 构造函数” - 根据Java语言规范第8.8章,“构造函数声明不是成员”,因此我不会说构造函数是一个方法。 - MC Emperor

0

0

因为它是一个构造函数。JLS-8.8. 构造函数声明中说到(部分内容如下):

ConstructorDeclarator 中的 SimpleTypeName 必须是包含构造函数声明的类的简单名称;否则会在编译时出现错误。

在其他方面,构造函数声明看起来就像没有结果的方法声明(§8.4.5)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接