1.这是java预定的一个规范,main函数代表了一个独立的程序的入口,他的格式是固定的。对于每一个main函数,java都会起一个JVM。JVM会在class中寻找符合这一声明规范的函数。
2.如果不是public的,在类的外部就无法调用。那么JVM也就无法启动这个程序。
3.如果不是static的,就必须要有一个类的实例来调用这个函数,在程序的入口之前,是没有任何对象被创建的,所以也就无法调用该函数。

解决方案 »

  1.   

    爲什麽E不對,public只是一個修飾符.用於限定它的訪問權限,我試過就算沒有public,程序如下public class ttmain {
     static void main(String [] ssss) {
      System.out.println("test");
     }
    }
    可以編譯運行
      

  2.   

    The main() method is declared public by convention!it is not a requirement..so u can use arbitrary modifier as u want
      

  3.   

     不過不知道在scjp考試里,那個為正確答案。。請問這道題目是單選還是多選?是否從scjp得題庫里拿出來的。。〉〉
      

  4.   

    你在任何类中声明任何一种类型的main都可以,但是你要满足题中的the main() method in a stand-alone program 就必须是 public static void main(String[] args)这种signature的方法,其中public static这两个modifier的顺序可以随意,但返回类型void一定要直接在main的前头。所以:
    public class ttmain {
    static void main(String [] ssss) {
      System.out.println("test");
    }

    当然可以编译,因为main也只不过是一个普通的类方法而已,改成非static, 非void,非String[]参数也可以编译,但你在命令行运行一下试试!
      

  5.   

    再讲深一点为什么可运行的stand-alone有这个要求可能更加容易让你们理解。
    因为所谓的stand-alone程序,实际上是运行JVM中提供的缺省ClassLoader,把你的类名作为参数传递给它。
    在你的类实例还没有生成之前(因为你的类不一定有缺省无参构造),而且ClassLoader和你的类肯定不在一个包(package)的情况下,ClassLoader只可能调用你的类中的public static方法。至于返回值以及参数也是ClassLoader的要求。
    建议好好再去读一下OO/Java中public, private, protected, static等的基本概念。
      

  6.   

    请你好好注意一下:1)Java中,void main(String[] args)是唯一的入口函数,Java通过这个函数开始执行Java程序。请注意,只要返回值类型,函数名称以及参数类型列表定义好了,该函数也就唯一的确定了。也就是说,你只能重载它或者在子类中覆盖它而不能两次定义它。2)而static只是用来说明他修饰的函数或变量是属于该类的,而不是属于该类的某一个实例的。因此,只要载入了一个class就能使用它的static function 或static variable而无须实例化它。所以这就是我们必须为main函数指定static这个修饰语的原因,否则我们就必须实例化这个类才能试用该方法。3)至于pulic这个修饰语只是用来限定该函数的访问权限的,我们通常的习惯是指定该函数为public,这样,我们就不用考虑如何才能访问到该函数,但并不是说我们只能使用public这个修饰语才能访问该函数。只要我们不将该函数设置成private,我们就肯定能让Java访问到这个入口函数.所以,执行步骤是这样的:
    键入命令行java aClass后,通过classLoader载入aClass类,寻找有无static void main(String [] args)这个方法,有,执行之,无,返回信息并退出。还有,执行任何类型的java程序,都要指定它的classpath的,否则是无法找到你的java程序的。
    所以我认为答案为:b,e你还分不清楚public static, protected static ,private static有什么区别,请自己参考文档!
      

  7.   

    我的回答的确有错,stand-alone的java程序必须是static void main(String[])就可以了,不管前面是不是public,protected, protected(我没写错,private也行!)。但是main确确实实只是一个普通函数而已,因此只要符合重载(overloading)或重写(overridden)的规则,在一个类里定义无穷个main函数都可以,只有一个要求,在参数类型为String[]的时候,不能返回非void的类型。可以试一下这个程序:class TestMain{ // 没错,类也不需要是public的
       private static void main(String[] args) { // 只要有static, private也可以运行
          System.out.println("This is a test");
       }   private int main(String a) {  // 非void返回值,参数可以是除String[]之外任何类型
          System.out.println(a);
          return 1;
       }   public void main(String a, String b) { //void 返回值,参数可以是除String[]任何类型
          System.out.println(a + b);
       }
    }
      

  8.   

    大哥,你没仔细地看我的答复哦!!我已经说得很清楚了:void main(String[] args)是Java application得唯一入口函数。所谓的函数重载,其实重载出来的函数每一个都是独立的(independence),java中规定,只要返回值类型,函数名称以及参数类型列表定义好了,该函数也就唯一的确定了。这也就是我说void main(String[] args)是Java application得唯一入口函数的原因。重载出来的其他main函数已经不是java需要的入口函数啦!!!另外,我上面有个地方讲错了,用private也可以,在命令行方式中是可以的,因为classLoader已经将该类载入,当然可以找到自己的private得main函数。
      

  9.   

    好了,我们讲的不是一回事呀。:)入口函数确实是你讲的那样没错,这我也承认,而且从我写的那一段也看得出来这一点。我只是针对说不同的main可不可以编译的问题呀。
      

  10.   

    昏倒!!!!重载main当然没问题了!!!main也只不过是一个普普通通的函数而已嘛!