Maison Java javaDidacticiel Plusieurs classes de niveau supérieur peuvent-elles exister dans un seul fichier Java et quelles en sont les implications ?

Plusieurs classes de niveau supérieur peuvent-elles exister dans un seul fichier Java et quelles en sont les implications ?

Nov 27, 2024 pm 04:17 PM

Can Multiple Top-Level Classes Exist in a Single Java File, and What Are the Implications?

Java : plusieurs déclarations de classe dans un seul fichier

Bien qu'il soit possible de définir plusieurs classes de niveau supérieur dans un seul fichier Java, en respectant certaines conventions sont essentielles. L'une de ces conventions est qu'une seule classe peut être déclarée comme publique, comme spécifié par la spécification du langage Java (JLS).

Terminologies

Il n'y a pas de terme spécifique pour décrire cette technique de définition de plusieurs classes dans un seul fichier. Contrairement aux classes internes, imbriquées ou anonymes, ces classes de niveau supérieur ont une portée et une relation différentes avec le fichier qui les contient.

Restriction d'unité de compilation

Le JLS déclare que le système peut imposer la restriction selon laquelle ces classes secondaires non publiques ne peuvent pas être « référencées par code dans d'autres unités de compilation du package ». Cela signifie qu'ils ne peuvent pas être traités comme des packages privés.

Implémentation

En pratique, les compilateurs Java comme javac n'appliquent pas strictement cette restriction. Cependant, ils ont une limitation qui rend hautement indésirable la référence à une classe de niveau supérieur à partir d'un autre fichier, à moins qu'elle ne partage le même nom que le fichier dans lequel elle réside.

Par exemple, considérons deux Java fichiers :

  • Foo.java :
public class Foo {
    // ...
}
  • Bar.java :
public class Bar {
    // ...
    Baz baz; // Compilation error if compiled separately
}

class Baz {
    // ...
}

Si Foo.java fait référence à Baz mais pas à Bar, tentative de compilation Foo.java entraînera indépendamment une erreur de compilation.

Raisonnement

