比如:
public class Example {
    void idea() {
    }
    public static void main(String args[]) {
        new Example().idea();//这里居然不报错. main方法是个静态方法,java中不是明文规定在静态方法中不能调用非静态方法吗?
    }
}
希望大家给我点意见。我学java很久了,还没注意到这个问题。

解决方案 »

  1.   

    不能调用是指不能直接调用
    像这样的:
      public static void main(String args[]) {
      idea();//这里居然不报错. main方法是个静态方法,java中不是明文规定在静态方法  }但是你这里是对象来调用的,就是:
    Example e = new Example();
    e.idea();
      

  2.   

    你都new了能是个静态方法吗?
      

  3.   

      new Example()已实例话,调用的是非静态方法
    认真看书,耐心琢磨,问csdn作用不大
      

  4.   

    偶,我知道了,是因为我new 了一个对象,然后对象给封装好了。 哎, 还是有点晕。想不通啊
      

  5.   

    照楼主的意思我们永远都不可能用到非静态方法了
    因为程序要执行肯定要从main()开始,main()是静态方法,所以不管他调用的是什么函数只能是静态的,比如他调用一个A()函数,那他也必须是静态的,那么A()里面调用的B.D.E.F.G.....N都只能是静态的,所以我们根本不需要非静态方法,因为他永远都不会用到
    那么java设计者这群SB竟然设计出非静态方法这种根本用不到的东西,简直一群脑残、二百五!!!
    LZ你是这意思吗?1楼说的好啊不能调用指的是在同一个类中,不能直接引用函数名来调用方法
    public class Yun{
      void a(){
        //我是非静态方法
      }
      static void a(){
        //我是静态方法
      }
      public static void main(String[] args){
        a();//不能直接调用非静态方法
        b();//可以直接调用静态方法
        new Yun().a();//可以
        new Yun().b();//当然也可以
      }
    }
      

  6.   

    java中的静态方法中不能调用非静态方法说的是通过类名.非静态方法名的方式来调用非静态方法,但是上面的实例化后,调用的是对象的方法。
      

  7.   

    new了一个实例了,实例调用方法
      

  8.   

    new Example()已实例话,调用的是非静态方法
      

  9.   

    都new出来了吗
    Example.idea();
    但是如果你上面这么写就错了~~~LZ好运
      

  10.   

    你这不叫静态方法调用非静态方法,你这调用的是实例化方法,就是先new一个对象,再用这个对象去调用对象中的实例化方法,到哪里这样调用都没问题(只要方法是public的)。
      

  11.   

    静态方法是类中所有对象所共有的,所以由类名直接调用,但是普通方法通过类的对象是可以调用的,你上面都new了,说明已经创建对象了,当然可以调用了!
      

  12.   


    但是我试过了,在Yun中根本无法定义static的函数。所以只能使用static的方法。
      

  13.   

    都new了,还说什么呢,你要是直接用idea()那就会报错
      

  14.   

    new Example().idea();已经创建对象了,这种写法是缩写
    Example.idea(); 这样就不行了
      

  15.   

    其实。这是带有static关键子的会在加载的时候就初试话。如果你直接调用的是非静态的方法都还没初始话肯定是不行的。。 但你在new了之后在内存中已经有了这个方法就可以调用了。而只要带static关键字都会在加载的时候初始化,那样就可以在main中直接调用静态方法了