Retour sur les bases de Java

Préface

Je passais en revue Java, mais j'ai remarqué que la partie de base était subtile. Gardez une trace de votre compréhension

Passer par référence et passer par valeur

Passer par référence → Passer l'emplacement sur la mémoire Passer par valeur → Passer la valeur telle quelle

Et Java?

Passer uniquement par valeur en Java Type primitif → Passer par valeur telle quelle Type d'objet → Référence "valeur" passée

Que signifie passer par valeur de référence?

Passer un pointeur (informations sur l'emplacement de stockage des données en mémoire) Alors Vous pouvez manipuler la valeur d'origine en passant une valeur de référence à la méthode

public void sampleMethod(Object o){
	o = 1;
}

Cependant, si new est utilisé, la valeur de référence sera réécrite, donc même si des modifications sont apportées après cela, la valeur d'origine ne sera pas affectée. Si vous ne revenez pas avec, une valeur de référence qui ne sera pas utilisée sera née

public void sampleMethod(Object o){
	o =  new Object();
	o = 1;
}

À propos de String

Puisque String est un type d'objet, il est passé par valeur de référence Mais même si vous remplacez la valeur, la valeur d'origine ne change pas → Parce que c'est une classe qui ne peut pas être modifiée Chaque fois que vous apportez une modification à String, un nouvel objet est créé dans les coulisses (remplacé par un nouveau pointeur) Par conséquent, l'objet d'origine ne peut pas être modifié Par conséquent, il s'agit d'un mouvement différent du passage par valeur même si le résultat est le même.

Composition

Incorporer une autre classe dans une classe

Pourquoi es-tu

Il existe un héritage pour utiliser d'autres classes, mais l'utilisation de l'héritage peut provoquer un comportement inattendu
Héritage

public class InstrumentedHashSet<E> extends HashSet<E> {
private int addCount = 0;

public InstrumentedHashSet(){
}

@Override
public boolean add(E e){
 addCount++;
 return super.add(e);
}

@Override
//addAll boucle l'argument en interne et ajoute
//Par conséquent, dans cette classe, l'ajout remplacé est utilisé et le nombre avance du montant d'ajout et du montant d'addAll.
//En d'autres termes, lors de l'héritage et du remplacement d'une méthode, si la méthode cible utilise une autre méthode remplacée, elle sera affectée.
public boolean addAll(Collection<? extends E> c){
 addCount += c.size();
 return super.addAll(c);
}

public int getAddCount(){
 return addCount;
}
}


Composition

//Classe de transfert
//La composition elle-même peut être faite sans faire cela séparément.
public class ForwardingSet<E> implements Set<E>{
//Composition
private final Set<E> s;

//L'ensemble utilisé ici est juste celui passé en argument
public ForwardingSet(Set<E> s){
 this.s = s;
}

public void clear(){
 s.clear();
}

public boolean add(E e){
 return s.add(e);
}

public boolean addAll(Collection<? extends E> c){
 return s.addAll(c);
}

//Remplacer la méthode abstraite de Set(réduction)
}


//Classe de wrapper
public class RapperSet<E> extends ForwardingSet<E>{
private int addCount = 0;

//Passez l'ensemble sur lequel vous voulez baser la superclasse
public RapperSet(Set<E> e){
 super(e);
}

@Override
public boolean add(E e){
 addCount++;
 return super.add(e);
}

@Override
public boolean addAll(Collection<? extends E> c){
addCount += c.size();
//AddAll utilisé ici()Est utilisé dans la superclasse addAll()
//Autrement dit, addAll de la classe passée en argument().. rappeurSet ajouter()N'a pas d'importance
return super.addAll(c);
}

public int getAddCount(){
return addCount;
}
}

Recommended Posts

Retour sur les bases de Java
Retour sur JSON géré par Java
[jour: 5] J'ai résumé les bases de Java
Surveillance Docker-expliquant les bases des bases-
Principes de base de l'utilisation des caractères (Java)
Résumé des bases du langage Java
J'ai résumé les types et les bases des exceptions Java
J'ai essayé de résumer les bases de kotlin et java
20190803_Java & k8s sur Azure L'histoire d'aller au festival
À propos des bases du développement Android
[Édition Java] Histoire de la sérialisation
Progatez Ruby on Rails
Les bases de SpringBoot + MyBatis + MySQL
Remarque sur le chemin de request.getRequestDispatcher
L'origine des expressions Java lambda
Les bases de Java
Les bases de Java
Les bases de Java
Le comportement de JS fonctionnant sur `Java SE 8 Nashorn` a soudainement changé
Mes réflexions sur la méthode d'égalité (Java)
Afficher le texte en haut de l'image
Obtenez le résultat de POST en Java
[Challenge CircleCI from 0] Apprenez les bases de CircleCI
Mémorandum du nouveau diplômé SES [Java basics]
[Java] Obtenez le jour d'un jour spécifique
Mémo: [Java] Vérifiez le contenu du répertoire
Kick ShellScript sur le serveur depuis Java
Samshin sur la valeur du champ caché
Installez OpenJDK (Java) sur le dernier Ubuntu
Maintenant, j'ai résumé les bases de RecyclerView
[# 1 Java] Principes de base de Java-Major avant d'étudier-
Mesurez facilement la taille des objets Java
Sortie du livre "Introduction à Java"
Mesure de la mémoire des applications Java sous Windows
Exécutez le code Java stocké dans le presse-papiers.
L'histoire de l'écriture de Java dans Emacs
[Java] Vérifiez le nombre d'occurrences de caractères
[Java] [Spring] Tester le comportement de l'enregistreur
Qu'est-ce qui n'était pas une utilisation équitable du détournement d'API Java sur Android?
Qu'est-ce que JSP? ~ Connaissons les bases de JSP !! ~
[Ruby] Résumé des définitions de classe. Maîtrisez les bases.
Retour sur les paroles de First Gundam Fat Can, Docker et moi
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
JAVA: jar, aar, affichez le contenu du fichier
Calcul à rebours de la transition de la graine interne de Random
L'histoire de la fabrication d'un Othello ordinaire à Java
[Android] [Java] Gérer l'état de CheckBox de ListView
A propos de l'ordre de description des propriétés système Java
[Ruby on Rails] Jusqu'à l'introduction de RSpec
À propos de l'idée des classes anonymes en Java
L'ordre des modificateurs de méthode Java est fixe
[Java] Accéder à l'URL signée de s3 (version signée 2)
L'histoire de l'apprentissage de Java dans la première programmation
bases de la programmation Java
Mesurer la taille d'un dossier avec Java