java quoi que ce soit mémo

Secrètement, étudiant Oubliez et google pour vous-même

constant

nom de la constante du type de données final=valeur

null Il n'y a pas de destination de référence Une chaîne vide ("") n'est pas nulle car il existe une chaîne vide à la destination de référence. → Les types primitifs n'ont pas d'état nul

Je veux comparer

Avec null, l'utilisation de la méthode equals déclenche une exception. (NullPointerException) Utilisez l'opérateur "==".

Caractères vides

Utilisez la méthode "isEmpty"

Héritage

Peut être créé en étendant une classe existante Les sous-classes héritent des champs et des méthodes des superclasses. Utilisez le mot-clé super pour accéder aux méthodes de superclasse Utilisez le mot clé this pour accéder aux méthodes de sous-classe. Il existe une superclasse et plusieurs sous-classes.

super.hoge();

passer outre

Implémenter le nom de la méthode parent, la valeur de retour et les arguments correspondants dans la classe enfant Il semble bon d'ajouter explicitement "@Override".

//Classe enfant
@Override
void hoge(){
}

La méthode remplacée est prioritaire sur la sous-classe.

Classe abstraite

Classes qui ne peuvent pas créer d'instances

abstract class TestClass {
    void test() {
        System.out.println("TEST");
    }
}
public class SampleProgram {
    public static void main(String[] args) {
        //Erreur de compilation: impossible de créer une instance de type TestClass
        TestClass tc = new TestClass();
    }
}

Méthode abstraite

--Une méthode qui ne contient pas d'instruction dans la méthode

abstract class TestClass {
    //Méthode ordinaire
    void test() {
        System.out.println("TEST");
    }
    //Méthode abstraite
    abstract void test2();
}

abstract class TestClass {
    //Erreur de compilation: la méthode abstraite ne spécifie pas le corps
    abstract void test() {
        System.out.println("TEST");
    }
}

Même si vous héritez d'une classe abstraite, si vous définissez une sous-classe comme classe abstraite, vous n'avez pas besoin de la remplacer. ..

abstract class TestClass {
    //Méthode ordinaire
    void test() {
        System.out.println("TEST");
    }
    //Méthode abstraite
    abstract void test2();
}

//Aucune erreur de compilation
abstract class subClass extends TestClass {
}

//Erreur de compilation: le type subClass est une méthode abstraite héritée TestClass.test2()Doit être implémenté
class subClass extends TestClass {
}

interface

--Définir les méthodes qu'une classe devrait avoir

interface testIf{
    int test();
    void test2(String msg);
}
interface testIf{
    void test2(String msg);
}
//Erreur de compilation: le test de type est une méthode abstraite héritée testIf.test2(String)Doit être implémenté
class test implements testIf{

}

//Erreur de compilation: impossible de réduire la visibilité des méthodes héritées de testIf
class test implements testIf{
    void test2(String msg) {
        System.out.println(msg);
    }
}

//Aucune erreur de compilation
class test implements testIf{
    public void test2(String msg) {
        System.out.println(msg);
    }
}

Hériter de plusieurs interfaces

interface testIf1{
    void test1(String msg);
}

interface testIf2{
    int test2();
}

class test implements testIf1, testIf2{
    public void test1(String msg) {
        System.out.println(msg);
    }

    public int test2() {
        return 1;
    }
}

Définition constante dans l'interface

interface testIf1{
    int HOGE = 1;
    public static final String HOGE2 = "constant";
}

class test implements testIf1{
    int i = testIf1.HOGE;
    //Erreur de compilation: test de champ finalIf1.Ne peut pas être affecté à HOGE
    //testIf1.HOGE = 1;
    void testPrint() {
        System.out.println(testIf1.HOGE2);
    }
}

public class SampleProgram {
    public static void main(String[] args) {
        test t = new test();
        t.testPrint();
    }
}

Héritage d'interface

interface testIf1{
    int HOGE = 1;
    public static final String HOGE2 = "constant";
    void test();
    void test2();
}
//Héritage d'interface
interface testIf2 extends testIf1{
    void test();
}

//Erreur de compilation: le test de type est une méthode abstraite héritée testIf1.test2()Doit être implémenté
class test implements testIf2{

