N'utilisez une exception checked que si l'appelant peut réellement s'en remettre et que vous voulez que le compilateur force une décision ; utilisez unchecked pour les erreurs de programmation et pour les défaillances que personne plus haut ne peut corriger. En pratique, le Java moderne penche vers unchecked, en enveloppant les défaillances bas niveau dans une exception métier qui porte du contexte, traitée une seule fois à une frontière comme un gestionnaire d'exceptions qui la traduit en réponse.
Pourquoi les recruteurs posent cette question
Le recruteur cherche du jugement et repère les habitudes qui ruinent une base de code : attraper Exception et la logguer, avaler une exception dans un bloc vide, ou tout envelopper dans une RuntimeException sans contexte. Il veut aussi entendre parler d'une seule couche de traduction, parce qu'éparpiller des try catch dans la logique métier est ce qui rend les défaillances introuvables. Les lambdas et les streams rendent les exceptions checked vraiment pénibles, ce qui mérite d'être dit.
Comment structurer votre réponse
- Donnez le test de récupérabilité pour choisir entre les deux.
- Expliquez l'enveloppement avec contexte plutôt que la relance de causes brutes.
- Décrivez le traitement dans une seule couche frontière, pas partout.
- Listez les antipatterns que vous refusez d'accepter en revue.
Exemple de réponse
Mon test, c'est de savoir si un appelant peut en faire quelque chose d'utile. Un paiement refusé par le prestataire est un résultat métier légitime, donc c'est soit une exception checked, soit plus souvent un type résultat. Un argument null ou une connexion à la base qui échoue n'est pas quelque chose que le code appelant peut corriger, donc c'est unchecked. Dans les services j'utilise surtout des exceptions métier unchecked, en enveloppant la cause sous-jacente pour que la trace de pile survive, et en ajoutant les identifiants que je voudrai dans le log, comme l'id de commande, puisqu'une exception SQL nue trois couches plus bas ne me dit rien. Le traitement se fait une fois, à une frontière : dans Spring c'est un gestionnaire d'exceptions qui associe chaque exception métier à un code de statut et à un corps de réponse, ce qui garde les contrôleurs propres. Ce que je conteste en revue, c'est attraper Exception largement, attraper et logguer puis continuer comme si de rien n'était, et les blocs catch vides. J'utilise aussi try-with-resources partout plutôt que des blocs finally, parce que les exceptions supprimées et les échecs de fermeture sont gérés correctement sans effort.
Vous passez cet entretien bientôt ? GhostPilot écoute votre appel en direct, repère la question dès qu'elle est posée et affiche une réponse structurée à l'écran en temps réel. Essayez-le lors de votre prochain entretien blanc, ou prenez un Session Pass à $29, sans abonnement, pour le jour J.
Voir comment ça marcheQuestions de relance à prévoir
- Comment traitez-vous une exception checked à l'intérieur d'une lambda de stream ?
- Quand renverriez-vous un type résultat au lieu de lever une exception ?
- Quel contexte attachez-vous à une exception pour qu'elle soit utile dans un log ?
Autres questions pour Développeur Java
Votre recruteur posera sa propre version de celle-ci. Collez votre véritable fiche de poste dans le Question Predictor gratuit et obtenez les 20 questions que ce poste a le plus de chances de poser, avec ce que chacune cherche vraiment à sonder.
Prédire mes questions