报错cannot be referenced from a static context的解决方法

出现问题的原因是:在静态方法中不能调用非静态方法。
错误的代码:
{
public static void main(String[] args) {
printBook("D");
double arr[]={20,13.3,5,3.2};
Main.total(arr);//////////////报错
System.out.println("最后结果为:"+Main.total(arr));////////////////////
}
public static void printBook(String x){
if(x.equals("A")){////标记点1
System.out.println("a");
}
else if(x.equals("B")){
System.out.println("b");
}
else if(x.equals("C")){
System.out.println("c");
}
else{
System.out.println("数据库不存在这项数据");
}
}
public double total(double[] arr){
double sum=0;
for(double d:arr){///标记点2
sum=sum+d;
}
return sum;
}
}
解决办法:
1.给被引用的这个方法加上static,将它变至静态方法:
public class Main {
public static void main(String[] args) {
printBook("D");
double arr[]={20,13.3,5,3.2};
Main.total(arr);
System.out.println("最后结果为:"+Main.total(arr));
}
public static void printBook(String x){
if(x.equals("A")){////标记点1
System.out.println("a");
}
else if(x.equals("B")){
System.out.println("b");
}
else if(x.equals("C")){
System.out.println("c");
}
else{
System.out.println("数据库不存在这项数据");
}
}
public static double total(double[] arr){
double sum=0;
for(double d:arr){///标记点2
sum=sum+d;
}
return sum;
}
}
2.将代码块移出Main主体
public class Main {
public static void main(String[] args) {
printBook("D");
double arr[]={20,13.3,5,3.2};
tpTP x = new tpTP();
x.total(arr);
System.out.println("最后结果为:"+x.total(arr));
}
public static void printBook(String x){
if(x.equals("A")){////标记点1
System.out.println("a");
}
else if(x.equals("B")){
System.out.println("b");
}
else if(x.equals("C")){
System.out.println("c");
}
else{
System.out.println("数据库不存在这项数据");
}
}
}
class tpTP{
public double total(double[] arr){
double sum=0;
for(double d:arr){///标记点2
sum=sum+d;
}
return sum;
}
double sum=0;
for(double d:arr){///标记点2
sum=sum+d;
}
return sum;
}
本文讲述了在Java中遇到cannotbereferencedfromastaticcontext错误,原因是在静态方法中试图调用非静态方法。解决方案包括将被调用的方法改为静态,或将代码块封装到非静态类中并实例化对象。

1万+

被折叠的 条评论
为什么被折叠?



