Une explication rapide des cinq types de statique Java

Aperçu

Il existe cinq types de Java "statique". Cependant, chacun est similaire et différent. Dans cet article, je vais vous expliquer les points pour éviter de rester coincé dans les pièges de chaque statique. Si vous souhaitez en savoir plus, veuillez vous référer aux documents de référence à la fin de l'article.

1. méthode statique

Si une méthode a un modificateur statique, elle devient une méthode statique.

public static boolean equals(Object a, Object b) {
    return (a == b) || (a != null && a.equals(b));
}

La méthode statique semble pratique à première vue (elle semble facile à utiliser) car elle peut être appelée sans nouvelle instance. Cependant, [pour faciliter l'écriture des tests unitaires, il ne doit être utilisé que pour le "traitement de routine"](https://qiita.com/flyaway/items/34069ca6ad9ada4c0fef#%E5%95%8F%E9%A1% 8C% E3% 82% 92% E8% A7% A3% E6% B1% BA% E3% 81% 99% E3% 82% 8B% E3% 81% 9F% E3% 82% 81% E3% 81% AE% E5% 8E% 9F% E5% 89% 87% E3% 83% AB% E3% 83% BC% E3% 83% AB).

2. champ statique

Si un champ a un modificateur statique, il devient un champ statique.

public static final double PI = 3.14159265358979323846;

Comme mentionné ci-dessus, il peut être utilisé comme constante en ** l'utilisant avec le modificateur final. En l'utilisant avec le modificateur final, il est possible d'éviter des bogues tels que la réécriture de la valeur quelque part dans le programme et la sortie d'un résultat de calcul incorrect.

Selon la conception du système, il peut également être utilisé pour contenir un cache.

3. [Pour les utilisateurs intermédiaires] import statique

Il sera possible d'appeler des champs statiques et des méthodes statiques de classes externes sans spécifier de nom de classe.

import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertThat;

public class SampleTest {
    @Test
    public void Test() {
        assertThat("foo", is("foo"));
    }
}

Dans l'exemple ci-dessus, ʻAssert.assertThat et Matchers.is` peuvent être décrits en omettant le nom de la classe.

4. [Pour les utilisateurs intermédiaires] Classe interne statique

Si le modificateur statique est ajouté à la classe interne, il devient une classe interne statique.

public class Outer {
  public static class Inner {
    //classe interne statique
  }
}

Les classes internes non statiques peuvent également accéder aux champs et aux méthodes d'instance de la classe parent. Par conséquent, il contient une référence à la classe parente.

Cependant, des références inutiles à la classe parente peuvent avoir un effet indésirable sur la mémoire et GC [^ 1]. ** Si la classe interne peut être rendue statique, elle doit être rendue statique ** [^ 2].

5. [Pour les utilisateurs intermédiaires] initialiseur statique

Le processus décrit dans le bloc ci-dessous est appelé lorsque la classe est accédée pour la première fois.

static {
  //En traitement
}

Plus précisément, il est utilisé pour initialiser une collection de champs statiques [^ 3].

public static final List<String> LIST;
static {
    List<String> tmp = new ArrayList<>();
    tmp.add("foo");
    tmp.add("bar");
    LIST = Collections.unmodifiableList(tmp);
}

Matériel de référence

Recommended Posts

Une explication rapide des cinq types de statique Java
Mesurer la taille d'un dossier avec Java
Un examen rapide de Java appris en classe
Un examen rapide de Java appris en classe part4
Un examen rapide de Java appris en classe part3
Un examen rapide de Java appris en classe part2
Liste des types ajoutés dans Java 9
Obtenez l'URL publique du fichier privé de Flickr en Java
Créons une application TODO avec Java 1 Brève explication de MVC
Créons une application TODO en Java 5 Changer l'affichage de TODO
Retour rapide sur Java au cours des cinq dernières années
Obtenez le résultat de POST en Java
L'histoire de l'écriture de Java dans Emacs
Augmenter dynamiquement le nombre d'éléments dans un tableau bidimensionnel Java (tableau multidimensionnel)
L'histoire de l'oubli de fermer un fichier en Java et de l'échec
Exemple de programme qui renvoie la valeur de hachage d'un fichier en Java
Comment obtenir le chemin absolu d'un répertoire s'exécutant en Java
Trouvez le maximum et le minimum des cinq nombres saisis en Java
L'histoire de la comparaison de chaînes de bas niveau en Java
[Java] Gestion des Java Beans dans la chaîne de méthodes
L'histoire de la fabrication d'un Othello ordinaire à Java
À propos de l'idée des classes anonymes en Java
Une histoire sur le JDK à l'ère de Java 11
L'histoire de l'apprentissage de Java dans la première programmation
Ressentez le passage du temps même à Java
Importer des fichiers de la même hiérarchie en Java
Valider le jeton d'ID d'un utilisateur authentifié par AWS Cognito en Java
Exemple de code pour obtenir les valeurs de type SQL clés dans Java + MySQL 8.0
Obtenez l'URL de la destination de la redirection HTTP en Java
Spécifiez le codage des ressources statiques dans Spring Boot
Remarque sur l'initialisation des champs dans le didacticiel Java
[Java] Récupère le fichier dans le fichier jar quel que soit l'environnement
[Java] Lors de l'écriture du source ... Mémorandum ①
J'ai résumé les types et les bases des exceptions Java
Modifier la qualité de stockage des images JPEG en Java
Une vue d'ensemble du framework Java natif de Kubernetes Quarkus
Récapitulez les éléments supplémentaires de la classe Optional dans Java 9
[Java] Informations entières des caractères du fichier texte acquises par la méthode read ()
Comprenez en 3 minutes! Une explication très approximative de la différence entre session et cookie
A été effectué dans l'année de base de la semaine calendaire Java
Une brève explication d'un jeu de labyrinthe fait à Java pour les cousins du primaire
Faisons une application de calcul avec Java ~ Afficher la fenêtre de l'application
Vérifiez la dépendance d'un artefact maven spécifique dans Coursier
Un programme (Java) qui génère la somme des nombres pairs et impairs dans un tableau
Considérer l'adoption du langage Java à l'ère Reiwa ~ Comment choisir un SDK sûr
Activez la cellule A1 de chaque feuille de fichier Excel avec Java
Exemple de code pour obtenir les valeurs des principaux types SQL dans Java + Oracle Database 12c
Rechercher un sous-ensemble en Java
Créer une méthode pour renvoyer le taux de taxe en Java
Comptez le nombre de chiffres après la virgule décimale en Java
Un programme qui compte le nombre de mots dans une liste
Comment dériver le dernier jour du mois en Java
J'ai créé un client RESAS-API en Java
Avantages de la méthode statique Java
Implémentation Java de tri-tree