【问题标题】:Java cannot find symbol when calling a method from another class从另一个类调用方法时Java找不到符号
【发布时间】:2020-09-24 19:46:28
【问题描述】:

我试图从我的演示类中调用 klub 类中的方法 show,并在演示类中调用 visAlleAtleter 方法(从我的 klub 类中),但我收到一条错误消息,说它找不到符号然后是方法的名称。我试图指定我想要它的位置,但我不确定如何去做。这是我的俱乐部课

import java.util.ArrayList;

public class Klub {
    
    private String navn;
    private ArrayList<Atlet> atleter;

    public Klub(String navn) {
       this.navn = navn;
       atleter = new ArrayList<>();
    }
    
    public void addAtlet(Atlet atlet) {
        atleter.add(atlet);
    }
    
    public void visAlleAtleter() {
        System.out.println(navn);
        for(Atlet atlet: atleter) {
            atlet.display();
            
        }
        
    }
    public void visAlleAtleter2(boolean samletValue) {
      if(samletValue = true) {
          Atlet.show();
        } else {
            
        }
    }
}

这是我的演示课

public class Demo { 
    public static void main(String[] args) {
        
        Klub minKlub = new Klub("SWU United");
       

        Atlet atlet1 = new Atlet("Pan", "Tennis", 43.5, 21);
        Atlet atlet2 = new Atlet("Peter", "Golf", 41.5, 29);
        Atlet atlet3 = new Atlet("Robby", "Tennis", 43.5, 20);
        Atlet atlet4 = new Atlet("Niklas Klein", "Maisball", 21.2, 23);
        Atlet atlet5 = new Atlet("Linni Maister", "Maisball", 44.1, 32);
        Atlet atlet6 = new Atlet("Dennis Michael", "Maisball", 32.5, 11);
        minKlub.addAtlet(atlet1);
        minKlub.addAtlet(atlet2);
        minKlub.addAtlet(atlet3);
        minKlub.addAtlet(atlet4);
        minKlub.addAtlet(atlet5);
        minKlub.addAtlet(atlet6);
   
         Klub.visAlleAtleter();

    
    
    } 
    
}

还有我的 atlet 课

public class Atlet {

    private String navn;
    private String sportsgren;
    private double pris;
    private int alder;

    public Atlet(String navn, String sportsgren, double pris, int alder) {
    
    this.navn = navn;
    this.sportsgren = sportsgren;
    this.pris = pris;
    this.alder = alder;
    
    }
    
    public void oppdaterPris(double nyPris) {
        pris = nyPris;
    }
    
    public double getPris() {
        return pris;
    }
    
    public double predSalgspris() {
        return pris-0.95*Math.abs(25-alder);
    }
    
    public void display() {
        System.out.println(navn + " (" + alder + ") - " + 
        sportsgren + ": " + pris + "kr (" + predSalgspris() + "kr)");
    }
    
}

【问题讨论】:

  • visAlleAtleter() 不是静态类。你应该使用 minKlub.visAlleAthleter(),

标签: java class methods


【解决方案1】:

方法visAlleAtleter 不是静态的,所以你不能像Klub.visAlleAtleter() 那样调用它。 只需在对象minKlub.visAlleAtleter() 上调用方法即可。

【讨论】:

    【解决方案2】:

    问题在于Demomain 方法中的Klub.visAlleAtleter(); 行。要更正此问题,您必须将其替换为 minKlub.visAlleAtleter();

    原因是根据您的代码,您有一个名为minKlub 的类Klub 的实例。方法 visAlleAtleter() 绑定到类 Klub 的任何实例,而不是类 Klub 本身。

    编辑: 为了说明您的尝试可能成为问题的原因,请考虑以下示例:

    public class Demo { 
        public static void main(String[] args) {
            
            Klub minKlub = new Klub("SWU United");
            Klub dinKlub = new Klub("SEU United")
           
            Atlet atlet1 = new Atlet("Pan", "Tennis", 43.5, 21);
            Atlet atlet2 = new Atlet("Peter", "Golf", 41.5, 29);
            minKlub.addAtlet(atlet1);
            minKlub.addAtlet(atlet2);
    
            Atlet atlet3 = new Atlet("Mads", "Fotball", 123, 123);
            Atlet atlet4 = new Atlet("Mikkelsen", "Curling", 123, 123);
            dinKlub.addAtlet(atlet3);
            dinKlub.addAtlet(atlet4);
       
            Klub.visAlleAtleter();
        }    
    }
    

    在这个例子中,当调用Klub.visAlleAtleter()时,无法知道Java应该调用minKlubb还是dinKlubb上的方法。将minKlubdinKlub 视为Klub 类的物理实例,这一点很重要。

    巧合的是,写Klub.someArbitraryMethod()其实是java中常用的一个特性,其中someArbitraryMethod()是静态声明的。这种写法只有在声明方法为static时才有可能:

    public static void someArbitraryMethod() {...}
    

    这意味着该方法不属于Klub 类的任何物理实例,而是属于Klub 类本身。正在做

    minKlubb.someArbitraryMethod();
    

    因此会导致编译错误。

    【讨论】:

      猜你喜欢
      • 2013-11-14
      • 2016-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-26
      • 1970-01-01
      相关资源
      最近更新 更多