Cette limitation existe car javac ne peut pas déterminer automatiquement quel fichier source rechercher lorsqu'une classe est référencée à partir d'une autre déposer. Pour résoudre ce problème, le compilateur exige que toute classe de niveau supérieur référencée par une classe externe porte le même nom que le fichier contenant ou soit explicitement déclarée dans une classe du même nom (par exemple, dans l'exemple ci-dessus, si Foo .java contenait également une classe Bar).

Conséquences et bonnes pratiques

Bien qu'il soit techniquement possible d'utiliser plusieurs classes de niveau supérieur dans un seul fichier, cela est généralement considéré comme une mauvaise pratique en raison des limitations du compilateur décrites ci-dessus. Pour maintenir un processus de construction fiable, il est recommandé de respecter la convention consistant à placer une classe de niveau supérieur par fichier et à déclarer clairement sa visibilité (publique ou privée du package).

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Tutoriel PHP
1600
276
Comment gérer les transactions en Java avec JDBC? Comment gérer les transactions en Java avec JDBC? Aug 02, 2025 pm 12:29 PM

Pour gérer correctement les transactions JDBC, vous devez d'abord désactiver le mode de validation automatique, puis effectuer plusieurs opérations, et enfin vous engager ou randonner en fonction des résultats; 1. Appelez Conn.SetAutoCommit (false) pour démarrer la transaction; 2. Exécuter plusieurs opérations SQL, telles que l'insertion et la mise à jour; 3. Appelez Conn.Commit () Si toutes les opérations sont réussies, et appelez Conn.Rollback () Si une exception se produit pour garantir la cohérence des données; Dans le même temps, les ressources TRY-With doivent être utilisées pour gérer les ressources, gérer correctement les exceptions et clôturer les connexions pour éviter la fuite de connexion; De plus, il est recommandé d'utiliser des pools de connexion et de définir des points de sauvegarde pour réaliser un retour en arrière partiel, et de maintenir les transactions aussi courtes que possible pour améliorer les performances.

Comment travailler avec le calendrier à Java? Comment travailler avec le calendrier à Java? Aug 02, 2025 am 02:38 AM

Utilisez des classes dans le package Java.Time pour remplacer les anciennes classes de date et de calendrier; 2. Obtenez la date et l'heure actuelles via LocalDate, LocalDateTime et Localtime; 3. Créez une date et une heure spécifiques en utilisant la méthode OF (); 4. Utilisez la méthode plus / moins pour augmenter et diminuer le temps; 5. Utilisez ZonedDateTime et ZoneID pour traiter le fuseau horaire; 6. Format et chaînes de date d'analyse via DateTimeFormatter; 7. Utilisez instantanément pour être compatible avec les anciens types de dates si nécessaire; Le traitement des dattes dans le Java moderne devrait donner la priorité à l'utilisation de Java.timeapi, qui fournit clairement, immuable et linéaire

Comparaison des frameworks Java: Spring Boot vs Quarkus vs MicronAut Comparaison des frameworks Java: Spring Boot vs Quarkus vs MicronAut Aug 04, 2025 pm 12:48 PM

Pré-formancetartuptimemoryusage, quarkusandmicronautleadduetocompile-timeprocessingandgraalvsupport, withquarkusofperforming lightbetterine scénarios.

Mastering Injection de dépendance en Java avec le printemps et Guice Mastering Injection de dépendance en Java avec le printemps et Guice Aug 01, 2025 am 05:53 AM

DépendanceInjection (DI) IsadesignPatternwhereBjectSeveveveltency dexternal, promotionnloosecouplingAndreasiestingthroughroughConstructor, seter, orfieldInjection.2.springframeworkusesannotations like @ composant, @ service et @ autowiredwithjava-baskusecondotations like @ composant, @ service et @ autowiredwithjava-basesConfitations lik

Techniques d'optimisation et de profilage des performances Java Techniques d'optimisation et de profilage des performances Java Jul 31, 2025 am 03:58 AM

Utilisez des outils d'analyse des performances pour localiser les goulots d'étranglement, utiliser VisualVM ou JProfiler dans la phase de développement et de test, et donner la priorité à l'async-profil dans l'environnement de production; 2. Réduire la création d'objets, réutiliser les objets, utiliser StringBuilder pour remplacer l'épissage de la chaîne et sélectionner les stratégies GC appropriées; 3. Optimiser l'utilisation de la collection, sélectionner et prérégler la capacité initiale selon la scène; 4. Optimiser la concurrence, utiliser des collections simultanées, réduire la granularité de verrouillage et régler raisonnablement le pool de threads; 5. Assurez les paramètres JVM, définissez la taille du tas raisonnable et le collecteur de déchets à faible latence et activez les journaux GC; 6. Évitez la réflexion au niveau du code, remplacez les classes de wrapper par des types de base, retardez l'initialisation et utilisez final et statique; 7. Test et surveillance des performances continues, combinées avec JMH

Comprendre les internes de la machine virtuelle Java (JVM) Comprendre les internes de la machine virtuelle Java (JVM) Aug 01, 2025 am 06:31 AM

Les capacités de «écriture, runany»

Qu'est-ce qu'une impasse en Java et comment pouvez-vous l'empêcher? Qu'est-ce qu'une impasse en Java et comment pouvez-vous l'empêcher? Aug 23, 2025 pm 12:55 PM

ADEADLOCKINJAVAOCCURSWHENTWOORMORORETHREADSAREBLOCKEDEDFOREVERS, chaque avance pour la fourniture de laBerce-Organisation de la manière générale;

Développement Web complet avec Java, Spring Boot et React Développement Web complet avec Java, Spring Boot et React Jul 31, 2025 am 03:33 AM

La sélection de la pile de technologie Java Springboot React peut créer des applications Web complètes stables et efficaces, adaptées aux systèmes de taille petite et moyenne à grande entreprise. 2. Le backend utilise le Springboot pour construire rapidement Restulapi. Les composants principaux incluent Springweb, Springdatajpa, Springsecurity, Lombok et Swagger. La séparation frontale est réalisée via @RestController renvoyant les données JSON. 3. Le front-end utilise React (en conjonction avec Vite ou CreateraCtApp) pour développer une interface réactive, utilise Axios pour appeler l'API back-end et réagiter

See all articles