Finition (3)

  1. Lorsqu'un objet est transmis en tant que paramètre à une autre méthode, cette méthode peut modifier les propriétés de l'objet et renvoyer le résultat modifié. Est-ce par valeur ou référence?

    • Transfert de valeur. L'appel de méthode en Java ne prend en charge que le transfert de valeur de paramètre. Les propriétés de l'objet peuvent être modifiées pendant l'appel, mais cette modification n'affectera pas l'appelé.
  2. La différence entre String, StringBuilder et StringBuffer

    • Il s'agit du stockage et du fonctionnement des chaînes de rappel, où String ne peut lire que des chaînes, ce qui signifie que les chaînes modifiées par String ne peuvent pas être modifiées.
    • StringBuffer et StringBuilder font référence à un objet chaîne qui peut être modifié directement; StringBuffer est thread-safe, StringBuilder n'est pas thread-safe, donc StringBuilder est plus efficace que StringBuffer, les méthodes de ces deux classes sont exactement les mêmes, StringBuilder est référencé par java 5
  3. Comment la JVM charge-t-elle les fichiers .class, le principal mécanisme de chargement des fichiers .class

    • Le chargement des classes est effectué par le ClassLoader et ses sous-classes. Il est principalement responsable de l'interrogation et du chargement des classes dans le fichier de classe lors de l'exécution:
    • En raison de la nature multiplateforme de java, le programme source java compilé n'est pas un programme exécutable, mais un ou plusieurs fichiers de classe. Le chargement de classe fait référence à la lecture en mémoire des données du fichier .calss de la classe, à la création d'un tableau d'octets à lire dans le fichier .class, puis à la génération d'un objet de classe correspondant à la classe chargée. Après le chargement, l'objet de classe Encore incomplète, cette classe n'est toujours pas disponible; l'ajout de cette classe entrera dans une phase de connexion, cette phase comprend la vérification, la préparation (allouer de la mémoire pour les variables statiques et définir les valeurs initiales par défaut), la résolution (remplacer les références de symbole par directe (Référence) trois étapes; enfin, la JVM initialise la classe, y compris: si la classe a une classe parent directe et que la classe parent n'est pas initialisée, alors la classe parent est initialisée en premier; s'il y a une instruction d'initialisation dans la classe, ces initialisations seront effectuées une fois Déclaration.
    • Ces processus sont effectués via des chargeurs de classe, notamment: le chargeur racine (BootStrap), le chargeur d'extension (Extension), le chargeur système (System), le chargeur personnalisé (sous-classe de java.lang.ClassLoader). Depuis jdk1.2, le processus de chargement de classe utilise le mécanisme de délégation de classe parent (PDM), ce qui signifie que dans ce mécanisme, le Bootstrap fourni avec la JVM est le chargeur racine, et les autres chargeurs n'ont qu'une seule classe parent à charger Appareil. Le chargement de classe demande d'abord le chargeur de classe parent, qui est chargé par son chargeur de classe enfant lorsque le chargeur de classe parent est impuissant
    • Bootstrap: responsable du chargement de la bibliothèque de classes de base de JVM
    • Extension: chargez la bibliothèque de classes à partir du répertoire spécifié par le système, le chargeur parent est Bootstrap
    • Système: chargeur d'application, la classe parent est Extension, il chargera la classe à partir du chemin de classe de la variable d'environnement ou du répertoire spécifié par les propriétés du système, est le chargeur parent par défaut du chargeur défini par l'utilisateur
  4. La différence entre les classes abstraites et les interfaces:

    • Ne peut pas être instancié
    • La classe abstraite utilise l'abstrait; l'interface utilise l'interface
    • Une classe peut implémenter plusieurs interfaces, mais ne peut hériter que d'une classe abstraite
    • La classe abstraite peut être privée, par défaut, publique, protégée; l'interface ne peut être publique
    • Les classes avec des méthodes abstraites doivent être déclarées en tant que classes abstraites, les classes sans méthodes abstraites peuvent être déclarées en tant que classes abstraites
    • Les variables membres peuvent être définies dans la classe abstraite, les variables membres définies dans l'interface sont en fait des constantes
  5. La différence entre la classe interne et la classe interne statique

    • Les classes internes statiques sont décorées de statiques et n'ont pas besoin de s'appuyer sur des classes externes pour l'instanciation; les classes internes ordinaires doivent être instanciées via des classes externes
  6. Les méthodes abstraites peuvent-elles être statiques, peuvent-elles être des méthodes locales, peuvent-elles être modifiées par synchronisation

    • Non, les méthodes statiques ne peuvent pas être réécrites et les méthodes abstraites nécessitent l'héritage de sous-classe; le code local fait référence aux méthodes implémentées par le code local, mais les méthodes abstraites ne sont pas implémentées; synchronisé modifie la logique métier, tandis que les méthodes abstraites n'ont pas de logique
  7. La différence entre les variables statiques et les variables d'instance

    • Les variables statiques sont décorées avec de la statique et n'appartiennent pas à la classe. Une variable statique est une seule en mémoire et stockée dans la zone de méthode; les variables d'instance appartiennent à la classe, vous devez créer un objet de classe avant de pouvoir utiliser la variable d'instance
  8. Méthode de clonage d'objets

    • Implémenter une interface clonable et réécrire clone ()
    • Implémenter une interface sérialisable, via la sérialisation et la désérialisation d'objets
  9. Un fichier source .java peut-il contenir plusieurs classes

    • Oui, mais il peut y avoir au plus une classe publique dans un fichier source et le nom du fichier doit être le même que le nom de la classe publique
  10. Les classes internes peuvent référencer les membres de classes externes, y compris les méthodes privées

  11. mot-clé final

    • Classe modifiée: la classe ne peut pas être héritée
    • Méthodes modifiées: les méthodes ne peuvent pas être remplacées
    • Variables modifiées: ne peuvent pas être modifiées après l'affectation
  12. Erreur 和 Exception

    • L'erreur est une erreur au niveau du système, une erreur qui ne peut pas être gérée manuellement et ne peut pas être interceptée, comme un dépassement de mémoire
    • L'exception fait référence à une exception qui peut être interceptée ou doit être traitée par le programme
  13. Exceptions d'exécution courantes

    • NullPointerException: exception de pointeur nul
    • ClassCastException: exception de conversion de type
    • IndexOutOfBoundsException: exception d'indice hors limites
    • IllegalArgumentException: exception de paramètre illégale
    • ArithmeticException: exception arithmétique
    • ArrayIndexOutOfBoundsException: exception d'index hors limites du tableau
    • StringIndexOutOfBoundsException: indice de chaîne hors limites
    • NumberFormatException: exception de mise en forme des nombres
  14. Comment TreeMap et TreeSet comparent-ils les éléments lors du tri? Comment la méthode sort () de la classe d'outils Collections compare-t-elle les éléments?

    • : TreeSet requiert que la classe à laquelle appartient l'objet stocké doit implémenter l'interface Comparable, qui fournit la méthode compareTo () de comparaison des éléments, qui sera rappelée lorsque l'élément sera inséré pour comparer la taille de l'élément.
    • TreeMap requiert que les paires clé-valeur stockées de clés mappées doivent implémenter l'interface Comparable pour trier les éléments en fonction des clés.
    • La méthode de tri de la classe d'outil Collections a deux formes surchargées. La première nécessite que les objets stockés dans le conteneur entrant à trier doivent implémenter l'interface Comparable pour réaliser la comparaison des éléments; la seconde n'impose pas les éléments dans le conteneur Doit être comparable, mais nécessite la transmission d'un second paramètre. Le paramètre est un sous-type de l'interface du comparateur (la méthode de comparaison doit être réécrite pour obtenir la comparaison des éléments), ce qui équivaut à une règle de tri définie temporairement. L'algorithme est également une application du mode de rappel (prise en charge de la programmation fonctionnelle en Java).
  15. Méthode sleep () de la classe de thread et méthode wait () de l'objet

  • La méthode sleep () est une méthode statique de la classe de threads (Thread). L'appel de cette méthode entraînera la suspension de l'exécution par le thread actuel pendant une durée spécifiée et donnera l'opportunité d'exécution (CPU) aux autres threads, mais le verrou d'objet reste, donc après la fin du temps de sommeil Il reprendra automatiquement (le thread revient à l'état prêt, veuillez vous référer au diagramme de transition d'état du thread à la question 66)
  • wait () est une méthode de la classe Object. L'appel de la méthode wait () de l'objet oblige le thread actuel à abandonner le verrou de l'objet (exécution suspendue par le thread) et à entrer dans le pool d'attente de l'objet (pool d'attente). Seule la méthode notify () de l'objet (ou notifyAll) est appelée () La méthode) peut réveiller les threads du pool d'attente pour entrer dans le pool de verrous (pool de verrous), si le thread retrouve le verrou de l'objet, il peut entrer dans l'état prêt.
  1. sleep () 和 yield ()
    • La méthode sleep () ne prend pas en compte la priorité du thread lorsqu'elle donne la chance à d'autres threads de s'exécuter, elle donnera donc au thread de faible priorité une chance de s'exécuter; la méthode yield () ne donnera que le thread de priorité identique ou supérieur Opportunité
    • Le thread passe à l'état bloqué après l'exécution de la méthode sleep () et passe à l'état prêt après l'exécution de la méthode yield ()
    • La méthode leep () déclare que InterruptedException est levée, tandis que la méthode yield () ne déclare aucune exception
  2. Implémentation multi-thread
    • Héritez de la classe Thread et définissez le comportement du thread en remplaçant la méthode run () (avant Java 5)
    • Implémentez l'interface Runnable et définissez le comportement du thread en remplaçant la méthode run () (avant Java 5)
    • Implémenter l'interface Callable, réécrire call ()
  3. synchronisé
    • Les objets ou méthodes peuvent être marqués comme synchronisés pour obtenir un accès mutuellement exclusif aux objets et méthodes
    • Synchronisé (objet) {…} peut être utilisé pour définir des blocs de code synchronisés
    • Synchronisé en tant que modificateur de méthode lors de la déclaration d'une méthode
  4. Exemples synchrones et asynchrones
    • Synchronisation: Lorsqu'un élément de données est en cours de lecture, un autre thread écrit dessus, un thread écrit sur les données et un autre thread lit les données. Celles-ci doivent être synchronisées et bloquées
    • Asynchrone: lorsqu'un programme a besoin de beaucoup de temps pour accéder à une méthode et que vous ne souhaitez pas que le programme attende le retour de la méthode, vous pouvez utiliser des opérations asynchrones non bloquantes.
  5. synchronisé 和 java.util.concurrent.locks.Lock
    • Verrou: peut compléter toutes les fonctions de synchronisation, la nouvelle API de java 5; ne nécessite pas que le verrou soit acquis; besoin de libérer manuellement le verrou, il est préférable de le libérer enfin
    • synchronisation: libérera automatiquement le verrou;
  6. Façons d'obtenir des objets de classe d'une classe
    • Type.class: String.class
    • Object.getClass (): "a" .getClass ()
    • Class.forName () : Class.forName ("java.lang.String")
  7. La méthode de création d'objets par réflexion:
    • L'objet classe appelle newInstance (): "a" .getClass (). NewInstance ()
    • Obtenez le constructeur via l'objet classe, puis appelez newInstance (): String.class.getConstructor (String.class) .newInstance ("a")
  8. Appeler la méthode d'un objet par réflexion
    • Méthode m = "a" .getClass (). GetMethod ("toUpperCase");
    • m.invoke ("a") // Sortie A
Publié 104 articles originaux · gagné 18 · vues 8613

Je suppose que tu aimes

Origine blog.csdn.net/y368769/article/details/104047745
conseillé
Classement