main是静态函数, 不用对象就调用的函数也就是静态函数了。

解决方案 »

  1.   

    因为如果不是static方法,不能在未实例化类而使用该方法。所以,答案中使用了 E05_Storage st = new E05_Storage(); 来实例化类,生成对象st ,然后st就可以调用类里面的方法了。
      

  2.   


    如果不是static方法或者属性
    那么这些方法和属性是属于定义他们的类的
    根据类的定义,访问类的属性和方法必须通过类的实例来调用

    st=new E05_Storage();
    这时可以访问st的属性和方法:
    st.s="1234";
    st.storage();等而根据static的感念,定义为static的属性和方法是独立于类的,所以可以直接调用
    如:
    sa="1234";
    storage(sa);这也就是为什么main方法需要定义为static一样。
      

  3.   

    在static方法中只能调用static方法。
    这里main是static方法,所以storage必须申明为static型的,才能在main中以
    StaticTest.storage()的形式调用
    否则,就得在main中先申明一个StaticTest型对象(比如是A),然后才能以A.storage()的形式调用
      

  4.   

    如果不是 static ,只是声明了方法,实际物理上还未建立,所以要 new 一次,产生一个对象才能调用。如果是 static ,就能直接调用了。所以, 或者 static 时直接调用,或者 无static时 new 一个再用。
      

  5.   

    正如楼上朋友说的
    这就是static的作用
      

  6.   

    static定义的是类成员,可以直接用类名调用,否则就一定要先创建这个类的实例对象才可以
      

  7.   

    还有一个问题为什么答案这样调用
    void print() {
        System.out.println("storage(s) = " + storage(s));
      }然后public static void main(String[] args) {
        E05_Storage st = new E05_Storage();
        st.print();
      }
    这样可以打印出还差一点点转不过弯!!1
      

  8.   

    对于类E05_Storage来说,去掉static main方法,实际是这样的:
    public class E05_Storage {
      String s = "Hello, World!";
      int storage(String s) {
        return s.length() * 2;
      }
      void print() {
        System.out.println("storage(s) = " + storage(s));
      }
    },
    即这个类有
    一个属性字符串s
    一个方法为storage
    一个方法为print要注意的是,程序是从static void main方法开始执行的,不是先调用print方法。
    因此程序执行顺序是:
    1、在static void main()方法中
    实例化一个E05_Storage对象st

    E05_Storage st = new E05_Storage();2、调用这个实例的print方法

    st.print();
    于是就可以打印出来了。其实对类StaticTest来说,去掉static属性和方法,这个类是空的

    class StaticTest {
    }
      

  9.   

    补充一下:
    一个类中非static属性和方法是可以相互调用的
    所以在print方法中可以调用
    storage方法和s属性
      

  10.   

    为什么不能直接调用storage方法?
      

  11.   

    可以啊
    可以这样写:
    public class E05_Storage {
      String s = "Hello, World!";
      int storage(String s) {
        return s.length() * 2;
      }
      void print(int len) {
        System.out.println("storage(s) = " + len);
      }
      public static void main(String[] args) {
        E05_Storage st = new E05_Storage();
        int a=st.storage(st.s);
        st.print(a);
      }
    }这时需要修改print方法,要加个参数,相比教要麻烦些或者
    public class E05_Storage {
      String s = "Hello, World!";
      int storage(String s) {
        return s.length() * 2;
      }
      void print() {
        System.out.println("storage(s) = " + storage(s));
      }
      public static void main(String[] args) {
        E05_Storage st = new E05_Storage();
        System.out.println("storage(s) = " + st.storage(st.s));
      }
    }结果是一样的,这时就不需要void print()方法了
      

  12.   

    在java中非静态类是可以调用静态类的对象,也可以调用非静态类的对象,而静态类则只能调用静态类中的对象,不能调用非静态类中的对象。