    @Override
    public void test() {
        //TODO talon de méthode généré automatiquement
    }
}

//Aucune erreur de compilation
class test implements testIf2{

    @Override
    public void test() {
        //TODO talon de méthode généré automatiquement
    }

    @Override
    public void test2() {
        //TODO talon de méthode généré automatiquement
    }
}

Même si l'interface parent et l'interface enfant ont la même définition de méthode, cela ne sera pas traité comme une erreur. .. Cela va être une source de confusion.

Polymorphisme

En japonais, cela signifie polymorphisme (effectue divers mouvements).

import java.util.ArrayList;
import java.util.List;

interface TestIf{
    public abstract void run();
}

class TestAAA implements TestIf{

    String myClassName = "TestAAA";
    @Override
    public void run() {
        //TODO talon de méthode généré automatiquement
        System.out.println(myClassName);
    }
}


class TestBBB implements TestIf{

    String myClassName = "TestBBB";
    @Override
    public void run() {
        //TODO talon de méthode généré automatiquement
        System.out.println(myClassName);
    }
}


public class SampleProgram {
    public static void main(String[] args) {

        //Des collections et des tableaux de types d'interface sont disponibles
        List<TestIf> list = new ArrayList<TestIf>();
        TestIf[] array = new TestIf[2];

        //Définir chaque instance de la collection
        list.add(new TestAAA());
        list.add(new TestBBB());

        //Définir chaque instance du tableau
        array[0] = new TestAAA();
        array[1] = new TestBBB();

        System.out.println("collection");
        for(TestIf ti: list) {
            ti.run();
        }
        System.out.println("Tableau");
        for(int i = 0; i < array.length; i++) {
            array[i].run();
        }

    }
}

copie

Copie du tableau

array2 devient une référence à array1. La réécriture des éléments de array2 affecte également array1. L'inverse est également vrai.

int[] array1 = {1,2,3};
int[] array2 = array1;

Vous pouvez copier la valeur à l'aide de la méthode de clonage. La même chose s'applique à la collection.

int[] array2 = array1.clone();

Copie superficielle, copie profonde

Parfois, la méthode de clonage ne suffit pas. Si l'élément est un type d'objet au lieu d'un type primitif Comme le type d'objet n'est pas une valeur mais une destination de référence en tant qu'élément, la valeur à la destination de référence n'est pas copiée. C'est ce qu'on appelle une copie superficielle. Cela signifie que plusieurs objets partageront la même valeur. Copie profonde pour copier jusqu'à la valeur référencée. La quantité à copier dépend du programme.

semble difficile. ..

Génériques

Spécifiez pour forcer le type en insérant le type entre "<" et ">" et en le notant.

Modèle utilisant des génériques

Seul le type String peut être saisi.


List<String> list = new ArrayList<String>();

Modèles qui n'utilisent pas de génériques

Un message d'avertissement apparaît sur Eclipse, mais il peut être utilisé. Étant donné que le type de données n'est pas spécifié, tout autre élément que le type primitif peut être entré.


List list = new ArrayList();

Avantages des génériques

List list = new ArrayList();
List<String> list2 = new ArrayList<String>();

//Le casting est compliqué
System.out.println(((String) list.get(0)).length());
//Peut être utilisé comme un type de chaîne normal
System.out.println(list2.get(0).length());

Certes, il peut être plus facile d'utiliser les génériques. Eclipse est excellent cependant.

Tableau

Nombre d'éléments dans le tableau

Nom de la séquence.length

À plusieurs reprises divers

De base

public class SampleProgram {

    public static void main(String[] args) {
        int[] box = {0,1,2,3,4,5,6,7,8,9};

        for(int i = 0; i < 10; i++) {
            if(i == 5) {
                System.out.println(i+1+":"+box[i]+"_continue");
                continue;
            }else if(i == 7) {
                System.out.println(i+1+":"+box[i]+"_break");
                break;
            }
            System.out.println(i+1+":"+box[i]);
        }
    }
}

//résultat
1:0
2:1
3:2
4:3
5:4
6:5_continue
7:6
8:7_break
public class SampleProgram {

    public static void main(String[] args) {
        int[] box = {0,1,2,3,4,5,6,7,8,9};
        int i = 0;
        while(i < 10) {
            System.out.println(i+1+":"+box[i]);
            i++;
        }
    }
}

