Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.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错误:即使.class文件都在同一目录中,也找不到符号_Java_Class_Compiler Errors_Symbols - Fatal编程技术网

Java错误:即使.class文件都在同一目录中,也找不到符号

Java错误:即使.class文件都在同一目录中,也找不到符号,java,class,compiler-errors,symbols,Java,Class,Compiler Errors,Symbols,我定义了一个类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) {

我定义了一个类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个文件都在同一目录中。有什么建议吗?提前感谢

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

TestoMessaggio t1 = TestoMessaggio.creaTestoMessaggio();

您使用的代码:

TestoMessaggio t1 = creaTestoMessaggio();
相当于:

TestoMessaggio t1 = Esempio3_5.creaTestoMessaggio();
因为,您正在
静态
上下文中使用它。现在,显然在
Esempio3_5
类中没有该方法,所以它失败了


同样,将另一行更改为:

Messaggio.stampaMessaggio(mex);

但是在我看来,您应该重写
Messaggio
中的
toString
方法,而不是提供一个
静态stampaMessaggio()
方法。

它不是从其他类获取函数。尝试使用点(.)操作符将它们关联起来,比如
TestoMessaggio t1=TestoMessaggio.creaTestoMessaggio()

您的错误显示:

Esempio3_5.java:19: error: cannot find symbol
    stampaMessaggio(mex); // nn trova il metodo 
我在
Esempio3_5
中没有看到
stampamesagio()
方法,编译器也没有。当调用前面没有类名或实例的方法时,它将调用当前类/对象中的方法

我假设您希望调用在
Messagio
中定义的静态
stampamesagio()
,因此您需要实际执行以下操作:

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

我认为我不应该使用(.)因为这是一个静态方法。。。“我错了吗?”米克哈金斯说。如果调用同一类的静态方法,则不需要用类名限定它。但是,如果要调用其他类的静态方法,则必须使用限定名。