You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java报错‘PriorityTable(String,String)构造器未定义’但已定义的问题

问题原因分析与解决方案

哥们儿,你踩了Java构造方法的一个经典语法坑——错误地给构造方法添加了void返回值类型,这直接导致你定义的两个“构造器”其实都是普通方法,编译器根本不把它们当成构造器看待,所以才会提示找不到PriorityTable(String,String)构造器。

核心问题拆解

  1. 构造方法的语法规则
    Java里的构造方法必须满足两个硬性条件:
  • 方法名和类名完全一致(大小写也要严格匹配)
  • 绝对不能有返回值类型,包括void

你写的代码里:

public void PriorityTable(){...} 
public void PriorityTable(String letters, String level){...}

这两个都是带void的普通方法,不是构造器。此时编译器会认为你的类没有显式定义任何构造器,同时因为你手动写了普通方法,Java不会自动生成默认的隐式无参构造器,所以不管你怎么调用,都找不到匹配的构造器。

  1. 构造器内部调用的错误方式
    就算你修复了返回值的问题,直接写PriorityTable();来调用无参构造也是错的——这会被当成普通方法调用,而不是构造器调用。正确的做法是用this();,而且这条语句必须是构造方法的第一条语句。

修正后的代码示例

public class PriorityTable {
    // 无参构造器:没有返回值类型
    public PriorityTable() {
        // 你的初始化逻辑
        ...
    }

    // 带参数的构造器:同样没有返回值类型
    public PriorityTable(String letters, String level) {
        // 调用无参构造器,必须放在第一行
        this();
        // 处理参数相关的初始化逻辑
        ...
    }
}

// 现在创建对象就可以正常编译了
PriorityTable pTable = new PriorityTable(s, startExp);

为什么注释掉无参调用还是报错?

因为本质问题没解决——带参数的那个方法依然是普通方法,不是构造器,编译器还是找不到你要调用的PriorityTable(String,String)构造器,所以错误会持续存在。

内容的提问来源于stack exchange,提问作者Matt Waits

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 04:13:43