public class SampleProgram {

    public static void main(String[] args) {
        int[] box = {0,1,2,3,4,5,6,7,8,9};
        int i = 0;
        do {
            System.out.println(i+1+":"+box[i]);
            i++;
        }while(i < 10);
    }
}

Je n'ai pas vu faire ~ depuis longtemps ... À mesure que le nombre d'indices augmente, le stock de noms s'épuise. ..

Déclaration Extended For

import java.util.HashSet;
import java.util.Set;

public class SampleProgram {

    public static void main(String[] args) {
        //Ne pas autoriser les valeurs en double
        //Il n'y a aucune garantie de commande
        Set<String> hs = new HashSet<String>();
        hs.add("blanc");
        hs.add("rouge");
        hs.add("blanc");
        hs.add("vert");

        int[] array = {1,2,3,1};

        //HashSet n'a pas de méthode get
//        for(int i = 0; i < hs.size(); i++) {
//            System.out.println(hs.(i));
//        }

        //Extension de la déclaration
        for(String item : hs) {
            System.out.println(item);
        }

        for(int i : array) {
            System.out.println(i);
        }
    }
}

//résultat
vert
rouge
blanc
1
2
3
1

Style Lambda

Difficile ...

divers


public class TestMain {
    public static void main(String[] args) {
        List<String> cities = new ArrayList<String>();
        cities.add("Kyoto");
        cities.add("Osaka");
        cities.add("Aichi");

        System.out.println("Boucle 1");
        for(int i = 0; i < cities.size(); i++) {
            System.out.println(cities.get(i));
        }
        System.out.println("Boucle 2");
        for(Iterator<String> ite = cities.iterator(); ite.hasNext();) {
            System.out.println(ite.next());
        }
        System.out.println("Boucle 3: Extension pour boucle");
        for(String city : cities) {
            System.out.println(city);
        }

        System.out.println("Boucle 4:");
        cities.forEach(new Consumer<String>() {
            public void accept(final String citiy) {
                System.out.println(citiy);
            }
        });

        System.out.println("Boucle 5: type Lambda");
        cities.forEach((final String city) -> System.out.println(city));

        System.out.println("Boucle 6: type Lambda");
        cities.forEach(System.out::println);
    }

}

map

Répéter la liste des clés et des valeurs

import java.util.HashMap;
import java.util.Map;
public class SampleProgram {

    public static void main(String[] args) {

        Map<String, String> map = new HashMap<String, String>(){
            {
                put("001","rouge");
                put("002","Bleu");
                put("003","vert");
            }
        };

        //valeur
        for(String item : map.values()) {
            System.out.println(item);
        }

        //Clé
        for(String item : map.keySet()) {
            System.out.println(item);
        }
    }
}

Codage par défaut

Lors de la compilation avec javac

Écrivez le code source avec désinvolture avec Sakura Editor ou Notepad

javac hoge.java

Et compilez avec désinvolture Je n'avais pas réalisé que j'étais en train d'appuyer sur un bouton sur Eclipse. Après avoir compilé manuellement le code source créé sur Eclipse sous DOS


//Code source
public class SampleProgram {
    public static void main(String[] args) {
    	System.out.println("Hoge");
    }
}

//résultat
C:\MyWork\>javac SampleProgram.java
SampleProgram.java:6:Erreur:Ce caractère ne peut pas être mappé au codage MS932
        System.out.println("縺 縺?");
                               ^
1 erreur

C:\MyWork\>

Cela se produit car le fichier source est "UTF-8" et le codage par défaut de Windows est "MS932". Si vous ne spécifiez pas le codage lors de la compilation avec javac, il sera compilé avec le codage par défaut de JVM (?). Si l'environnement est Windows et que le codage du fichier est "UTF-8"

javac -encoding utf8 SampleProgram.java

Ensuite, vous pouvez le compiler en toute sécurité.

Comment vérifier l'encodage par défaut

import java.util.Properties;
import java.util.Enumeration;

class sampleEncoding{
  public static void main(String args[]){
    System.out.println(System.getProperty("file.encoding"));
  }
}

Changer le codage par défaut

