问一个小问题,就是在java类这一章节里,调用一个方法,有两种形式:
实例方法:对象名.方法名
类方法:类名.方法名
但是经常也会看到没有static关键字声明的实例方法也被这样调用:
类名.方法名
请问这对不对?是不是java里边允许这样调用?

解决方案 »

  1.   

    小数点只是java的命名空间规范
    当你在java文件头部没有声明引用的时候
    可以直接使用
    java.util.ArrayList list =new java.util.ArrayList();
    import java.util.ArrayList;只是为编译器提供语法,并不是动态调用
      

  2.   

    我刚才是了个例子,好像编译是通过不了的。可能书上的写错了。我只是想问一下,在java里到底可不可以这样用?
      

  3.   

    java里面对所有方法(包括类方法)都可以用
    对象名.方法名
    进行访问;
    但是
    类名.方法名
    这种方式只可以访问类方法,因为类方法是在该类在加载的时候就加载到内存可以进行访问了;而实例方法是动态加载的,如果用<类名.方法名>进行访问就很可能导致jvm找不到该方法,因此这样的访问就是被禁止的。
      

  4.   

    这样是正确的
    ///////////////////////////////////////////
    public class TestClass
    {
    static int  Nstatic = 0;
    public static void main()
    {
    TestClass tc = new TestClass();
    tc.test();
    System.out.println(Nstatic);
    }
    public void test()
    {
    TestClass.Nstatic = 10;
    }
    }
    这样是错误的
    /////////////////////////////////////////////////
    public class TestClass
    {
             int  Nstatic = 0;
    public static void main()
    {
    TestClass tc = new TestClass();
    tc.test();
    System.out.println(Nstatic);
    }
    public void test()
    {
    TestClass.Nstatic = 10;
    }
    }
      

  5.   

    静态方法和成员变量不需要实例化类就可以用。
        比如经常用的System.out.print()
        其中out的定义是: public static final PrintStream out,它是一个静态的成员变量。
        还有类Math下面的方法基本上都是静态的,你不必Math t = new Math(); t.sin(a)这样实例Math,然后再调用它的方法。你可以直接Math.sin(a).    而且System,Math类是java.lang下面的一级库类,你不需要自己import就可以直接调用了,因为JVM默认就import他们了。
      

  6.   

    首先更正楼住一点,用static关键子声明的方法绝对不是实例的方法,而永远属于类的方法