[JAVA] Concept d'instance ・ Variable de type de classe ・ Constructeur ・ Membre statique

Qu'est-ce qu'une variable de type de classe?

Détails au moment de l'instanciation

(code)

//Générer une douzaine de vaders d'instance
StChara dath = new StChara();//① ・ ②

//Valeur de champ de substitution
dath.name = "Dark Vador";//③
dath.focelevel = 100;//③
dath.status = "Monsieur Dark";//③

** (En pensant) ** スクリーンショット 2018-02-25 10.35.26.png

① Sécurisez la zone mémoire de l'instance et créez des champs. ② Créez un lien vers la zone mémoire créée dans ①. Vous pouvez maintenant accéder à la zone de mémoire créée en (1). ③ Remplacez la valeur du champ.

Les variables de classe sont des types de référence

(code)

//Créer une variable de classe dath2
StChara dath = new StChara();
dath.name = "Dark Vador";
dath.focelevel = 100;
dath.status = "Monsieur Dark";
Stchara dath2;//(1) Définissez la variable de classe dath2.
dath2 = dath;//(2) Remplacez la destination de lien de dath par dath2. (Parce que la nouvelle instance n'est pas créée avec new)

** (En pensant) ** スクリーンショット 2018-02-25 13.39.22.png

Puisque la variable de classe est une variable de type référence, la destination du lien est affectée.

Utiliser des variables de type de classe pour les champs

//Classe de héros
public class Hero {
	String name;
	int hp;
	Sword heroSword;//(1) Créez un champ heroSword de type épée.
	void attack(){
		System.out.println(this.name +"Est"+this.heroSword.name+"Attaqué avec!");//③
		System.out.println("À l'ennemi"+this.heroSword.damage+"Points endommagés! !!");//③
	}
}
//classe d'épée
public class Sword{
	String name;
	int damage;
}
//classe principale
public class Main {
	public static void main(String[] args) {
		Sword sword = new Sword();
		sword.name = "Épée de feu";
		sword.damage = 10;

		Hero hero = new Hero();
		hero.name = "Minato";
		hero.hp = 100;
		hero.heroSword = sword;//(2) Attribuez l'instance d'épée à l'attribut heroSord de l'instance de héros.
		hero.attack();
	}
}

** (Résultat de sortie) **

Minato a attaqué avec une épée de feu!
Infligé 10 points de dégâts à l'ennemi! !!

** (En pensant) ** (1) Déclarez la variable de classe de type Sword "heroSword" dans l'instance Hero. (2) Remplacez l'instance d'épée par heroSword. (3) Puisque l'instance d'épée est assignée à la variable de classe heroSword, "this.herosword.name" a la même signification que "sword.name", et le "nom" et les "dommages" de l'instance d'épée peuvent être référencés.

** (Supplément) ** "Relation dans laquelle une classe utilise un autre champ" = "a-une relation". Dans le code ci-dessus, ce serait "hero has-sword".

Utiliser des variables de type de classe dans les arguments de méthode et les valeurs de retour

//Créer une instance de héros
Hero hero1 = new Hero();
hero1.name = "Minato";
hero1.hp = 100;
//Créer une instance de héros
Hero hero2 = new Hero();
hero2.name = "Asaka";
hero2.hp = 100;
//Créer une instance de l'assistant
Wizard wizard = new Wizard();
wizard.name = "Sugawara";
wizard.hp = 50;
wizard.heal(hero1);
wizard.heal(hero2);
public class Wizard {
	String name;
	int hp;
	void heal(Hero heroX) {;//En utilisant une variable de classe comme argument, vous pouvez affecter une instance. En attribuant une instance, vous pouvez faire référence à la valeur de champ de l'instance.
		heroX.hp+=10;
		this.hp+=10;
		System.out.println(heroX.name+"Récupéré 10 HP!");
		System.out.println(heroX.name+"HP est"+heroX.hp);
		System.out.println(this.name+"HP est"+this.hp);//Guérit le héros et le sorcier lui-même.
	}

}

** (Résultat de sortie) **

Récupération de 10 HP de Minato!
Les PV de Minato sont de 110
Les PV de Sugawara sont de 60
Récupération de 10 HP d'Asaka!
Les PV d'Asaka sont de 110
Les PV de Sugawara sont de 70