L'encodage par défaut est un programme Java et semble avoir un effet sur l'entrée et la sortie. Si vous ne spécifiez pas l'encodage du fichier lors de la lecture du fichier Il semble que l'encodage par défaut soit utilisé Dans un environnement où le codage par défaut est "utf8" Si le fichier à lire est "euc", vous devez spécifier le codage Provoque des caractères déformés.

Si vous modifiez le codage par défaut à l'avance, vous pouvez modifier le code source et le fichier d'entrée. Même si vous ne le faites pas, les caractères ne seront pas déformés et vous pourrez compiler.

Pour les fenêtres REM
set JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF8


C:\MyWork>javac SampleProgram.java
SampleProgram.java:6:Erreur:Ce caractère ne peut pas être mappé au codage MS932
        System.out.println("縺 縺?");
                               ^
1 erreur

C:\MyWork>set JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF8

C:\MyWork>javac SampleProgram.java
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF8

C:\MyWork>

N'utilisez pas de flotteurs ou de doubles lors du calcul de l'argent

Il semble y avoir une erreur lorsqu'il est converti en interne en binaire et calculé

Il semble utiliser la classe BigDecimal. Il semble calculer sans convertir en binaire.

import java.math.BigDecimal;

public class SampleProgram {

    public static void main(String[] args) {
        double xx = 1.0;
        double yy = 0.9;
        System.out.println(xx - yy);
        System.out.println(xx / yy);

        BigDecimal x = new BigDecimal("1.0");
        BigDecimal y = new BigDecimal("0.9");

        System.out.println(x.subtract(y));
        System.out.println(x.divide(y, 2, BigDecimal.ROUND_UP));
        System.out.println(x.divide(y, 2, BigDecimal.ROUND_DOWN));
        System.out.println(x.divide(y, 2, BigDecimal.ROUND_HALF_UP));
        System.out.println(x.divide(y, 3, BigDecimal.ROUND_HALF_DOWN));
        System.out.println(x.divide(y, 2, BigDecimal.ROUND_HALF_UP));
        System.out.println(x.divide(y, 3, BigDecimal.ROUND_HALF_DOWN));
    }

}


//résultat
0.09999999999999998
1.1111111111111112
0.1
1.12
1.11
1.11
1.111
1.11
1.111

Quelle est la différence entre BigDecimal.ROUND_HALF_UP et BigDecimal.ROUND_HALF_DOWN? À la suite de la réception des commentaires et du réexamen BigDecimal.ROUND_HALF_UP est arrondi BigDecimal.ROUND_HALF_DOWN est arrondi était. C'est complètement différent. .. ..

import java.math.BigDecimal;
import java.text.DecimalFormat;

public class SampleProgram {

    public static void main(String[] args) {

        DecimalFormat format = new DecimalFormat("#.#");
        BigDecimal x = new BigDecimal("10.55");



        BigDecimal xx = x.setScale(1, BigDecimal.ROUND_HALF_UP);
        System.out.println("Arrondi à la deuxième fraction: " + format.format(xx));

        BigDecimal xxx = x.setScale(1, BigDecimal.ROUND_HALF_DOWN);
        System.out.println("Arrondi à la deuxième décimale: " + format.format(xxx));

    }

}

//résultat
Arrondi à la deuxième fraction: 10.6
Arrondi à la deuxième décimale: 10.5

À propos, si vous spécifiez uniquement le nombre à diviser par division, les exceptions suivantes se produiront ... Il semble que la cause en soit que le résultat du calcul soit une fraction circulaire

System.out.println(x.divide(y));

//exception
Exception in thread "main" java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.
	at java.math.BigDecimal.divide(BigDecimal.java:1690)
	at SampleProgram.main(SampleProgram.java:15)

Regarde la source des nombres

Il peut être séparé par "_". Le résultat d'affichage n'affecte pas le calcul. Hmm. .. .. Est-il pratique de définir des constantes?

int x = 1_000;

Je souhaite attribuer un type différent

Seuls les lancers réciproques peuvent être utilisés

int x = 12;
int y = 5;
double ans = (double)x / (double)y;

Qu'est-ce qui est lié

--Types primitifs --Même source d'héritage de classe

Mais je veux convertir un nombre en chaîne

