Java

错误: 无法从静态上下文中引用非静态方法

2019-04-08  本文已影响0人  张沥

静态方法中不能引用非静态变量
静态方法中不能引用非静态变量
静态方法中不能引用非静态变量

静态方法可以通过所在类直接调用而不需要实例化对象,非静态成员变量则是一个对象的属性。它只有在有实例化对象时才存在的,所以在静态方法中是不可以调用静态变量。如果发生调用,则编译器会报出如上的错误。

例如:

  1 public class Solution {
  2     public static void main(String[] arvgs){
  3         System.out.println("请输入股票价格");
  4         int[] profit = {1, 2, 3, 4, 5, 6};
  5       
  6         maxProfit(profit, 5); // 报错
  7         
  8     }
  9     public int maxProfit(int prices[], int day){
 10         int maxprofit = 0;
 11         for (int i = 0; i < day - 1; i++){
 12             for (int j = i + 1; j < day; j++) {
 13                 int profit = prices[j] - prices[i];
 14                 if (profit > maxprofit)  
 15                     maxprofit = profit;
 16             }       
 17         }   
 18         return maxprofit;
 19     }   
 20 }   
~                                      

由于main方法其实是一个静态方法,而maxProfit方法并没有实例化,所以会报错 错误: 无法从静态上下文中引用非静态 变量 this

修改方法:

  1 public class Solution {
  2     public static void main(String[] arvgs){
  3         System.out.println("请输入股票价格");
  4         int[] profit = {1, 2, 3, 4, 5, 6};
  5         Solution solution = new Solution();
  6         solution.maxProfit(profit, 5);
  7         
  8     }
  9     public int maxProfit(int prices[], int day){
 10         int maxprofit = 0;
 11         for (int i = 0; i < day - 1; i++){
 12             for (int j = i + 1; j < day; j++) {
 13                 int profit = prices[j] - prices[i];
 14                 if (profit > maxprofit)  
 15                     maxprofit = profit;
 16             }       
 17         }   
 18         return maxprofit;
 19     }   
 20 }   
~                                      

只需要实例化调用的静态变量所属对象即可。

上一篇下一篇

猜你喜欢

热点阅读