【问题标题】:Can't access functions in another class无法访问其他类中的函数
【发布时间】:2017-08-14 16:29:16
【问题描述】:

****EDIT** 每个人都说这样称呼它

FunctionTestTest.numberCheck(userNumber);

我已经尝试了很多次,然后在这里发布它没有工作。

人们对他们甚至无法回答的问题投了反对票,太好了...

在我正在处理的另一个项目中,我无法调用另一个类的函数。整天都在努力修复它。决定抛出几行代码并尝试从另一个类中调用一个函数,以确保我的主项目中没有未注意到的语法错误。

谁能看出这里有什么问题?

返回此错误:

cannot find the symbol
symbol: class FunctionTestTest
location: class FunctionTest

...

public class FunctionTest{ 
  public static void main(String[] args){        

    Scanner input = new Scanner(System.in);

    int userNumber = 0;

    System.out.println("Please enter a number between 1 - 10");
    userNumber = input.nextInt();
    FunctionTestTest ft = new FunctionTestTest();
    FunctionTestTest.numberCheck(userNumber);

  }
}

和..

public class FunctionTestTest{

  public static void main(String[] args){
  }

  public static void numberCheck(int num){
    if (num == 1){
        System.out.println("function works");
    }
  }
}

【问题讨论】:

  • 你导入 FunctionTestTest 了吗?
  • 您是否添加了import 声明?
  • new FunctionTestTest(userNumber); -- 在这个类中没有这样的构造函数。事实上,这个类根本没有声明构造函数,只有一个(无用的)默认构造函数。
  • 请注意,您是在询问对基础问题的误解,通过学习教程和书籍而不是在这里提问可以更好地解决问题。
  • 非常同意充满鳗鱼的气垫船。似乎 OP 不知道如何将不同的类放在同一个包/项目文件夹中,从而导致所有混乱。

标签: java function class methods


【解决方案1】:

这个错误是因为你可能使用了另一个包中的类。在这种情况下,您必须先导入它才能使用。

如果您使用任何 IDE,则应该有一个热键来解决您的问题。

还有……

你不需要创建一个对象实例来访问某个类的静态方法。只需使用:

FunctionTestTest.numberCheck(userNumber);

不推荐,但您可以在对象实例上调用静态方法,例如:

new FunctionTestTest().numberCheck(userNumber);

【讨论】:

  • 我之前确实尝试过这个,netbeans 有修复所有类导入的快捷方式,但选定的类导入都不起作用。我收到消息找不到类。
  • 您在问题中提到的错误是编译时错误,因此 Netbeans 应该为您提供一些修复错误的选项。
【解决方案2】:

这里你正在调用其他类的构造函数,但那里不存在:

FunctionTestTest ft = new FunctionTestTest(userNumber);

同时检查 FunctionTestTest 类是否存在,然后导入它

【讨论】:

    【解决方案3】:

    ft.(userNumber);

    您的方法调用不正确。 您可能想要ft.numberCheck(userNumber)FunctionTestTest.numberCheck(userNumber)。后者是首选,因为您正在使用静态成员。


    如果它是一个静态方法,你只需将其称为:

    ClassName.methodName();
    

    没有必要实例化一个对象来使用像你所做的那样的静态方法。

    示例:

    public class MyClass{
        public static void myMethod(){
            //do whatever..
        }
    }
    
    public class OtherClass{
        public static void main(String[] args){
            MyClass.myMethod();  //invoke a static method from another class
        }
    }
    

    【讨论】:

    • 做完这一切,还是一样的问题
    • @Chris Lynch 如果没有拼写错误。然后检查这些类是否在同一个包或同一个项目文件夹中。检查这些类是否被声明为公共的。很多事情你可以自己检查。
    • @ChrisLynch 更糟糕的是,创建一个全新的项目并仅使用 2 个简单的类进行测试。最终它会起作用。这些你都试过了吗?
    • 是的,我已经完成了这一切,这是我正在测试的新项目
    • @ChrisLynch 然后尝试在 same java 文件中编写这两个类并再次测试。我相信至少这会奏效。通过将类移出到另一个 java 文件等来从那里开始工作。如果还是不行,换个IDE试试。在问题解决之前,您可以尝试无穷无尽的方法。
    猜你喜欢
    • 1970-01-01
    • 2020-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-11
    • 1970-01-01
    相关资源
    最近更新 更多