Utilisez la méthode String.valueOf Comment utiliser Nom de la classe. Nom de la méthode

int x = 1234;
String ss = String.valueOf(x);

Maintenant qu'il s'agit d'un type chaîne, vous pouvez utiliser la méthode length.

public class SampleProgram {

    public static void main(String[] args) {
        int x;
        x = 123 * 234;
        System.out.println(String.valueOf(x).length());
    }

}

La méthode à appeler pour la classe

Au contraire, la méthode qui appelle l'objet (pour la variable) Cela s'appelle la méthode d'instance.

Y a-t-il du «statique» à distinguer?

Je veux faire d'une chaîne de caractères un nombre

Convertissez un type primitif en objet à l'aide d'une classe wrapper.

Type primitif Classe de wrapper
boolean Boolean
char Character
byte Byte
short Short
int Integer
long Long
float Float
double Double
import java.io.IOException;

public class SampleProgram {

    public static void main(String[] args) throws IOException {
       String x = "123";
       String xx = "12.45";
       int y;
       double yy;

       //Le type primitif ne peut pas être affecté au type chaîne
       //y = x;

       y = Integer.valueOf(x);
       System.out.println(y);
       yy = Double.valueOf(xx);
       System.out.println(yy);
    }
}
//résultat
123
12.45

Résumé

Comment rédiger des conditions

Instruction IF

Quand je commence à travailler dans différentes langues, je ne sais pas comment écrire "else if". ..

Forme basique

if(Condition 1) {
    
}else if(Condition 2) {
    
}else {
    
}

Opérateur de comparaison

opérateur sens
== égal
!= différent
> -
>= -
< -
<= -

Opérateur logique

"==" Et "égal"

"==" Juge si les objets sont identiques, Utilisez «égal» pour voir si les valeurs sont identiques. "Equals" est fourni pour les types autres que les types primitifs.

(Différence entre le type de référence et le type de base. Le type de base stocke la valeur, mais le type de référence stocke l'adresse de l'objet ... ??)

Expressions régulières

difficile. ..

public class SampleProgram {

    public static void main(String[] args)  {

        String[] tell = {"090-1234-1234","1234-1234-1234","090-O123-1234"};
        /*
         *Numéro à 3 chiffres-Numéro à 4 chiffres-Numéro à 4 chiffres
         */
        for(int i = 0; i < tell.length; i++) {
            System.out.println(tell[i]);
            if(tell[i].matches("\\d{3}-\\d{4}-\\d{4}")) {
                System.out.println("Bonne réponse");
            }else {
                System.out.println("Réponse incorrecte");
            }
        }

    }

}

//résultat
090-1234-1234
Bonne réponse
1234-1234-1234
Réponse incorrecte
090-O123-1234
Réponse incorrecte

exception

Forme basique

Je me demande si finalement n'est pas beaucoup utilisé. ..

try{

}catch(Classe d'exception Nom de variable){

}finally{

}

Jeter de la méthode

Si une exception se produit à l'intérieur d'une méthode, elle peut être levée hors de la méthode sans l'attraper dans la méthode. Vous devez attraper l'exception à l'extérieur.

Valeur de retour Nom de la méthode(argument)jette un type d'exception{

}

Existe-t-il une syntaxe try-with-resources? .. .. Cela semble être une fonction de Java 7. ~~ Laissons cela pour le moment. .. ~~ On m'a appris à l'utiliser dans les commentaires! Cela peut être pratique.

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;

public class SampleProgram {
    public static void main(String[] args) {
        String fileName1 =  "C:\\test3.txt";
        String fileName2 = "C:\\test4.txt";

        //String fileName1 = null;

        try (
                FileReader fr = new FileReader(new File(fileName1));
                BufferedReader bfr = new BufferedReader(fr);
                FileReader fr2 = new FileReader(new File(fileName2));
                BufferedReader bfr2 = new BufferedReader(fr2);

             )
        {
            String ss = null;

            while((ss = bfr.readLine()) != null) {
                System.out.println(ss + "Chargé");
                //throw new IOException();
            }
        }catch(IOException e) {
            e.printStackTrace();
        }
    }
}

//Forme basique
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;

public class SampleProgram {

