Ich habe kürzlich die JavaBronze SE 7/8 Prüfung abgelegt. Ich werde die Probleme vorstellen, über die ich mir während des Studiums persönlich Sorgen gemacht habe.
public class Q1 {
public static void main(String[] args) {
char chr = 65;
int num = 'A';
Q1 q1 = new Q1();
q1.func1(chr, num);
}
void func1(char chr, int num) {
System.out.println("chr:" + chr);
System.out.println("num:" + num);
}
}
Die primitiven Typen int und char sind kompatibel und ermöglichen implizites Casting. Wenn Sie den int-Typ einer Variablen vom Typ char zuweisen, wird das der ASCII-Codetabelle entsprechende Zeichen zugewiesen. Wenn Sie dagegen den Zeichentyp einer Variablen vom Typ int zuweisen, wird die diesem Zeichen entsprechende Dezimalzahl zugewiesen.
public class Q2 {
public static void main(String[] args) {
int num = 1;
System.out.print(++num + num++ + --num + num--);
}
}
A.4
B.6
C.7
D.8
++ num wird als 2 berechnet, num ++ wird als 2 berechnet, --num wird als 2 berechnet und num-- wird als 2 berechnet, für insgesamt 8. Es ist zu beachten, dass num ++ als 2 berechnet und dann auf 3 erhöht wird Kurz danach wird es um --num auf 2 dekrementiert. Wenn sich dieselbe Variable auf der rechten Seite befindet, spiegeln die nachfixierten Inkrementierungs- und Dekrementierungsoperatoren die Verarbeitung für diese Variable wider.
public class Q3 {
public static void main(String[] args) {
char[] chr = { 'A', 'B', 'C' };
while (true)
for (int i = 0; i <= chr.length; i++)
System.out.println(chr[i]);
}
}
In der while-Anweisung tritt eine Endlosschleife auf, und in der for-Anweisung tritt ein Laufzeitfehler (ArrayIndexOutOfBoundsException) auf. Wenn jedoch ein Laufzeitfehler in der for-Anweisung auftritt, selbst wenn diese gerade ausgeführt wird Der Prozess wird zur Hälfte gestoppt und als Laufzeitfehler ausgegeben. Wenn diese gleichzeitig auftreten, wird die Möglichkeit bestimmt, dass sie in der folgenden Reihenfolge auftreten.
class Super {
static void func(String str) {
}
}
class Sub extends Super {
String str;
void func(String str) {
this.str = str;
}
void print() {
System.out.println(str);
}
}
public class Q4 {
public static void main(String[] args) {
Sub sub = new Sub();
sub.func("Hello World");
sub.print();
}
}
Die func-Methode der Super-Klasse wurde von der func-Methode der Sub-Klasse überschrieben. Da sie jedoch statisch qualifiziert ist, tritt ein Kompilierungsfehler auf. Es ist wichtig zu beachten, dass das Problem darin besteht, dass Sie den Fehler nicht bemerken, wenn Sie die Hauptmethode verfolgen. Wir müssen uns auf die Methoden konzentrieren, die sich auf Überschreibungen von Ober- und Unterklassen beziehen, nicht auf die Verarbeitung der Hauptmethode.
class Super {
void print() {
System.out.println("Hello World");
}
}
class Sub extends Super {
}
public class Q5 {
public static void main(String[] args) {
Sub sub;
Super spr;
sub = new Sub();
spr = sub;
sub = spr;
sub.print();
}
}
In der Zeile spr = sub;
, die dem Unterklassentyp → Oberklassentyp zugeordnet ist, tritt kein Fehler auf.
In der Zeile sub = spr;
, die dem Oberklassentyp → Unterklassentyp zugeordnet ist, tritt ein Kompilierungsfehler auf.
Für grundlegende Datentypen ist eine explizite Umwandlung erforderlich, wenn einer kleinen Variablen eine große Variable zugewiesen wird.
Beispiel)
double double_01 = 100.0;
int int_01 = double_01; //Implizite Besetzung(Fehler tritt auf)
int int_01 = (int)double_01; //Explizite Besetzung(Es tritt kein Fehler auf)
Dann tritt im Fall eines Klassentyps, selbst wenn er einem Unterklassentyp zugewiesen ist, der ein großer Typ ist (Superklasse + Differenzklasse) → eine Superklasse, die ein kleiner Typ ist (nur Superklasse), kein Fehler auf und umgekehrt?
Der Grund dafür ist, dass der Compiler die Kompilierung auf Typkompatibilität überprüft, um festzustellen, ob es sich um einen Fehler handelt. Bei Basisdaten wird die Kompatibilität anhand der Größe des Typs beurteilt, bei Klassentypen anhand des Inhalts der Klasse.
Die Unterklasse sagt, von welcher Oberklasse sie erbt, aber die Oberklasse sagt nicht, von welcher Unterklasse sie erbt.
Wenn Sie einer Unterklasse eine Oberklasse zuweisen, wird daher kein Fehler angezeigt, da Sie die Kompatibilität kennen. Wenn Sie einer Oberklasse jedoch eine Unterklasse zuweisen, kennen Sie die Kompatibilität nicht. Wenn Sie sie also nicht explizit umwandeln, wird ein Kompilierungsfehler angezeigt. Es wird sein.
Was haben Sie gedacht. Dies ist perfekt für die Prüfungsvorbereitung! !! !! Vielleicht \ _ (: 3 "∠) \ _
Recommended Posts