les déclarations de package et d'importation s'appliquent à toutes les classes dans le même fichier
La déclaration du package doit être au début du code source (seuls les commentaires peuvent être écrits avant le package)
Le package java.lang est une collection de classes de base et ne nécessite pas de déclaration d'importation
L'utilisation de "\ *" n'importe pas les classes appartenant à des sous-packages
ʻImport test. * Importera
test.MyClass1 mais pas
test.sub.MyClass2`
Les classes appartenant au package par défaut (package anonyme) ne sont accessibles qu'à partir des classes appartenant à un package anonyme. L'importation ne peut pas être écrite en premier lieu, ce qui entraîne une erreur de compilation.
--Lors de l'accès aux champs et méthodes statiques
import static jp.co.xxx.Sample.num
import static jp.co.xxx.Sample.print
Vous pouvez omettre le modificateur en définissant
** ʻimport static** au lieu de
static import`
--La signature du point d'entrée a le format suivant
- public static void main (String[] xxx)
- public static void main (String... xxx)
N'importe quel.
La commande --javac (compiler) a ** l'extension **, la commande java (exécuter) n'a ** pas d'extension **
javac Main.java
java Main
--Type primaire
Type de données | valeur |
---|---|
boolean | 1 bit |
char | Caractère Unicode 16 bits |
byte | 8 bit |
short | 16 bit |
int | 32 bit |
long | 64 bit |
float | 32 bit |
double | 64 bit |
l'octet fait 8 bits et je me souviens deux fois de là int --long avec float --double Notez qu'il y a du positif et du négatif (Exemple: 0b11111111 (= 255) n'est pas entré dans l'octet (-128 à 127))
Le littéral numérique est par défaut ** int et double **
Entier littéral
Numéro de base | Notation |
---|---|
Nombre décimal | 123 |
Hexadécimal | 0x1A8 |
8 base | 0123 |
Nombre binaire | 0b011 |
--Notation numérique utilisant "\ _" Ne pas utiliser avant ou après le début / la fin / le symbole ("." "L" "F" "0x" ...) Continu est OK
--Type de char --Litéral de caractère entre guillemets simples --Numéros Unicode (caractères littéraux) commençant par "\ u" entre guillemets simples
N'importe quel N'utilisez pas de littéraux de chaîne (guillemets doubles)
--Seuls "\ _" et "$" peuvent être utilisés comme identifiants Numéros de la deuxième lettre
Le seul littéral qui exprime null est "null" ** "NULL" n'est pas possible **
println (null)
affiche "null"
La relation entre la classe et l'instance est la relation entre la source de la copie et la copie
--L'opérateur d'affectation (= ou + =) n'est affecté qu'après l'évaluation de l'opérande.
int a = 3;
int b = a += 5; // a = 8, b = 8
int a = 10 * - 10; // a = -100
--Pour la compatibilité littérale numérique, une conversion explicite est requise lorsque la plage est grande → petite. Cependant, pour les littéraux entiers, c'est OK si c'est dans la plage
byte a = 0b10000000; //int → byte est OK s'il est hors de portée, mais il est hors de portée, donc une erreur de compilation
short b = 128 + 128; //Puisqu'il est dans la plage de court, int → court, mais OK
int c = 2 * 3L; //Depuis long → int, erreur de compilation
float d = 10.0; //Depuis double → float, erreur de compilation (10).0f est OK)
--En Java, les types booléens et numériques ne sont pas compatibles
boolean a = 1; //Erreur de compilation
byte b = true; //Erreur de compilation
--instanceOf détermine si une instance peut être gérée avec le type spécifié
interface A {}
class B implements A {}
---
B b = new B();
System.out.println(b instanceOf B); // true
System.out.println(b instanceOf A); // true
false && x++ == 1; // false, x++Ignorer
false & x++ == 1; // false, x++Être terminé
true || x++ == 1; // true, x++Ignorer
true || x++ == 1; // true, x++Être terminé
La priorité des opérateurs est
(), ++, - est la priorité la plus élevée
** \ *, / et% sont sur la même ligne **
"==": Identité "equals ()": Equivalence
La méthode equlas de la classe Object est la même, donc on suppose qu'elle est remplacée. ** Reçoit la classe Object comme argument **, donc si vous modifiez le type d'argument, il ne sera pas remplacé
--Si le même littéral de chaîne apparaît dans le code, la référence à la même instance sera réutilisée. Mécanisme appelé "pool constant" Une instance String est créée dans l'espace mémoire constant au lieu de l'espace mémoire d'instance pour les littéraux de chaîne. Explicitement nouveau
String a = "test"; //Référence à une instance String créée dans un espace mémoire constant
String b = "test"; //Référence à une instance String créée dans un espace mémoire constant
System.out.println(a == b) //vrai, non seulement "égale valeur" mais aussi "même valeur"
String c = new String("test"); // //Référence à une instance String créée dans l'espace mémoire par exemple
System.out.println(a == c) // false
System.out.println(a.equlas(c)) // true
if (Expression conditionnelle A) hoge();
else
if (Expression conditionnelle B) fuga();
else bar();
//Cela équivaut à
if (Expression conditionnelle A) hoge();
else {
if (Expression conditionnelle B) fuga();
else bar();
}
--La condition de l'instruction switch est entrée --Int type ou moins de type entier et son wrapper --Caractères, chaînes --Type d'énumération
seulement ** booléen et long ne sont pas **
** Les variables ne sont autorisées dans aucun des **
int[] a = new int[0]; //Vous pouvez également créer un objet tableau avec 0 élément
int[] b = new int[3];
ArrayList<Integer> c = new ArrayList<>();
System.out.println(a); // [I@677327b6
System.out.println(b); // [I@14ae5a5 * Contrairement à ArrayList, le contenu ne s'affiche pas même si vous imprimez.
System.out.println(c); // []
//Les deux peuvent être compilés
int[] a;
int b[];
int[][] c[];
--Le nombre d'éléments ne peut pas être spécifié lors de la déclaration d'une variable de type tableau Une variable de type tableau est une référence à une instance de tableau et est distincte de la création de l'instance de tableau.
int[3] a; //Erreur de compilation
int b[3]; //Erreur de compilation
int c[] = new int[3]; // OK. int[3]Une instance de tableau de est créée et une référence à celle-ci est définie dans c
--Le nombre d'éléments doit être spécifié pour créer une instance de tableau La variable est OK ** Dans le cas d'un tableau multidimensionnel, seule la première dimension ne peut pas être omise **
int[] a = new int[3 * 5]; // ok
int x = 5;
int[] b = new int[x]; // ok
int[] c = new int[3.5]; //Erreur de compilation
int[] d = new int[]; //Erreur de compilation
int[][][] e = new int[3][4][5]; // ok
int[][][] f = new int[3][][]; // ok
int[][][] g = new int[][][5]; //Erreur de compilation
--Le contenu du tableau peut être initialisé avec l'opérateur d'initialisation du tableau {}
int[] a = {2, 3}; // ok
int[] b = new int[]{2, 3}; // ok
int[] c = new int[2]{2, 3}; //Erreur de compilation Ne spécifiez pas le nombre d'éléments lors de l'utilisation de l'opérateur d'initialisation
int[] d = {}; //Ok sans éléments
int[] e;
e = {}; //Erreur de compilation L'opérateur d'initialisation ne peut être utilisé que lors de la déclaration d'une variable de type tableau
Child[] c = new Child[]{new Child(), new Child()}
Parent[] p = c; // ok
Vous pouvez copier le tableau avec la méthode clone () Cependant, il est dupliqué jusqu'à la première dimension Dans le cas d'un tableau multidimensionnel, la même instance est référencée à partir de la deuxième dimension.
Vous pouvez également copier un tableau avec la méthode arraycpy ()
arraycpy(src, srcStartIndex, dst, dstStartIndex, numOfElements)
while (true); // Boucle infinie
--Plusieurs variables peuvent être déclarées dans l'expression d'initialisation de l'instruction for, mais uniquement du même type Seules les formules d'initialisation / de mise à jour peuvent être utilisées pour plusieurs documents Il y a toujours une expression conditionnelle
for (int i = 0, j = 10; true; i++, j++) {}// ok
for (int i = 0, long j = 10; true; i++) {}//Erreur de compilation
for (int i = 0; true, i < 10; i++) {} //Erreur de compilation
--Dans l'instruction for, même si l'expression conditionnelle est omise, c'est ok Boucle infinie sauf si break est utilisé
Sample[] array = {new Sample(1), new Sample(2), new Sample(3)};
System.out.println(array[0].getValue()); // 1
for (Sample s : array){
s = new Sample(4);
System.out.println(s.getValue()); // 4
}
System.out.println(array[0].getValue()); // 1
// s.setValue(4)Si tel est le cas, l'arrangement d'origine sera également affecté.
L'instruction pour étendue ne peut traiter qu'une par une dans le sens avant.
En utilisant des étiquettes, vous pouvez spécifier librement où transférer le contrôle de continuer et de rompre (à l'origine uniquement le dernier). Les étiquettes peuvent être placées partout
Argument de longueur variable
Trois points après le type d'argument
- void sample (int... num){ System.out.println(num[0]); }
Les arguments de longueur variable ne peuvent être utilisés qu'au dernier argument
Lors du chargement d'un fichier de classe, les champs statiques et les méthodes statiques sont placés dans la "zone statique" La définition de l'autre partie est placée dans la "zone de tas" et est lue à chaque fois qu'une instance est créée. Les champs statiques peuvent donc être utilisés sans instance
Les champs de méthode non statiques ne sont pas accessibles à partir de méthodes statiques
La surcharge doit avoir une signature distincte Signature = nom de la méthode + type / ordre d'argument ** Vous ne pouvez pas modifier le modificateur d'accès, le nom de l'argument ou le type de retour **
Restrictions du constructeur --Alignez le nom de la méthode et le nom de la classe
** Le type de retour ne peut pas être décrit **
** Si vous écrivez une valeur de retour, elle est interprétée comme une simple méthode, pas comme un constructeur **
Ne peut être utilisé qu'avec de nouveaux
** Tout modificateur d'accès est acceptable (privé est également possible) **
--Le bloc d'initialisation ({} directement sous la classe) est exécuté avant le constructeur
--Dans une sous-classe, ** le constructeur de la super classe doit toujours être appelé au début de son propre constructeur ** S'il n'est pas spécifié, super () sera inséré au début du code Par conséquent, s'il n'y a pas de super () dans la classe parent, une erreur de compilation se produira.
--Utilisez this () pour appeler un autre constructeur Cela doit être appelé en premier
--Modificateur d'accès
Qualificatif | La description |
---|---|
public | Tout va bien |
protected | Uniquement les sous-classes ou classes dans le même package |
Aucun | Seulement les classes dans le même package |
private | Seulement à l'intérieur de la classe |
――Les deux suivants ne sont pas repris dans la sous-classe --Constructeur
méthode de champ privé
Caractéristiques de l'interface --Ne peut pas être instancié
** La méthode est publique uniquement, même si elle est omise public ** --Je ne peux pas avoir d'implémentation ({} ne peut pas être décrit)
** Les champs peuvent être limités aux éléments suivants ** --final (= constante sans changement) --static (= peut être utilisé sans instanciation)
La mise en œuvre (réalisation) est des outils, la réalisation multiple est possible
Vous pouvez créer une interface qui hérite de l'interface avec extend
La classe concrète doit implémenter toutes les méthodes abstraites de l'interface Les classes abstraites n'ont pas à
--Caractéristiques de la classe abstraite --Ne peut pas être instancié --Ainoko d'interface et de classe concrète Autrement dit, il a à la fois une méthode abstraite et une méthode concrète, et ** les champs peuvent également être définis ** --Une classe concrète qui hérite d'une classe abstraite doit implémenter toutes les méthodes abstraites
La méthode abstraite de la classe abstraite n'a pas besoin d'être publique
Ignorer les règles
La valeur de retour est la même ou une sous-classe (= valeur de retour covariante)
Même signature
** Les modificateurs d'accès sont identiques ou plus lâches **
Puisque la méthode abstraite d'interface est publique, toutes les classes concrètes doivent également être publiques.
Une sous-classe a à la fois une superclasse et une instance de la sous-classe, et est considérée comme une instance en apparence. --Par conséquent, dans le constructeur de sous-classe, le constructeur de superclasse doit également être appelé en premier. --Si un champ portant le même nom est défini dans une superclasse et une sous-classe, les deux sont détenus séparément. (Cependant, la méthode remplacée est considérée comme une seule instance) --Lorsque vous vous référez à un champ du même nom, celui à utiliser dépend du type de la variable déclarée.
Lorsqu'il est référencé à partir d'une méthode, utilisez le champ de la classe dans laquelle la méthode est déclarée.
class Parent {
String val = "P";
public String getVal1(){
return val;
}
public String getVal2(){
return val;
}
}
class Child extends Parent {
String val = "C";
public String getVal2(){
return val;
}
}
class Main {
public static void main (String args[]){
Parent p = new Parent();
Parent c = new Child();
System.out.println(p.val); // P
System.out.println(c.val); //Puisqu'il est déclaré comme Parent, P
System.out.println(p.getVal1()); // P
System.out.println(c.getVal1()); //Puisqu'il s'agit d'une méthode déclarée dans Parent, P
System.out.println(p.getVal2()); // P
System.out.println(c.getVal2()); //C parce qu'il a été remplacé
}
}
--A propos de la réalisation
interface A { public void abst(); }
class B { public void abst(); }
class C extends B implements A{ } // ok.Considéré pour implémenter la méthode abstraite de A
--Cast = "Garantie de compatibilité avec le compilateur"
--Si vous écrivez un cast en un incompatible, vous obtiendrez une ** erreur ** au moment de la compilation.
-- (Chaîne) 1 // Erreur de compilation
class Parent {}
class Child extends Parent{ }
class Main{
public static void main(String args[]){
Parent c = new Child();
Parent p = new Parent();
Child c_ = (Child) c; // ok
Child p_ = (Child) p; //Compile, mais au moment de l'exécution ClassCastException
}
}
int num = 10;
if (num < 11){
int num = 20; //Erreur de compilation
int value = 100; //OK car la portée est différente
}
int value = 200;
--try-catch-finally syntaxe ――La commande ne peut pas être modifiée - try
Requis ・ Un seul
Ni catch ni enfin ne peuvent être omis
Même si vous retournez dans catch, retournez après l'exécution de l'instruction finally
Si vous revenez à la fois dans les instructions catch et finally, il sera écrasé par finally return. Puisqu'il s'agit d'une image avec une variable de retour uniquement, la réécriture de la variable renvoyée par finally ne sera pas écrasée.
public static int sample1(){
try {
throw new Exception();
} catch (Exception e){
return 0;
} finally {
return 1;
}
}
public static int sample2(){
int val;
try {
throw new Exception();
} catch (Exception e){
val = 0;
return val;
} finally {
val = 1;
}
}
public static void main (String args[]){
System.out.println(sample1()); // 1
System.out.println(sample2()); // 0
}
--Si une exception se produit
Vous devez effectuer l'une des opérations suivantes. Ce qui précède s'applique également à ceux qui utilisent la méthode déclarée throws ** La méthode principale nécessite également l'un des deux ci-dessus **
Error
Il y en a qui ne répondent pas à l'expression conditionnelle de l'assertion.
RunTimeException --Système hors gamme - ArrayIndexOutOfBoundsException
Accès hors de portée dans un tableau - IndexOutOfBoundsException --Accès hors de portée sur ArrayList - StringIndexOutOfBoundsException --Accès hors plage avec string.charAt () --Système illégal - IllegalArgumentException --Les conditions préalables de l'argument ne sont pas respectées - IllegalStateException --Je ne suis pas prêt --Autre - ClassCastException - NumberFormatException - NullPointerException - SecurityException
String --La chaîne est immuable Une fois initialisé, le champ ne peut pas être réécrit
--String est une sous-classe de CharSequence
replaceAll(".", "hoge")
--Remplacement par une expression régulièrereplace("src", "dst")
charAt(index)
indexOf("abc")
subString(start, end)
subString(start)
trim()
--Espace, \ t (caractère de tabulation), \ n \ r (saut de ligne)startsWith("a")
endsWith("a")
split("\\w\\s")
--Split par expression régulièreconcat("a")
--Concaténation de chaînes de caractères
String a = "30" + 5; // 305
String b = "30" + 5 + 8; // = "305" + 8 = "3058"
String c = 5 + 8 + "30"; // = 13 + "30" = "1330"
String d = "hoge" + null; // = "hogenull"
--StringBuilder a un tampon pour 16 caractères par défaut
StringBuilder sb = new StringBuilder("abc");
System.out.println(sb.capacity()); // 3 + 16 = 19
StringBuilder sb2 = new StringBuilder(5);
System.out.println(sb2.capacity()); // 5
Méthodes de StringBuilder
Renvoie une chaîne interne
parseXXX
Integer.parseInt("123")
De la chaîne au primitif
valueOf
Integer.valueOf("123")
--De la chaîne à la classe wrapperIls sont insensibles à la casse
--Style Lambda --Une interface qui n'a qu'une seule méthode à implémenter est appelée "interface fonctionnelle".
//Interface fonctionnelle
interface Algorithm1 {
void perform(String name);
}
interface Algorithm2 {
String perform(String name);
}
---
Algorithm1 a = (String name) -> { System.out.println(name); }
Algorithm1 b = (name) -> { System.out.println(name); } //Le type d'argument est facultatif
Algorithm1 c = name -> System.out.println(name); //S'il n'y a qu'un seul argument()Facultatif, s'il n'y a qu'une seule méthode{}Optionnel
Algorithm2 d = name -> { return "hello " + name + " !"; }
Algorithm2 e = name -> "hello " + name + " !"; //J'ai besoin d'une valeur de retour{}En cas d'omission, le retour ne peut pas être décrit
Algorithm2 e = name -> return "hello " + name + " !"; //Erreur de compilation
--Une variable portant le même nom que la variable locale déclarée dans la méthode ne peut pas être utilisée comme nom d'argument de l'expression lambda (même portée).
Pour accéder aux variables locales déclarées en dehors de l'expression lambda à partir de l'expression lambda Doit être une variable pratiquement finale (une variable qui ne change jamais)
Interface fonctionnelle standard
DateTime
LocalDate --immuable pour Clendar mutable --Le mois commence
LocalDate.of(2018, 12, 24)
LocalDate.parse("2015-01-01")
Le format de base est aaaa-MM-jj
--DataTimeException pour les dates inexistantes
- LocalDate.of(2017, 1, 32) // DateTimeException
LocalTime
24 heures
plusHours(10)
LocalDateTime --Combined LocalDate et LocalTime
Duration --Gestion du décalage horaire
Duration d = Duration.between(start, end)
Period --Gestion des différences de date
Period p = Period.between(start, end)
Period p = localDate.until(target)
DateTimeFormatter
** ISO_DATE_TIME ** est le plus standard?
localDateTime.format( DateTimeFormatter.ISO_DATE_TIME ) // 2018-08-31T00:00:00
ArrayList
ArrayList --Non thread safe
Le vecteur est thread-safe
add(element)
add(index, element)
set(index, element)
remove(element)
** trouver et supprimer des éléments égaux avec égaux () **
--Supprimer uniquement le premier
――Les éléments derrière lui remontent
--Apparemment, si vous appelez remove pendant la lecture en boucle,
ConcurrentModificationException est levée sauf lors de la suppression à la fin de la boucle
Si vous ne l'aimez pas, utilisez iterator
--removeIf (expression lambda)
Les génériques de List et ArrayList imposent des contraintes et ne doivent pas l'être (ce sera une liste de type Object).
tips
//L'exception de sous-classe vient après
try {} catch (Exception e) {} catch (IOException e) { /** cannot reach **/ };
//Écrivez le processus après continuer
for (int i : list){
if ( flg ) {
continue;
hoge(); // cannot reach
}
}
//Traitement après retour
void sample(){
return;
hoge(); // cannot reach
}
Recommended Posts