    public static void main(String[] args)  {

        try {
            File file = new File("C:\\test3.txt");
            FileReader fr = new FileReader(file);
            BufferedReader bfr = new BufferedReader(fr);
            String ss = null;

            while((ss = bfr.readLine()) != null) {
                System.out.println(ss + "Chargé");
            }
            bfr.close();

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

}
//résultat
java.io.FileNotFoundException: C:\test3.txt (Le fichier spécifié est introuvable.)
	at java.io.FileInputStream.open0(Native Method)
	at java.io.FileInputStream.open(FileInputStream.java:195)
	at java.io.FileInputStream.<init>(FileInputStream.java:138)
	at java.io.FileReader.<init>(FileReader.java:72)
	at SampleProgram.main(SampleProgram.java:12)


//Jeter une exception
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;

public class SampleProgram {

    public static void main(String[] args) throws IOException {

        File file = new File("C:\\test3.txt");
        FileReader fr = new FileReader(file);
        BufferedReader bfr = new BufferedReader(fr);
        String ss = null;

        while((ss = bfr.readLine()) != null) {
            System.out.println(ss + "Chargé");
        }
        bfr.close();

    }

}
//résultat
Exception in thread "main" java.io.FileNotFoundException: C:\test3.txt (Le fichier spécifié est introuvable.)
	at java.io.FileInputStream.open0(Native Method)
	at java.io.FileInputStream.open(FileInputStream.java:195)
	at java.io.FileInputStream.<init>(FileInputStream.java:138)
	at java.io.FileReader.<init>(FileReader.java:72)
	at SampleProgram.main(SampleProgram.java:11)

Faites vous-même une exception

Utiliser une classe existante

Ce qui est jeté par throw est une instance d'une classe qui hérite de Throwable.

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;

public class SampleProgram {

    public static void main(String[] args) throws IOException {

        try {
            File file = new File("C:\\test3.txt");
            FileReader fr = new FileReader(file);
            BufferedReader bfr = new BufferedReader(fr);
            String ss = null;

            while((ss = bfr.readLine()) != null) {
                System.out.println(ss + "Chargé");
            }
            bfr.close();
        }catch(IOException e) {
            IOException ee = new IOException("IOException s'est produite! !!");
            throw ee;

        }

    }

}

//résultat
Exception in thread "main" java.io.IOException:IOException s'est produite! !!
	at SampleProgram.main(SampleProgram.java:21)

Faire votre propre

Si vous souhaitez créer une exception qui n'est pas préparée par vous-même, créez une classe d'exception qui hérite de la classe Exception.

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;


class myException extends Exception{
    myException(String msg) {
        super(msg);
    }

}

public class SampleProgram {

    public static void main(String[] args) throws Exception {

        try {
            File file = new File("C:\\test3.txt");
            FileReader fr = new FileReader(file);
            BufferedReader bfr = new BufferedReader(fr);
            String ss = null;

            while((ss = bfr.readLine()) != null) {
                System.out.println(ss + "Chargé");
            }
            bfr.close();
        }catch(Exception e) {
            e.printStackTrace();
            throw new myException("jeta");

        }

    }

}

//résultat
java.io.FileNotFoundException: C:\test3.txt (Le fichier spécifié est introuvable.)
	at java.io.FileInputStream.open0(Native Method)
	at java.io.FileInputStream.open(FileInputStream.java:195)
	at java.io.FileInputStream.<init>(FileInputStream.java:138)
	at java.io.FileReader.<init>(FileReader.java:72)
	at SampleProgram.main(SampleProgram.java:19)
Exception in thread "main" myException:jeta
	at SampleProgram.main(SampleProgram.java:29)


constructeur

De base

Modificateur d'accès Nom de classe(Argument de type argument) {
//Quelque chose de traitement
}

Lorsqu'il existe une relation d'héritage

Le constructeur n'est pas hérité.

//Classe parent
class p{
    p(){
        System.out.println("Constructeur parent 1");
    }
    p(int x){
        System.out.println("Constructeur parent 2");
    }
}
//Classe enfant
class c extends p{

}

public class SampleProgram {
    public static void main(String[] args) throws Exception {
        c cc = new c(10); 
        c cc = new c();
    }
}
c cc = new c(10);

Si Erreur de compilation "Le constructeur c (int) n'est pas défini"

c cc = new c();

alors "Parent constructeur 1" s'affiche Prétendre que le constructeur parent (sans arguments) est hérité Il semble que le compilateur a automatiquement ajouté le constructeur par défaut car rien n'a été déclaré dans la classe enfant.

Je ne sais pas sur la source, mais il semble qu'il soit censé appeler le constructeur parent comme ceci

class c extends p{
  c(){
    super();
  }
}

Le parent et l'enfant sont-ils un ensemble? ??

J'ai essayé d'ajouter un constructeur explicitement à l'enfant, mais pour une raison quelconque, le constructeur parent a également été appelé.

class p{
    p(){
        System.out.println("Constructeur parent 1");
    }
    p(int x){
        System.out.println("Constructeur parent 2");
    }
}

class c extends p{
    c(){
        System.out.println("Constructeur enfant 1");
    }
}

public class SampleProgram {

