进来看看,搞的我莫名其妙,不知道大家有没有遇到过

时间:2021-03-28 20:53:42
郁闷啊,我所有的公共变量和方法都要申明成static的,否则编译就报错,谁遇到过?谁能帮忙解决一下。

8 个解决方案

#1


代码贴出来看看

#2


是啊,让我们看看代码啊

#3


你不会是在static方法中调用变量和方法吧。
在static方法中只能调用static变量和方法。

#4


我的建议是,尽量少用不必要的公共变量,一个类中,如果有静态方法,那他所调用的所用公共变量和方法都必须是静态的,静态主方法(public static void mian)也一样要满足这个条件

#5


你不会是在static方法中调用变量和方法吧。
在static方法中只能调用static变量和方法。
同意ffee(短袖)的观点

#6


哦,请恕在下冒昧,不过具我估计楼主可能是在main函数中直接调用class field or method了吧?

不过不是最清楚楼主的问题,帖段代码模拟一下在下认为楼主可能遇到的情况:
    class Test {
      int i = 10;
      // Print i to console
      public void print() {
        System.out.println("This object's variable i is " + i);
      }
      // Main thread
      public static void main(String[] args) {
        print();  // That's wrong, because the method is non-static.
      }
    }

    不知楼主是否是此意思,之所以会这么想是因为看楼主把static field or method 说成是公共变量和方法,static的含义是静态的,不依托于某一类型的单一实体,可以说其在某一类型中是公共的(不过在对象的世界里,实体都有一个界,以说明其归属,所以一般不会使用“公共”之类的词语来描述,这更像是过程开发世界里对全局变量的定义。)
    然后楼主发现将所有的field or method变换成static就可以顺利编译了,代码如下:
    class Test {
      static int i = 10;

      public static void print() {
        System.out.println("This object's variable i is " + i);
      }

      public static void main(String[] args) {
        print();  // That's right, because the method is static.
      }
    }

    修改上述代码使之正确不难,问题出在楼主完全搞混了对象的真正含义,并用过程化的思维编写程序。(如果我的猜测是正确的话)
    事实上,如果你理解了JAVA中的一切都是对象,就像刚才我所说的,所有的实体(对象)必有其界,所以如果使用non-static field or method时,他们必定是属于某一实体,而非公共(欧,原谅我用这个词吧,这里引用他只是为了叙述方便)存在的,要修改其只需在main()中初始化一个对象即可,
修正代码如下:
    class Test {
      int i = 10; // non-static field

      public void print() {
        System.out.println("This object's variable i is " + i);
      }

      public static void main(String[] args) {
        // First, initialized one object, when non-static method called.
        Test t = new Test();
        t.print();  // That's right, because the non-static method is bound to one object
      }
    }

    以上代码(修正版)运行通过,非常希望我正确的理解了楼主所遇到的麻烦,并且给出的实例也能帮助楼主解决问题。
@.@||~

#7


大概楼主的问题在,在使用类中变量的时候没有生成类的实例而直接想用其中变量。因为我也是初学者,遇到过相似的问题。
比如: class a{

       }

#8


比如:
class a {
  public abc;
  ...
}
你想用其中abc变量,但是发现无法引用,就在abc前加上了static,原因就是需要生成对象,
a x=new a() 这时候你在用x.abc就可以引用了。
^_^

#1


代码贴出来看看

#2


是啊,让我们看看代码啊

#3


你不会是在static方法中调用变量和方法吧。
在static方法中只能调用static变量和方法。

#4


我的建议是,尽量少用不必要的公共变量,一个类中,如果有静态方法,那他所调用的所用公共变量和方法都必须是静态的,静态主方法(public static void mian)也一样要满足这个条件

#5


你不会是在static方法中调用变量和方法吧。
在static方法中只能调用static变量和方法。
同意ffee(短袖)的观点

#6


哦,请恕在下冒昧,不过具我估计楼主可能是在main函数中直接调用class field or method了吧?

不过不是最清楚楼主的问题,帖段代码模拟一下在下认为楼主可能遇到的情况:
    class Test {
      int i = 10;
      // Print i to console
      public void print() {
        System.out.println("This object's variable i is " + i);
      }
      // Main thread
      public static void main(String[] args) {
        print();  // That's wrong, because the method is non-static.
      }
    }

    不知楼主是否是此意思,之所以会这么想是因为看楼主把static field or method 说成是公共变量和方法,static的含义是静态的,不依托于某一类型的单一实体,可以说其在某一类型中是公共的(不过在对象的世界里,实体都有一个界,以说明其归属,所以一般不会使用“公共”之类的词语来描述,这更像是过程开发世界里对全局变量的定义。)
    然后楼主发现将所有的field or method变换成static就可以顺利编译了,代码如下:
    class Test {
      static int i = 10;

      public static void print() {
        System.out.println("This object's variable i is " + i);
      }

      public static void main(String[] args) {
        print();  // That's right, because the method is static.
      }
    }

    修改上述代码使之正确不难,问题出在楼主完全搞混了对象的真正含义,并用过程化的思维编写程序。(如果我的猜测是正确的话)
    事实上,如果你理解了JAVA中的一切都是对象,就像刚才我所说的,所有的实体(对象)必有其界,所以如果使用non-static field or method时,他们必定是属于某一实体,而非公共(欧,原谅我用这个词吧,这里引用他只是为了叙述方便)存在的,要修改其只需在main()中初始化一个对象即可,
修正代码如下:
    class Test {
      int i = 10; // non-static field

      public void print() {
        System.out.println("This object's variable i is " + i);
      }

      public static void main(String[] args) {
        // First, initialized one object, when non-static method called.
        Test t = new Test();
        t.print();  // That's right, because the non-static method is bound to one object
      }
    }

    以上代码(修正版)运行通过,非常希望我正确的理解了楼主所遇到的麻烦,并且给出的实例也能帮助楼主解决问题。
@.@||~

#7


大概楼主的问题在,在使用类中变量的时候没有生成类的实例而直接想用其中变量。因为我也是初学者,遇到过相似的问题。
比如: class a{

       }

#8


比如:
class a {
  public abc;
  ...
}
你想用其中abc变量,但是发现无法引用,就在abc前加上了static,原因就是需要生成对象,
a x=new a() 这时候你在用x.abc就可以引用了。
^_^