【问题标题】:Java error : cannot find symbol even if the .class file are all in the same directoryJava 错误:即使 .class 文件都在同一个目录中,也找不到符号
【发布时间】:2013-08-20 15:07:03
【问题描述】:

我定义了一个类 TestoMessaggi 和一个名为 Messaggio 的子类

//esercizio 3.3 del libro

import javax.swing.JOptionPane;

public class TestoMessaggio {
        private String code;
        private String testo;

        public TestoMessaggio(String c, String t) {
                code = c;
                testo = t;
                }

        public static TestoMessaggio creaTestoMessaggio() {
                String co = JOptionPane.showInputDialog(null,"inserisci codice");
                String te = JOptionPane.showInputDialog(null,"inserisci testo");
                TestoMessaggio t1 = new TestoMessaggio(co,te);
                return t1;
                }

        public String getCode() {
                return code;
                }

        public String getTesto() {
                return testo;
                }

        }

这里是 Messaggio.class

    public class Messaggio extends TestoMessaggio {

    private String mittente;
    private String destinatario;

    public Messaggio(String c, String t,String m, String d) {
            super(c,t);
            mittente = m;
            destinatario = d;
            }

    public String getDestinatario() {
            return destinatario;
            }

    public String getMittente() {
            return mittente;
            }

    public void setDestinatario(String d) {
            destinatario = d;
            }

    public static void stampaMessaggio(Messaggio m) {
            System.out.println("code : "+m.getCode());
            System.out.println("testo : "+m.getTesto());
            System.out.println("destinatario : " +m.getDestinatario());
            System.out.println("mittente : " +m.getMittente());
            }

    }

我创建了一个程序来测试这两个类:这是代码

//esercizio 3.5 del libro

import javax.swing.JOptionPane;


public class Esempio3_5 {

        public static String leggiNumero() {
                String num = JOptionPane.showInputDialog(null,"inserisci numero");
                return num;
                }

        public static void main(String[] args) {

                String m = leggiNumero();
                TestoMessaggio t1 = creaTestoMessaggio(); // non trova il metodo
                String d = leggiNumero();
                Messaggio mex = new Messaggio(null,null, m,d);
                stampaMessaggio(mex); // nn trova il metodo
                }
        }

当我尝试编译时出现此错误

Esempio3_5.java:16: error: cannot find symbol
    TestoMessaggio t1 = creaTestoMessaggio(); // non trova il metodo
                        ^
symbol:   method creaTestoMessaggio()
location: class Esempio3_5
Esempio3_5.java:19: error: cannot find symbol
    stampaMessaggio(mex); // nn trova il metodo 
    ^

符号:方法stampaMessaggio(Messaggio) 地点:Esempio3_5班

所有 3 个文件都在同一个目录中。有什么建议?提前致谢

【问题讨论】:

    标签: java class compiler-errors symbols


    【解决方案1】:

    你需要访问类名上的静态方法:

    TestoMessaggio t1 = TestoMessaggio.creaTestoMessaggio();
    

    您使用的代码:

    TestoMessaggio t1 = creaTestoMessaggio();
    

    相当于:

    TestoMessaggio t1 = Esempio3_5.creaTestoMessaggio();
    

    因为您在static 上下文中使用它。现在,很明显你在Esempio3_5 类中没有那个方法,所以它失败了。


    同样,将另一行改为:

    Messaggio.stampaMessaggio(mex);
    

    但是 IMO,您应该覆盖 Messaggio 中的 toString 方法,而不是提供 static stampaMessaggio() 方法。

    【讨论】:

    • 好吧,我认为我不应该使用 (.),因为它是一种静态方法……我错了吗?
    • @MickHardins。好吧,如果你正在调用同一个类的静态方法,那么你不需要用类名来限定它。但是如果你正在调用其他类的静态方法,那么你必须使用限定名。
    【解决方案2】:

    它没有从其他类中获取函数。尝试使用 dot(.)opertaor 将它们关联起来,例如 TestoMessaggio t1 = TestoMessaggio.creaTestoMessaggio();

    【讨论】:

      【解决方案3】:

      你的错误说:

      Esempio3_5.java:19: error: cannot find symbol
          stampaMessaggio(mex); // nn trova il metodo 
      

      我在Esempio3_5 中没有看到stampaMessagio() 方法,编译器也没有。当你调用一个没有类名或实例的方法时,它会调用当前类/对象中的方法。

      我假设您想调用在Messagio 中定义的静态stampaMessagio(),因此您需要实际这样做:

      Messaggio.stampaMessaggio(mex); // nn trova il metodo
      

      【讨论】:

        猜你喜欢
        • 2014-03-14
        • 1970-01-01
        • 2012-12-17
        • 2013-09-14
        • 2019-07-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-09
        相关资源
        最近更新 更多