    public static void main(String[] args) throws Exception {

        c cc = new c();

    }

}

//résultat
Constructeur parent 1
Constructeur enfant 1

Après tout, lorsqu'une classe enfant est instanciée, bien sûr, le constructeur de la classe enfant est exécuté. Cependant, il semble que le constructeur sans l'argument de la classe parent soit appelé sans autorisation avant cela. Je ne peux pas le voir sur la source, mais cela ressemble à ceci.

class c extends p{
    c(){
        super();★ Peut être attaché par le compilateur
        System.out.println("Constructeur enfant 1");
    }
}

Hmmm. .. .. Si tu ne le sais pas ..

Autre

Fragment

Une syntaxe qui peut être mémorisée ou détournée par copie

Je veux omettre System.out.println autant que possible ...


import static java.lang.System.*;

public class SampleProgram{
    public static void main(String[] args) {
        out.println("hoge");
    }
}

Lien de référence

Page de la note technique de HishidamaJava

Recommended Posts

java quoi que ce soit mémo
java n'importe quoi mémo 2
Mémo Java
Mémo Java Silver
java, mémo maven
Remarque sur Java SE 7
Mémo de spécification Java
Mémo de modèle Java
Mémo de l'environnement de développement Java
mémo de connaissances de base java
Mémo d'apprentissage Java (méthode)
Mémo Java Kuche Day
java se 8 programmeur Ⅰ mémo
Mémo privé payant Java
Mémo d'apprentissage Java (basique)
mémo d'expression java lambda
(Mémo) Java pour instruction
expression lambda java [écriture de notes]
Mémo d'apprentissage Java (interface)
[Java] Mémo d'héritage implicite
Mémo d'apprentissage Java (héritage)
mémo de programmation du concours java
[Mémo] Liste liée Java
Remarque sur Java (WebSphere Application Server) [1]
[Java] Mémo de nom du nom de variable
Sous-chaîne de mémo Java (classe standard)
Mémo d'apprentissage Java (type de données)
Longueur du mémo Java (classe standard)
Mémo de la méthode d'étude Java Silver
Créer une méthode java [Memo] [java11]
Mémo de préparation à l'examen Java Silver
Mémo d'apprentissage Java (opérateur logique)
Java
Mémo d'apprentissage Java (classe abstraite)
[Java] Date Termes associés mémo
Mémo d'étude Java 2 avec Progate
Java
Que sont les métriques Java? _Memo_20200818
Java HashMap, entrySet [Mémo personnel]
[Eclipse Java] Mémo des paramètres de l'environnement de développement
Mémo d'apprentissage Java (création d'un tableau)
Mémo personnel: métaprogrammation avec réflexion Java
Mémo d'utilisation de JCA (Java Encryption Architecture)
[Java] Mémo pour nommer les noms de classe
[Mémo de la session d'étude] Java Day Tokyo 2017
Mémo d'apprentissage Java (instruction while, instruction do-while)
De Java à VB.NET - Écriture de notes de contraste
Trébuchement de java débutant [rédaction de mémos]
[Java] Mémo de méthode de mesure du temps de traitement
J'ai essayé d'utiliser le mémo Java LocalDate
mémo docker
Apprendre Java (0)
Étudier Java ―― 3
[Java] tableau
Java protégé
[Java] Annotation
Module [Java]
Tableau Java