Que faire si la principale méthode est à l'intérieur de “non public class” de java fichier?
J'ai un fichier java contenant plus d'une classe, dont l'une est publique. Si la méthode main est à l'intérieur d'un non-publique de la classe. Je ne peux pas exécuter ce fichier java. Pourquoi est-ce? et il n'y a pas d'erreur de compilation. Si oui, comment puis-je utiliser cette méthode?
La méthode main doit être en mesure d'accéder de l'extérieur.
OriginalL'auteur Ahamed | 2012-09-21
Vous devez vous connecter pour publier un commentaire.
Vous pouvez certainement remplacer méthode principale et qu'il ne viole pas un compilateur de règles et, par conséquent, vous n'aurez pas toutes les erreurs du compilateur.
Vous de vérifier que malgré le fait que vous avez plus d'une classe d'un fichier qui est déclarée comme public est le nom du fichier que vous essayez d'exécuter.
C'est une convention que le fichier doit être nommé d'après la même classe qui est public de ce code.
C'est pourquoi, lorsque vous essayez d'exécuter cette classe, il ne dispose pas d'une méthode principale à partir de laquelle il commence à s'exécuter.Donc, si vous voulez exécuter la méthode main dans le non public class le seul moyen pour cela est de les appeler dans le main à partir d'une méthode main de la classe publique.
La réponse semble incorrect. D'abord, comme souligné par Lew Bloch, vous ne pouvez pas remplacer une méthode statique et la deuxième, vous pouvez lancer la méthode main dans le non-public de la classe, sans aller si la classe publique comme suggéré ici. Vous devez passer le nom de la non-publique de la classe, qui contient le "principal" de la méthode, l'argument de la "java" de commande.
OriginalL'auteur Galaxin
En fait, vous pouvez exécuter la méthode main d'une classe. si vous mettez cette classe
dans un fichier nommé NonPubClass.java. Vous pouvez compiler ce fichier en utilisant la commande javac, mais vous ne serez pas obtenir un NonPubClass.class, vous obtiendrez un A.class au lieu de cela. L'utilisation de java un pour appeler la classe et vous verrez la chaîne d'impression --- Ce n'est pas une classe publique!
OriginalL'auteur charles_ma
Regardez ce code:
Super.java
Pour imprimer
Hello
vous pouvez compiler et exécuter le programme en tant que:Comment cela fonctionne?
Le compilateur génère séparé
.class
fichier pour chaque classe dans votre programme. Donc, au lieu d'appeler lamain()
de non-publique de la classe de la classe publique dumain()
vous pouvez imprimer la sortie, comme indiqué ci-dessus.Remarque: Que la convention dit, vous devez placer un
public class
dans un fichier distinct<class_name>.java
. Et ne mettez pas plus d'une classe dans un fichier unique (sauf si ils sont intérieur de la classe) parce que si vous souhaitez les importer ou de les utiliser avec d'autres classes, alors il va causer problème.OriginalL'auteur Mohammad Faisal
De Réponse Simple.
You can't
. Vous avez besoin de la méthode main dans unpublic class
et sa signature doivent êtrepublic static void main(String... args)
Pourquoi il y aurait? Vous ne faites rien de mal, aussi loin que les règles de compilation sont concernés.
La seule chose c'est que votre
non-public-class-main-method
ne fonctionne pas comme un point d'entrée de votre code.Merci. Je vais l'ajouter dans ma réponse. 🙂
Où dans le JLS faut-il dire que la classe doit être public?
Puisque vous êtes toujours actif, pouvez vous s'il vous plaît supprimer cette réponse? Il n'est pas correct que le
main
méthode doit être dans unpublic
classe pour être utilisable et peut distraire inexpérimentés utilisateurs Java, qui ne savent pas mieux. (Si cette affirmation était exacte sur le temps qu'il a été posté, que veuillez noter que ce n'est pas le cas aujourd'hui et cette réponse doit au moins être mis à jour). Je vous remercie.OriginalL'auteur Priyank Doshi
il y a quelque chose que je voudrais ajouter, bien que tout le monde ici croit qu'un public est nécessaire pour le principal dans une classe et qu'il ne fonctionnera pas sans
vous pouvez avoir autant de secteur dans une classe que vous le désirez, et vous pouvez l'avoir sans un modificateur d'accès public.
mais attention, seule la classe qui est nommé d'après le fichier peut être public
ce que je veux dire c'est que si vous nommez votre fichier a.java , seule la classe avec le nom un peut être public, personne d'autre ne peut avoir cette facilité
voici un code pour afficher ce :
comme vous pouvez le voir, le nom du fichier est helping.java
OriginalL'auteur user2440665
C'est une erreur de compilation si un niveau supérieur de type déclaration contient l'un des modificateurs d'accès suivants: protégé, privé, ou statique.Cette lien peut être utile.
OriginalL'auteur roshan
Ce n'est pas une erreur de compilation que u mentionné que le haut niveau de type de déclaration ne devrait pas être protégé, statique ou privé.
Si u passez par le lien http://docs.oracle.com/javase/specs/jls/se7/html/jls-7.html#jls-7.6 bien que u ont partagé ,il est tout à fait clair qu'un niveau supérieur de type déclaration se réfère qu'à une "Classe de haut niveau et d'Interface de déclarations de type" et ceux-ci ne doivent pas être protégés, en statique ou en privé au plus haut niveau des déclarations, mais nous pouvons utiliser protégé, en statique ou en privé pour toutes les méthodes ou la déclaration de la variable à l'intérieur d'eux.
À l'égard de code ci-dessus, il n'y a rien de mal dans la déclaration, et le code de compiler et d'exécuter avec succès comme toutes externes la classe de haut niveau sont par défaut et il n'y a pas de violation.
La réponse à la question posée en haut est exactement comme indiqué par quelques experts à haut, que
"pour sûr, on peut avoir un fichier avec la méthode main à l'intérieur de non-publique de la classe et de compiler ainsi que d'exécuter avec succès, mais assurez-vous qu'au moment de l'exécution du programme que nous avons à passer de la classe nom de "méthode main" à l'interprète de java au lieu de la classe qui est public."
Si nous avons 2 classes(public) et B(non-public contenant la méthode main) , puis le fichier compiler avec "javac A.java" mais lors de l'exécution du code, nous devons passer la commande "java B" .
OriginalL'auteur Rakesh Pathak