报错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;
}