Java NullPointerException问题
我正在尝试实现以下代码,但遇到了一个问题,即对非静态方法的静态引用Java NullPointerException问题,java,exception,Java,Exception,我正在尝试实现以下代码,但遇到了一个问题,即对非静态方法的静态引用 public class App { public static void main (String args[]) { int result = factorial(5); System.out.println(result); } private int factorial(int value) { if (value == 0) return 1; int s
public class App {
public static void main (String args[]) {
int result = factorial(5);
System.out.println(result);
}
private int factorial(int value) {
if (value == 0)
return 1;
int sum = value * factorial(value-1);
return sum;
}
}
运行上述代码,我得到以下错误:
Error: Cannot make a static reference to the non-static method factorial() from the type App
如果从main方法中删除static关键字,则会得到一个NullPointerException错误堆栈:
java.lang.NullPointerException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at
edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:272)
我不太确定如何解决这个问题,非常感谢您的帮助
编辑:调用阶乘方法时,我忘记了包含一个参数,很抱歉,它现在已修复。必须有一个现有的
静态main
方法。它会被寻找,当你找不到它时,这就是你收到的错误
您可以通过将
factorial
设置为静态方法来解决特定问题。必须存在一个现有的静态main
方法。它会被寻找,当你找不到它时,这就是你收到的错误
您可以通过使
factorial
成为一个静态方法来解决您的特定问题。您正在调用factorial
-一个实例成员形成一个静态方法main
,这就是错误出现的原因。您可以将factorial
声明为解决此问题的静态方法
public class App {
public static void main(String args[]) {
int result = factorial(5); // you need to pass a int value here
System.out.println(result);
}
private static int factorial(int value) {
if (value == 0)
return 1;
return value * factorial(value - 1);
}
}
您正在调用
factorial
-一个静态方法main
的实例成员,这就是错误出现的原因。您可以将factorial
声明为解决此问题的静态方法
public class App {
public static void main(String args[]) {
int result = factorial(5); // you need to pass a int value here
System.out.println(result);
}
private static int factorial(int value) {
if (value == 0)
return 1;
return value * factorial(value - 1);
}
}
无法访问静态方法中的常规方法 实例方法与该类型的特定实例相关联,其中as静态方法与整个类型相关联 试一试 -----------
无法访问静态方法中的常规方法 实例方法与该类型的特定实例相关联,其中as静态方法与整个类型相关联 试一试 -----------
正如错误明确指出的,您不能访问静态方法中的非静态方法,为了使此代码正常工作,请按如下所示更改您的
factorial
定义:
private static int factorial(int value) {
//remaining code
}
正如错误明确指出的,您不能访问静态方法中的非静态方法,为了使此代码正常工作,请按如下所示更改您的
factorial
定义:
private static int factorial(int value) {
//remaining code
}
我刚刚测试过这个。我的编译器对此代码不满意,直到我将调用更改为
factorial
,使其与函数定义匹配:
int result = factorial(23);
而不是
int result = factorial();
还需要将factorial
的函数声明更改为static
:
private int factorial(int value) {
但它需要这两种东西才能工作。我刚刚测试了这个。我的编译器对此代码不满意,直到我将调用更改为
factorial
,使其与函数定义匹配:
int result = factorial(23);
而不是
int result = factorial();
还需要将factorial
的函数声明更改为static
:
private int factorial(int value) {
但它需要这两种方法才能工作。要从静态方法调用非静态方法,请创建包含该非静态方法的类的对象。根据定义,只能对某个类的对象调用非静态方法,而可以对该类本身调用静态方法。要从静态方法调用非静态方法,请创建包含该非静态方法的类的对象。根据定义,非静态方法只能在某个类的对象上调用,而静态方法可以在该类本身上调用。如果您不希望方法是静态的,或者您希望从另一个类调用它,这是另一种方法:
public class App {
public static void main (String args[]) {
new App();
}
private int factorial(int value) {
if (value == 0)
return 1;
int sum = value * factorial(value-1);
return sum;
}
public App(){
int result = factorial(6);
System.out.println(result);
}
}
方法
factorial(int-value)
是参数化的,因此您应该像我在上面的示例中所传递的那样将int
值传递给它。如果您不希望方法是一个静态方法,或者希望从另一个类调用它,这是另一种方法:
public class App {
public static void main (String args[]) {
new App();
}
private int factorial(int value) {
if (value == 0)
return 1;
int sum = value * factorial(value-1);
return sum;
}
public App(){
int result = factorial(6);
System.out.println(result);
}
}
方法factorial(int-value)
是参数化的,因此您应该像我在上面的示例中所传递的那样,将int
值传递给它。只要添加static
关键字,您的代码就可以正常工作
private static int factorial(int value) {
只要添加static
关键字,您的代码就可以正常工作
private static int factorial(int value) {
将private int factorial()
更改为private static int factorial()
是否应该使用参数调用factorial
?您正在使用factorial()
调用它。将参数传递给factorial(int)
方法。要么使其成为静态的,要么通过当前类App
likenewapp().factorial(100)的实例调用它
。将private int factorial()
更改为private static int factorial()
是否应该使用参数调用factorial
?您正在使用factorial()
调用它。将参数传递给factorial(int)
方法。要么使其成为静态的,要么通过当前类App
likenewapp().factorial(100)的实例调用它代码>。factorial方法希望解析一个int值,但对于您的解决方案,它什么也得不到。也许你打错了?对不起,是的,我忘了传递一个参数,谢谢你指出,我已经修复了我原来的帖子。即使使用您的解决方案,我仍然不幸地遇到相同的运行时错误。@AbdullaKubba所使用的java版本是什么?您是否在使用IDE来进行测试development@AbdullaKubba您不应该从main
method中删除static
。阶乘方法希望解析一个int值,但在您的解决方案中,它什么也得不到。也许你打错了?对不起,是的,我忘了传递一个参数,谢谢你指出,我已经修复了我原来的帖子。即使使用您的解决方案,我仍然不幸地遇到相同的运行时错误。@AbdullaKubba所使用的java版本是什么?您是否在使用IDE来进行测试development@AbdullaKubba您不应该从main
方法中删除static
。如果我将阶乘方法设置为静态,我仍然会得到相同的运行时错误。@AbdullaKubba它需要