2010-05-31 1 views

ответ

0

Он будет скомпилирован, он не будет запущен (проверен с использованием Eclipse).

4

У вас может быть столько классов с любыми основными методами, какие вы хотите. Они просто не могут быть точкой входа, если они не соответствуют подписи.

13

- метод main() может быть указан как закрытый или защищенный?

Да

он будет компилировать?

Да

это будет работать?

Да, но это не может считаться точкой входа приложения. Он будет работать, если он вызывается из другого места.

Дайте ему попробовать:

$cat PrivateMain.java 
package test; 
public class PrivateMain { 
    protected static void main(String [] args) { 
     System.out.println("Hello, I'm proctected and I'm running"); 
    } 
} 
class PublicMain { 
    public static void main(String [] args) { 
     PrivateMain.main(args); 
    } 
} 
$javac -d . PrivateMain.java 
$java test.PrivateMain 
Main method not public. 
$java test.PublicMain 
Hello, I'm proctected and I'm running 

В этом коде, защищенный метод не может быть использован в качестве точки входа в приложение, но он может быть вызван из класса PublicMain

Private методы не могут быть вызваны, но из класса он сам. Так что вам нужно что-то вроде:

public static void callMain() { 
     main(new String[]{}); 
} 

Для вызова main если это были частными.

+2

@Michael - единственная сигнатура метода, признанная 'java' как точка входа, является' static void main (String []) '. Методы с любым другим именем, отличным от 'main', любые типы параметров или тип возврата, не являющийся' 'void', НЕ распознаются и никогда не были. –

+0

@ Stephen C: Спасибо, что указали на это ... Я думаю, что я смутил точку входа Java с другими языками ... Да, это должно быть C# :( –

5

Да, это скомпилирует. Но он не будет работать как точка входа в программу.

Java ищет основную подпись основного метода. Если какой-либо из модификаторов отличается, тогда он предположим, что это какой-то другой метод.

запустить и проверить 4 urself. :)