Essayez simplement de le préciser tel quel. Je ne sais pas si cela sera utile. De plus, je ne pense pas que ce soit nécessairement spécifique à Java.
Vous pouvez affecter la même valeur à plusieurs variables.
int x, y;
x = y = 10;
System.out.println(x); // 10
System.out.println(y); // 10
Cela semble être interprété comme suit. 10 est affecté à y, mais en Java, la valeur de l'expression d'affectation est également renvoyée, ce qui signifie que la valeur d'évaluation entière de (y = 10)
est affectée à x.
x = (y = 10);
Je pense que la méthode principale s'écrit généralement comme suit.
public static void main(String[] args) {
System.out.println("Hello world!");
}
S'il s'agit de Java 5 ou version ultérieure, vous pouvez écrire comme suit.
public static void main(String... args) {
System.out.println("Hello world!");
}
La seule différence est «String []» ou «String ...». Le premier est un tableau et le second est un argument de longueur variable, mais la méthode principale semble être l'un ou l'autre.
Vous pouvez créer une nouvelle étendue à l'aide de l'instruction if ou for, mais vous pouvez également créer une étendue simple sans branchement conditionnel ni boucle.
{
int x = 10;
System.out.println(x); // 10
}
{
int x = 100;
System.out.println(x); // 100
}
// System.out.println(x); //Erreur de compilation
x
est défini deux fois, mais cela ne provoque pas d'erreur de compilation car il a une portée différente. De plus, étant donné que la portée de «x» n'est que la plage entourée par l'accolade, il s'agit d'une erreur de compilation si vous essayez de faire référence à «x» en dehors de l'accolade.
HashSet est une classe qui encapsule simplement HashMap en tant qu'implémentation. (* Ceci est une implémentation détaillée, donc elle peut changer à l'avenir.)
public boolean add(E e) {
return map.put(e, PRESENT)==null;
}
public boolean remove(Object o) {
return map.remove(o)==PRESENT;
}
AbstractStringBuilder
StringBuilder
et StringBuffer
sont écrits en JavaDoc comme s'ils étaient des sous-classes directement sous la classe Object, mais ce sont en fait des sous-classes de ʻAbstractStringBuilder. ʻAbstractStringBuilder
est un package privé (pas une API publique) et ne peut pas être écrit en JavaDoc.
(* Ceci est une implémentation détaillée, donc elle peut changer à l'avenir.)
public final class StringBuilder
extends AbstractStringBuilder
implements java.io.Serializable, Comparable<StringBuilder>, CharSequence
{
//Omission
public final class StringBuffer
extends AbstractStringBuilder
implements java.io.Serializable, Comparable<StringBuffer>, CharSequence
{
//Omission
Normalement, Java ne vous permet pas de définir une méthode dans une méthode. Mais vous pouvez le faire avec le var
introduit dans Java 10. (Je l'ai écrit dans un autre article)
Main.java
public class Main {
public static void main(String[] args) {
// func.capitalize()Peut être appelé avec
//func est une variable locale et ne peut pas être appelée depuis l'extérieur de cette méthode
var func = new Object() {
private String capitalize(String s) {
return s.substring(0, 1).toUpperCase() + s.substring(1, s.length()).toLowerCase();
}
};
System.out.println(func.capitalize("tokyo")); // => Tokyo
System.out.println(func.capitalize("TOKYO")); // => Tokyo
}
}
J'ai écrit ceci dans un autre article, mais depuis Java 11, vous pouvez spécifier le fichier source et l'exécuter avec la commande java
sans utiliser javac
. Cela peut être utile pour un petit contrôle de fonctionnement.
Eh bien, je ne pense pas que cela fonctionne vraiment sans compilation, mais c'est une compilation dans les coulisses.
En Java, vous pouvez utiliser des classes anonymes pour intégrer le traitement dans des méthodes existantes.
List<String> list = new ArrayList<>() {
@Override
public boolean add(String s) {
System.out.println("add called. arg: " + s);
return super.add(s);
}
};
list.add("hello"); // add called. arg: hello
list.add("world"); // add called. arg: world
System.out.println(list); // [hello, world]
pour
null`Vous pouvez utiliser ʻinstanceof pour
null`.
System.out.println(null instanceof Object); // false
Il est naturel que ce ne soit pas "vrai", mais je pense que le point d'intérêt est que "NullPointerException" ne peut pas être lancé. Le même résultat peut être obtenu avec une variable à laquelle «null» est affecté, il n'est donc pas nécessaire de vérifier «null» avant «instanceof».
null
à lancer
Si une variable de type d'exception contient «null», «throw» lève «NullPointerException» quel que soit le type de variable.
RuntimeException e = null;
throw e; // NullPointerException
null
Cela n'a pas beaucoup de sens, mais je ne peux pas faire d'exceptions pour le moment.
Object obj = null;
String str = (String)obj;
System.out.println(str); // null
Avec ʻinstanceof, le type d'instance est également
true` pour les sous-classes de la classe spécifiée.
System.out.println("str" instanceof Object); // true
Pour les sous-classes, si vous voulez le rendre faux
, vous pouvez comparer les types Class
avec ʻequals` comme indiqué ci-dessous.
System.out.println(new Object().getClass().equals(Object.class)); // true
System.out.println("str".getClass().equals(Object.class)); // false
Un tableau est une affectation compatible avec un tableau d'un type et un tableau d'une sous-classe de ce type. Par conséquent, le code suivant sera compilé et une erreur se produira au moment de l'exécution.
Object[] array = new String[3];
array[0] = new Integer(10); // ArrayStoreException
S'il s'agit d'une liste qui utilise des génériques, le problème ci-dessus ne se produira pas car une erreur de compilation se produira.
List<Object> list = new ArrayList<String>(); // incompatible types: ArrayList<String> cannot be converted to List<Object>
Si un débordement se produit pendant une opération, le résultat sera incorrect sans aucune erreur.
Il existe une méthode utilitaire dans la classe Math
qui lève une exception lorsqu'un débordement se produit, vous pouvez donc détecter le débordement en interceptant l'exception.
System.out.println(Integer.MAX_VALUE + 1); // -2147483648
Math.addExact(Integer.MAX_VALUE, 1); // ArithmeticException: integer overflow
Eh bien, je pense que je devrais utiliser BigInteger
depuis le début.
Je serais heureux s'il y a un élément qui peut être utilisé comme référence. Si vous proposez autre chose, vous pouvez l'ajouter ou non.
Recommended Posts