--Underbar (_) kann für Literale verwendet werden (mit den folgenden Einschränkungen)
float f = 0.0f;
byte b = 0b1000000;
→ 128 aufgrund eines Fehlers
byte b = (byte)0b1000000;
→-OK für 128
--Casting ist für die Zuordnung zu einem höheren Typ nicht erforderlich (long if int) (upcast)
int a = 1;
long b = a;
float f = 0.0f;
double d = f;
long a = 1;
int b = (int)a;
double d = 0.0;
float f = (float)d;
String a = "aaa"
String b = "aaa"
System.out.println(a == b);
→ true wird angezeigt
int num = 10;
if (num == 100)
System.out.println("A");
else if (num > 10)
System.out.println("B");
else
if (num == 10)
System.out.println("C");
else
if (num == 10)
System.out.println("D");
Compiler-Interpretation
int num = 10;
if (num == 100) {
System.out.println("A");
} else if (num > 10) {
System.out.println("B");
} else {
if (num == 10) {
System.out.println("C");
} else {
if (num == 10) {
System.out.println("D");
}
}
}
--Long und Boolean sind nicht in den Typen enthalten, die an die switch-Anweisung übergeben werden können! --Variablen können unter Switch-Bedingungen nicht verwendet werden
//Grundform
int [] a;
//Das ist nicht gut
int [3] a;
//Grundform
int [] a = new int []{1, 2};
//Das ist nicht gut
int [] a = new int [2]{1, 2};
//Grundform
int [] a = new int []{1, 2};
//Das ist nicht gut
int [] a;
a = {1, 2};
void sample(int... num) {
for (int i = 0; i < num.length; i++) {
System.out.println(num[i]);
}
}
void sampl(int... num, int pos) {
→ Fehler
}
public class Main {
int num;
private static void test() {
num++;
→ Kompilierungsfehler
System.out.ptintln(num)
}
--Implizite Typkonvertierung verursacht Kompilierungsfehler "Mehrdeutiger Methodenaufruf"
public class Main {
public static void main(String [] args) {
Main m = new Main();
System.out.println(m.calc(2, 3));
→2,3 kann auch durch implizite Typkonvertierung als Double interpretiert werden
Ich kann nicht feststellen, welche der überladenen Methoden aufgerufen werden soll. .. ..
→ Kompilierungsfehler in "Mehrdeutiger Methodenaufruf"
}
private double calc(double a, int b) {
return (a + b) / 2;
}
private duoble calc(int ak double b) {
return (a + b) / 2;
}
}
public class Main {
public Main() {
System.out.println("A");
this("B");
→ Kompilierungsfehler
}
public Main(String str) {
System.out.println("B");
}
public static void main(String [] args) {
Main m = new Main();
}
}
--protected kann in geerbten Klassen referenziert werden (kann aber nicht als Instanzmethode aufgerufen werden) Natürlich wird es wahrscheinlich missverstanden.
package other;
public class Book {
private String isbn;
public void setIsbn(String isbn) {
this.isbn = isbn;
}
protected void printInfo() {
System.out.println(this.isbn);
}
}
package pkg;
import other.Book;
public class StoryBook extends Book {}
package pkg;
public class Main {
public static void main(String [] args) {
StoryBook sb = new StoryBook();
sb.setIsbn("xxxx-xxxx-xxxx");
sb.printInfo();
→ Kompilierungsfehler
}
}
interface Worker() {
void work();
}
class Employee {
public void work() {
System.out.println("work");
}
}
class Engineer extend Employee implements Worker { }
public class Main {
public static void main(String [] args) {
Worker w = new Engineer();
→ Arbeit wird ausgegeben (es tritt kein Kompilierungsfehler auf)
}
}
--Exception-Klassen sind grob in Error, Exception und RuntimeException unterteilt. --Error: Ein Fehler, der nicht aus dem Programm wiederhergestellt werden kann (OutOfMemoryError, StackOverflowError, NoClassDefFoundError usw.) → Auch nach Inspektion nicht wiederherstellbar
public class Main {
private static String name;
static {
if (name.length() == 0) {
→ Länge mit nicht initialisiertem Namen()Verursacht einen Fehler, weil Sie angerufen haben
name = "sample"
}
public static void main(String[] args){
System.out.println("hellow " + name);
}
}
public class Main() {
public static void main(String[] args) {
try {
try {
String[] array= {"a", "b", "c"};
System.out.println(array[3]);
} catch (ArrayIndexOuntOfBoundsException e) {
System.out.println("D");
} finally {
System.out.println("E");
→ ausgeführt
}
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("F");
} finally {
System.out.println("G");
→ ausgeführt
}
}
}
→"D E G"Wird angezeigt
public class Main() {
public static void main(String[] args) {
System.out.println(test(null));
→ Anzeige A
}
private static String test(Object obj) {
try {
System.out.println(obj.toString());
} catch (NullPointerException e) {
return "A";
→ A wird auf den Stapel gelegt
} finally {
System.out.println("B");
→ Ausgabe B vor der Rückkehr
}
}
}
→"B A"Wird angezeigt
String a = new String("sampl");
String b = "sample"
String c = String.valueOf("sample");
String a = null;
a += "null";
System.out.println(a)
→"nullnull"Wird angezeigt
--StringBulider verwaltet Daten intern mit char [] und verfügt standardmäßig über einen Puffer für 16 Zeichen
StringBuilder sb = new StringBuilder("abcde");
System.out.println(sb.capacity());
→ 21 wird oft verwendet(16 Zeichen im Puffer+5)
Bezüglich der Syntax von Lambda-Ausdrücken
Wenn Sie die mittlere Klammer im Lambda-Ausdruck weglassen, kann der Vorgang in einem Satz beschrieben werden. Derzeit kann die Rückgabe nicht beschrieben werden --Return kann nicht weggelassen werden, wenn die mittlere Klammer im Lambda-Ausdruck beschrieben ist.
Function f = str -> "hello " + str;
Function f = str -> { return "hello " + str };
Eine Variable mit demselben Namen wie eine in einer Lambda-Methode deklarierte lokale Variable kann nicht als Lambda-Ausdrucksvariable verwendet werden
public class Main {
public static void main(String[] args) {
String val = "A";
Function f = (val) -> { System.out.println(val); };
→ Kompilierungsfehler
}
interface Function { void test(String val); }
→ Funktionsschnittstelle
}
public class Sample {
public static void main(String[] args) {
int cnt = 0;
Runnable r = () -> {
for (cnt = 0; cnt < 10; i++) {
→ Kompilierungsfehler(Nicht final. .. ..)
System.out.println(cnt++);
}
}
new Thread(r).start();
}
}
Recommended Posts