2011-06-25 2 views
2

Как правило, в разных книгах я обнаружил, что основной метод должен быть общедоступным, потому что он должен быть видимым для загрузчика классов. Но JVM выполняет (или обеспечивает специальную обработку) различные частные методы, например, метод readObject/writeObject в ObjectOutputStream.Почему это обязательное объявлять основной метод public ... Почему JVM не может выполнить частный основной метод?

+0

какая польза будет ли за то, что особый случай для видимости 'main'? Зачем вам нужен «частный» или защищенный «главный»? – Mat

+2

JVM не имеет специальной обработки для вызова частных методов вне класса. Методы, которые вы назвали, являются общедоступными. Единственный способ обойти модель видимости - использовать отражение, но это нужно, потому что цель состоит в том, чтобы глубже понять объекты. –

+0

@Mat Я просто хочу знать, почему часть и какое мышление могли быть при определении спецификации, поэтому я хочу знать эту причину, кроме сохранения простой простоты. – Ashish

ответ

1

Я думаю, потому что так оно и есть, и именно так решает Java Language Specification. Я могу понять, почему они выбрали модификатор общедоступного доступа, поскольку вы вызываете Java-программу извне класса (через командную строку), чтобы он соответствовал системе управления доступом Java, что основной метод должен быть общедоступным.

Если основным методом было разрешено быть закрытым, но тогда вы должны вызвать его из другого места, например. java, что противоречит модификаторам доступа Java. Было бы непоследовательным поведением, независимо от того, насколько это технически возможно.

+0

частные методы могут быть вызваны из использования отражения ... поэтому я не думаю, что объявление основного как частного нарушает любые фундаментальные ... – Ashish

+0

@user (long number) - может быть SecurityManager, и только потому, что это технически возможно, это не значит, что это правильная вещь или правильный дизайн. – planetjones

+0

«Если главное ... технически возможно». << на этот комментарий Я хочу сказать, что это не будет непоследовательным поведением. На вашем последнем комментарии я согласен с вами в том, что это может быть плохой дизайн. Но я хочу знать помимо всего этого ... может ли быть большая проблема, объявив метод private? – Ashish

2

Совершенно очевидно, что точка входа вашей программы должна быть видимой.

0

Не обязательно объявлять main() как общедоступные. Мы также можем объявить его закрытым. Когда метод объявлен как закрытый, программа компилируется правильно, но это приведет к ошибке выполнения. Основной метод не является общедоступным

Но если вы объявите основной метод как закрытый, вы не сможете выполнять этот класс как отдельную java-программу. Любой класс java, который должен быть выполнен как отдельный файл, должен иметь основной метод public, static и возвращает пустоту. В противном случае компилятор Java не распознал бы файл как исполняемый автономный java-файл и не разрешил бы его запускать.

class A 
{ 
int x=7; 
void show(){ 
System.out.println(x); 
} 
} 
class Test 
{ 
private static void main(String args[]) 
{ 
A a = new A(); 
a.show(); 
} 
} 

покажет сообщение об ошибке

Main method not public 
Смежные вопросы