无法重静态上下文中引用非静态变量thispublic class Test{
public static void main(String [] args){
Count MyCount=new Count();
int times=0;
for (int i=0;i<100;i++)
increment(MyCount,times);
System.out.println(MyCount.count);
System.out.println(times);
}
public static void increment(Count c,int times)
{
c.count++;
times++;
}
}
class Count{
public int count;
Count (int c);
{
count=c;
}
Count(){
count=1;
}
}//这种形式可以没有错误
public class Test{
public static void main(String [] args){
Count MyCount=new Count();
int times=0;
for (int i=0;i<100;i++)
increment(MyCount,times);
System.out.println(MyCount.count);
System.out.println(times);
}
public static void increment(Count c,int times)
{
c.count++;
times++;
}
class Count{
public int count;
Count (int c);
{
count=c;
}
Count(){
count=1;
}
}
}
//这种形式就有我那个错误,错误我明白是是什么意思就不不明白错误提示的意思。。大侠们帮解释下?

解决方案 »

  1. 把你的那个内部类改成静态内部类static class Count
    main方法也是今年静态方法,在静态方法内部不能调用本类的非静态属性,也包括内部类了。
      

  2. public class Test{
    static int times=0;
    public static void main(String [] args){
    Count MyCount=new Test().new Count();for (int i=0;i<100;i++)
    increment(MyCount);
    System.out.println(MyCount.count);
    System.out.println(times);
    }
    public static void increment(Count c)
    {
    c.count++;
    times++;
    }
    class Count{
    public int count;
    Count (int c) {
    count=c;
    }
    Count(){
    count=1;
    }
    }
    }
      

  3. 内部类的初始化得先把外面那层先初始化
    另外的你的times 也应该声明成 static ,不然就只会是零啦
      

  4. 这是两个分开的类,当然可以这样new一个 MyCountpublic class Test {
    public static void main(String[] args) {
    Count MyCount = new Count();
    int times = 0;
    for (int i = 0; i < 100; i++)
    increment(MyCount, times);
    System.out.println(MyCount.count);
    System.out.println(times);
    } public static void increment(Count c, int times) {
    c.count++;
    times++;
    }
    }class Count {
    public int count; Count(int c)// 貌似多了个 “;”
    {
    count = c;
    } Count() {
    count = 1;
    }
    }// 这种形式可以没有错误这是一个内部类的例子,没有外部类实例哪有内部类public class Test {
    public static void main(String[] args) {
    Count MyCount = new Test().new Count(); //内部类,没有外部类的实例是无法直接创建
    int times = 0;                          //内部类实例的
    for (int i = 0; i < 100; i++)
    increment(MyCount, times);
    System.out.println(MyCount.count);
    System.out.println(times);
    } public static void increment(Count c, int times) {
    c.count++;
    times++;
    }  class Count {            // 除非 class 前面 加上 static
    public int count; Count(int c)// 貌似又多了个 “;”
    {
    count = c;
    } Count() {
    count = 1;
    }
    }
    }这是一个静态的内部类的例子 用的不多 贴出来用于比较学习public class Test {
    public static void main(String[] args) {
    Count MyCount = new Count(); //内部类,没有外部类的实例是无法直接创建
    int times = 0;                          //内部类实例的
    for (int i = 0; i < 100; i++)
    increment(MyCount, times);
    System.out.println(MyCount.count);
    System.out.println(times);
    } public static void increment(Count c, int times) {
    c.count++;
    times++;
    }  static class Count {            // 除非 class 前面 加上 static
    public int count; Count(int c)// 貌似又多了个 “;”
    {
    count = c;
    } Count() {
    count = 1;
    }
    }
    }把代码拿去 看看就懂了
      

类似问题 »