【问题标题】:Cannot access method within a static context无法在静态上下文中访问方法
【发布时间】:2014-03-09 17:51:45
【问题描述】:

我是一个相当新手的高中程序员,我正在完成我关于学校继承的最后一个项目。我有一个名为“Worker”的项目,这真的让我很难过。我需要能够打印出所有内容,但我似乎无法打印出我需要的内容,而要么没有打印出来,要么得到“在静态上下文错误中无法访问方法”。这是名为worker的超类的代码:

package mod6;

public class Worker {

   public Worker(double wage, String name) {
       private double hours; // I GET AN ERROR HERE that says "illegal start of expression"
       private double wage;
       private int rate;
       private String name;


   public double computePay(int hours) {
       return hours * rate;
   }

   public String getName(String name) {  
       String temp[] = name.split("\\s");
       char initial = temp[0].charAt(0);
       String lname = temp[1];
       return name = (lname + ", " + initial + ".");
   }
}

编辑:我现在唯一的问题是上面工人类第 7 行的错误。 这里是 WorkerTester 类的代码,我目前没有从中得到正确的输出:

package mod6;

public class WorkerTester extends Worker {

  public WorkerTester(double wage, String name, int hours) {
      super(wage, name); 
  }

  public static void main(String[]args) {
  System.out.println("Type" + "\t" + "Name" + "\t" + "Wage" + "\t" + "Hours" + "\t" + "Number of Pieces" + "Income"); } //**Nothing prints out below this line**
  public void TestHourly() {
      HourlyWorker John = new HourlyWorker(9.48, "John Doe", 43);
      System.out.print("Hourly" + "\t" + getName("John Doe")  + "\t" + "9.48" + "\t" + "43" + "\t" + "n/a" + "\t" + John.Wage());
  }
  public void TestSalaried() {
      SalariedWorker Karen = new SalariedWorker(25.79, "Karen Jones", 52);
      System.out.println("Salaried" + "\t" + getName("Karen Jones")  + "\t" + "25.76" + "\t" + "52" + "\t" + "n/a" + "\t" + Karen.Wage());
  }
  public void TestPiece() {
      SalariedWorker Wesley = new SalariedWorker(5.65, "Wesley Smith", 36);
      System.out.println("Piece" + "\t" + getName("Wesley Smith")  + "\t" + "5.65" + "\t" + "36" + "\t" + "1025" + "\t" + Wesley.Wage());
  }
}

这可能是一个简单的解决方法,我只是以我有限的编程知识无法弄清楚,而且我没有重新安排代码的想法。此外,编码可能非常错误(记住我是新手)所以请记住这一点。如果有人可以帮助我修复此代码以正确打印出来,那就太好了!谢谢。

这里是 SalriedWorker 类供参考:

公共类 SalriedWorker 扩展 Worker {

public SalariedWorker(double wage, String name, int hours) {

    super(wage, name);

}

public double Wage() {

    return computePay(40);

}

}

【问题讨论】:

  • 您没有打印,因为您从未在主方法中调用子方法。您收到静态错误是因为您正在调用没有实例的方法。见下文。

标签: inheritance methods static-methods


【解决方案1】:

您在主方法中声明了您未调用的其他方法。删除方法,然后在 main 方法中实例化、初始化和打印所有工作人员。

此外,您正在调用 getName 而不使用 worker 实例。你需要这样的东西。

Worker worker = new Worker(//pass your parameter);
worker.getName();

老实说,您错误地使用了 getter 方法,适当的 getter 应该返回私有变量或对其进行小幅操作,而不是编辑您传递给它的参数。

这是一个更好的吸气剂:

public String getName() {  
   String temp[] = name.split("\\s");
   char initial = temp[0].charAt(0);
   String lname = temp[1];
   return (lname + ", " + initial + ".");
}

这样你引用的实例变量名是私有的,而不是你最初传递给你的方法的参数“name”

【讨论】:

  • 我使用了方法,因为它在作业中是必需的。这对我来说不合逻辑,但仍然是必需的。但是感谢您提供有关使工作对象将其带入主要方法的提示。我会试一试。编辑:我为workertester类删除了错误,非常感谢。但是由于工人类第7行的错误,它仍然无法正确打印。你对这个错误有什么提示吗?
  • @noviceprogrammer 看来您缺少大括号,并且没有正确关闭工作类中的构造函数。此外,如果您将变量传递给构造函数,则应将 equal 设置为实例变量。在构造函数之前声明所有私有变量,然后将您传递的两个变量设置为等于您的实例变量,例如 this.wage = pay;
  • 非常感谢!你帮了很多忙,现在正在打印。除非它不是。 workertester 的收入部分(例如 Karen.Wage();)不会正确打印。它打印为 0.0。我会把工薪阶层放在问题中以供参考。
  • @noviceprogrammer 我看不到你的 SalriedWorker 课程。我怀疑您没有正确初始化工资,它保持其默认值为零。这也可能是您的 getter 的另一个问题,您正在使用参数变量隐藏实例变量。从您的主要方法来看,我认为您没有正确应用继承的概念。你应该参考The Java Tutorials另外,如果这篇文章对你有帮助,请你点赞并标记为正确答案。谢谢
  • 我将 SalriedWorker 类放在底部的问题中。我认为您对不正确的初始化是正确的。另外,我想我理解继承背后的概念,我只是在将各个部分放在一起时遇到了麻烦。最后,我很遗憾不能投票,因为我没有 15 名声望。但它会被标记为正确。
猜你喜欢
  • 2015-10-21
  • 2010-10-23
  • 2011-11-03
  • 1970-01-01
  • 1970-01-01
  • 2017-03-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多