D'accord, un fichier source Java doit avoir au moins une classe publique et le fichier doit être appelé "CLASS-NAME.JAVA". Assez juste. Par conséquent, si j'ai une classe, les suivants compileraient: p> mais quels me bugs est que si je supprime le modificateur d'accès "public" Du code ci-dessus, le code compile toujours. Je ne comprends tout simplement pas. Supprimer, le code ressemble à: p> dans le code ci-dessus, car j'ai supprimé le modificateur d'accès code> code>, ma classe a Donc, ma question est, comment le code ci-dessus compile-t-il? Le fichier par défaut CODE> ou Package CODE> L'accès, c'est-à-dire qu'il est impossible d'accéder à partir du monde extérieur, uniquement de l'emballage. P> helloworld.java code> dans ce cas ne dispose pas de de la classe code> helloworld (uniquement un package-privé helloworld.class) et donc à ma compréhension ne doit pas compiler. p> p>
6 Réponses :
Vous pouvez placer une classe non publique dans un fichier et ce n'est pas un bug, mais une fonctionnalité.
Votre problème est au niveau de l'emballage, pas compiler. Parce que vous pouvez compiler ce fichier avec une classe non publique, mais vous ne pouvez pas l'appeler de l'extérieur, il ne fonctionne donc pas comme classe de base de l'application p>
comme ceci: p>
Merci, mais mon point n'est pas d'ajouter un type de données privé ou quoi que ce soit. Ma question est de savoir comment est-ce que le code ci-dessus compilait et / travaille depuis ici que j'ai un fichier .java, mais sans aucune classe publique en informatique. La seule classe à l'intérieur est une classe privée de forfait, pas une classe publique.
Et où est le problème? Vous pouvez créer une autre classe dans le même package (avec le même effet) et utiliser ce package-Class privé.
Encore une fois, ma question ne doit pas ajouter de nouvelle classe dans le fichier. Je ne suis concerné que par l'accès privé de paquet.
J'ai édité du code, ce n'est pas une nouvelle classe dans le fichier, mais dans l'emballage.
Ma question est complètement différente de ce que vous illustrez :) Ce que vous dites est correct, mais ce n'est pas ce que je veux savoir. Je veux juste savoir pourquoi avoir un forfait classe privée dans un fichier encore compile.
comme j'ai dit. Il compile car il est valide pour avoir un fichier unique avec une seule classe privée. Il est similaire aux membres privés de classe, de disposer de classes privées de colis.
Un fichier source Java doit avoir au moins une classe publique et le fichier doit être appelé CLASS-NAME.JAVA P> blockQuote>
incorrect, une classe de niveau supérieur ne doit pas être déclarée publique. Les états JLS; P>
Si une classe de niveau supérieur ou un type d'interface n'est pas déclarée publique, elle ne peut être accessible qu'à partir de l'emballage dans lequel elle est déclarée. p> blockQuote>
voir http://java.sun.com/docs/ Livres / JLS / SECOND_EDITION / HTML / NAMES.DOC.HTML # 104285 SECTION 6.6.1. P>
Merci! Vous dites donc que quiconque appelle la principale () l'appelle à partir d'une sorte de contexte de colis? C'est-à-dire que l'appelant (la JVM probablement) qui appelle la principale () est dans le même forfait que ma classe HelloWorld? Juste confus! Donc, merci d'avoir pris du temps pour répondre à mes questions.
Vous pouvez également définir plusieurs classes non publiques dans un fichier Java.
Alors maintenant, ma question est la suivante: helloworld est une classe privée de paquet dans la classe par défaut, ai-je raison? Donc, il devrait être accessible de l'intérieur du package par défaut, mais pas de l'extérieur du package par défaut, non? DÉCENTEZ AVANT DE CONSEILLER EN PLUS, lorsque MAIN () est appelé, il doit être appelé de dans i> le paquet par défaut, ai-je raison? Ou, quiconque appelle la principale () est dans le même forfait que la classe HelloWorld. Droit ?
Lorsque vous ne spécifiez pas le modificateur d'accès de la classe (ou de son champ ou de son mode), il est attribué à «Par défaut». Cela signifie qu'il n'est accessible que depuis dans le même paquet (dans ce cas, le package par défaut). P>
Le site Web JavaBeginner.com a un article Sur le sujet - vous devriez vous familiariser avec les modificateurs d'accès à Java, soit à partir de ce site, soit d'autres. P>
Une méthode principale est comme n'importe quelle autre méthode. La seule différence est que celle-ci peut être invoquée de la ligne de commande avec la commande Dans la fonction principale Java ne sont en aucun cas spéciales. Il existe juste une commande de terminal capable d'invoquer des méthodes statiques appelées principales ... p> java code>. Même si la méthode principale n'est pas visible de la ligne de commande, la classe peut toujours être utilisée comme n'importe quelle autre classe Java et que votre méthode principale peut être invoquée par une autre classe dans le même package. Par conséquent, j'ai du sens que cela compile. P>
Donc, maintenant, la classe Helloworld a une accessibilité privée-privée. Ainsi, quiconque appelle le principal (la JVM?) Doit maintenant être dans le même paquet, non?
J'ai appelé directement d'une classe Java puis oui. Les règles de réflexion sont toutefois légèrement différentes. Avec la réflexion, toute méthode non privée peut être invoquée. Le JVM utilise la réflexion pour invoquer votre méthode principale.
Ce n'est rien à se demander. Je suppose que ce comportement est similaire à celui de certains du compilateur C / C ++. P>
code comme "void principal () {/ Je pense qu'un comportement similaire est mis en œuvre par le compilateur Java. P>
Cordialement,
xong p>
Il y a des usages valides pour une classe non publique. Donc, le compilateur ne donne pas d'erreur lorsque vous essayez de compiler le fichier. P>
"Le fichier source Java doit avoir au moins une classe publique" i> euh non, Il n'a pas besoin d'avoir rien du tout.