J'ai essayé de résumer ce qui était demandé lors de l'édition site-java-

Pourquoi avez-vous décidé d'écrire cet article

Cela fait 5 mois que j'ai rejoint le site actuel, Dans les conversations avec des personnes sur le terrain, il y a beaucoup de choses comme «pourquoi cela se produit-il» et «que fait cette description? Parfois je regardais ensemble et disais "Je vois!".

Ce n'est pas bon de le terminer sur-le-champ, alors Je voulais le laisser comme un mémorandum pour moi-même.

Si vous avez des questions similaires, j'espère que vous trouverez cet article utile.

Sujet principal

Pourquoi puis-je attribuer une valeur de type primitif à une classe wrapper?

Question

Conversation d'un jour

Mr. A "Qu'est ce que c'est (int)? " Je "** cast ** est celui-là. ** changera le type **." M. A "Merci beaucoup." ~ Quelques jours plus tard ~ Mr. A "J'ai une question, puis-je l'assigner à une variable de type Integer sans transtyper une valeur de type int **?" Je "Je peux le faire. ** Auto boxing ** ou ** Unboxing **, il semble que c'était une fonction avec ce nom ..."

public class Sample {

  public void sample(long l) {
    int i = (int) l;
    Integer integer = i;
    log.info("int=[{}], Integer=[{}]", i, integer);
  }
}

répondre

java a une fonction qui effectue implicitement une conversion de type lors de l'affectation d'un type primitif (int) à une classe wrapper (Integer), qui est appelée autoboxing **. Contrairement à l'autoboxing, ** la fonction qui effectue implicitement la conversion de type d'une classe wrapper (Integer) vers un type primitif (int) est appelée unboxing **. Soyez prudent avec le déballage </ font>, ** La classe Wrapper peut gérer null car c'est un objet, mais lorsque j'essaye de l'attribuer à un type primitif, j'obtiens une NullPointerException **. Vérifions la valeur à l'avance.

  • Liste des types primitifs et des classes wrapper
Type primitif Classe de wrapper
boolean Boolean
byte Byte
char Character
double Double
float Float
int Integer
long Long
short Short

Il y a un () après l'essai, qu'est-ce que cela fait?

Question

Conversation d'un jour

Mr. A "Je pense qu'il y a une ** instruction try-catch **, mais quel est l'argument après cet essai?" I "Qu'est-ce que c'est ... Découvrons-le ..."

public void Sample {

  public void sample(Strin url) {
    try (BufferedReader br = new BufferedReader(new FileReader(url))) {
      String line = null;
      while ((line = br.readLine()) != null) {
        System.out.println(line);
      }

    } catch (FileNotFoundException e) {
      e.printStackTrace();

    } catch (IOException e) {
      e.printStackTrace();

    }
  }
}

répondre

Il s'agit d'une description appelée ** syntaxe try-with-resources ** qui peut être utilisée dans javaSE7 et versions ultérieures. Avant javaSE6, il était nécessaire de décrire la ressource comme étant close () chaque fois que l'on accédait à un fichier ou à une base de données. ** Try-with-resources fermera automatiquement les ressources close () en quittant la clause try **.

  • Ordre d'exécution (exécution de haut en bas)
  • partie try-with-resources (partie try ())
  • Dans la clause try
  • La méthode close () de try-with-resources
  • Dans la clause catch
  • Enfin dans la clause
  • Autres notes, etc.
  • Si une exception se produit dans la clause try et que `close () 'lève également une exception, ** l'exception qui s'est produite dans la clause try est levée **.
  • Si vous voulez utiliser l'exception levée par close (), vous pouvez obtenir le tableau Throwable avec ** ʻex.getSuppressed () `**.
  • L'ordre d'exécution de close () est l'ordre inverse dans lequel les ressources sont déclarées.
  • Si vous écrivez la clause finally, la clause finally sera exécutée. ** Cependant, les exceptions levées par try-with-resources ne peuvent pas être utilisées **.
  • Si vous souhaitez utiliser vos propres ressources, vous pouvez le faire en implémentant l'interface ʻAutoClosable`.

Pourquoi certaines exceptions nécessitent des lancers et d'autres non?

Question

Conversation d'un jour

Mr. A "Je voudrais poser une question sur cette source, qu'est-ce que ** jette ?" I " J'écris simplement explicitement les exceptions que la méthode pourrait lancer ** N'est-ce pas **? ** Il est possible de compiler sans cela ...? **" Mr. A "Je me fâche quand j'efface ** jette AAAException, non? ... Pourquoi?" Je "... pourquoi? ** Je n'ai pas besoin d'écrire une BBBException ** ..."

python


public class Sample {

  public Object sample(String url, Request request) throws AAAException {

    XXXClient client = new XXXClient();

    try {
      return client.request(url, reuqest);

    } catch (AAAException ex) {
      log.error("Une sorte de journal", ex);
      throw ex;

    } catch (BBBException ex) {
      log.error("Une sorte de journal", ex);
      throw ex;

    }
  }
}

répondre

Il existe deux types d'exceptions en Java appelés ** exceptions vérifiées (exceptions vérifiées) ** et ** exceptions non vérifiées (exceptions non vérifiées) **. (Strictement parlant, il y a une ** erreur **, mais elle est omise ici) ** Besoin de jeter les méthodes qui peuvent provoquer des exceptions vérifiées **. Dans cet exemple, ** AAAException était une exception vérifiée, donc des levées étaient requises, et BBBException était une exception non vérifiée, il n'était donc pas nécessaire d'ajouter des levées **.

  • Exception d'inspection

  • Exception qui est levée même si vous l'écrivez correctement et que vous vous comportez comme prévu (≒ rien ne peut être fait dans le programme d'implémentation)

  • Il s'agit d'une erreur prévisible, vous devez donc forcer l'appelant à la gérer (lancers requis)

  • Sous-classe de java.lang.Exception

  • IOException… Erreur d'E / S

  • FileNotFoundException… Fichier non trouvé

  • SQLException ... Erreur SQL ... etc.

  • Cela semble être un concept que seul java a </ font>

  • Exception non cochée

  • Exceptions lancées pour diverses causes (≒ peut être évitée par le programme de mise en œuvre)

  • Puisqu'il est difficile de prévoir tous les modèles qui peuvent se produire, l'appelant n'est pas obligé de gérer et l'exécution est arrêtée.

  • Sous-classe de java.lang.RuntimeException

  • NullPointerException… La valeur est NULL

  • NumberFormatException… La valeur ne peut pas être convertie en nombre

  • ArrayIndexOutOfRangeException… Il est hors de portée de la liste ou du tableau …… etc

  • Les autres langues n'ont essentiellement que des exceptions non cochées </ font>

  • Diagramme de classe simple 無題.png

finalement

Faire une sortie à quelqu'un est l'occasion de voir si vous vous comprenez vraiment. Quand j'ai cherché à nouveau, j'ai approfondi ma compréhension et j'ai beaucoup appris. Nous continuerons de le mettre à jour de temps en temps!

Jusqu'à la fin Merci d'avoir lu!

Recommended Posts