Qu'est-ce qu'un constructeur

Concept de constructeur

** (En pensant) ** Le traitement initial (affectation de valeur, méthode) à exécuter lors de la création d'une instance est appelé un constructeur.

** (Méthode de déclaration) **

nom de la classe(Variables qui reçoivent des arguments){  
  this.Variable qui reçoit l'argument = valeur;
}

Peut être déclaré avec. À ce stade, la spécification de la valeur de retour comprenant «void» est NG.

(code)

public class Hero {
	String name;
	int hp;

	Hero(String name) {//constructeur
		this.hp = 100;
		this.name = name;
	}

Surcharge du constructeur

** (En pensant) ** Plusieurs constructeurs portant le même nom peuvent être utilisés en modifiant le type d'argument et le nombre d'arguments. En outre, lors d'une surcharge, d'autres constructeurs peuvent être appelés et utilisés.

this(Nom de l'argument);

(code)


public class main {
	public static void main(String[] args){
	  Cleric a = new Cleric("pasteur",10,10);
	  Cleric b = new Cleric("pasteur",10);
	  Cleric c = new Cleric("pasteur");
	}
}

public class Cleric {
	String name;
	int hp = 50;
	final static int HPMAX = 50;
	int mp;
	final static int MPMAX = 10;


	public void selfAid() {
		System.out.println(this.name + "Chanté d'auto-assistance!");
		this.hp = HPMAX;
		this.mp -= 5;
		System.out.println("HP a récupéré au maximum.");
	}
//constructeur
	Cleric(String newName,int newHp,int newMp){
	  this.name = newName;
	  this.hp = newHp;
	  this.mp = newMp;
	}

	Cleric(String name,int hp){
		this(name, hp, Cleric.HPMAX);//Puisque le champ constant est un membre statique qui appelle un autre traitement avec ceci ici, il peut être appelé avant même que l'instance soit créée.
	}

	Cleric(String name){
		this(name,Cleric.HPMAX);
	}
}

** (Résultat de sortie) **

Prêtre Une auto-assistance chantée!
HP a récupéré au maximum.
Le prêtre B a chanté l'auto-assistance!
HP a récupéré au maximum.
Le prêtre C a chanté l'auto-assistance!
HP a récupéré au maximum.

Membre statique

L'idée des membres statiques

** (En pensant) ** Même si plusieurs instances sont créées à partir de la même classe, il est nécessaire de définir des valeurs et des méthodes communes (valeurs initiales, etc.) en tant que membres statiques.

** (Référence) Dans le diagramme précédent de Dark Vador ... ** スクリーンショット 2018-02-25 12.01.51.png

Champ statique

** (Méthode de définition) ** Dans la classe de l'instance nom de variable de type de données statique // créer un champ statique

//Classe Stchara
static int firstLevel;

Dans la classe principale nom de classe de l'instance.nom de variable = valeur // attribuer une valeur au champ statique

//Classe Stchara
Stchara.firstLevel = 1;

** (Effet obtenu en définissant) ** -En créant un champ statique, la valeur du champ peut être appelée avec nom de classe.nom de variable. (La valeur du champ est détenue par la classe elle-même) -Les variables de classe sont disponibles avant la création de l'instance.

Méthode statique

** (Méthode de définition) **

nom de méthode de valeur de retour statique{
Traitement du contenu
 }

** (Effet obtenu en définissant) ** -En créant une méthode statique, vous pouvez appeler la méthode avec nom de classe.nom de méthode. (La méthode est détenue par la classe elle-même) -La méthode devient disponible avant même la création de l'instance.

** (Notes sur les méthodes statiques) ** -Assurez-vous d'utiliser des champs statiques comme champs à utiliser.

Recommended Posts

Concept d'instance ・ Variable de type de classe ・ Constructeur ・ Membre statique
[Java] Classes, constructeurs, membres statiques
Type de classe interne: avec ou sans statique
[Java] Différences entre les variables d'instance et les variables de classe
Programmation Java (clause statique et "variables de classe")
[Ruby] Connaissance de base des variables d'instance de classe, etc.
[Introduction à Java] Portée de la variable (portée, variable locale, variable d'instance, variable statique)
[Java Silver] Que sont les variables de classe, les variables d'instance et les variables locales?