错误: 无法从静态上下文中引用非静态方法
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 }
~
只需要实例化调用的静态变量所属对象即可。