Einführung in mehrere häufige Fehler in Java
Häufige Java-Fehler:
1. Nullzeigerfehler
Bei der Verwendung von Java-Arrays ist es manchmal notwendig, die Elemente in zu ändern String-Array Vergleiche durchführen. Wenn das Element dann nicht null ist, wird das Programm normal ausgeführt. Sobald das verglichene Element jedoch null ist, tritt im Programm ein Nullzeigerfehler auf.
Lösung: Schutz hinzufügen und eine Beurteilung treffen, wenn das Element nicht null ist.
public static void main(Sring[] args){ String [] sums = "adfafA"; for(int i=0;i<sums.length;i++){ if(sums[]!=null && sums[i].equals(sr)){ System.out.println("找到元素"+sums[i]); break; } } }
2. Datengenauigkeitsbereich und Typkonvertierung
Es gibt 4 grundlegende Datentypen in Java:
Integer-Typ: -1 2 3 4 ……
Gleitkommatyp: float 1.3f; double 3.2 3.5d (nicht spezifizierter Typ, standardmäßig höchste Genauigkeit)
Zeichentyp: Unicode-Kodierung, 2 Bytes
Boolescher Typ: Die Genauigkeitsbereiche von Die vier Grundtypen von Daten, wahr und falsch
, sind unterschiedlich und werden Schritt für Schritt verbessert.
Wenn Sie bei der Verwendung von Datentypen nicht auf den Genauigkeitsbereich achten, kommt es zu einem Datenüberlauf, der zu Berechnungsfehlern führt.
Unter den vier Grundtypen können Ganzzahl-, Gleitkomma- und Zeichendaten ineinander konvertiert werden.
Die Konvertierungsregeln lauten wie folgt:
①Unsichtbare Konvertierung: Datenwerte mit geringer Genauigkeit werden Werten mit hoher Präzision zugewiesen und können automatisch konvertiert werden. (Low-Level zu High-Level)
②Erzwungene Konvertierung: Datenwerte mit großem Bereich, (High-Level zu Low-Level)
③Automatische Heraufstufungsregeln für den Betrieb: Während des Betriebs Es wird automatisch in einen hochpräzisen Datentyp konvertiert.
3. Die Verwendung von drei Arten von Schleifen
① für eine Schleife: Es handelt sich um eine Schleife mit einer begrenzten Anzahl von Schleifen. Vor der Schleife wird die Anzahl der Schleifen angegeben.
for(表达式;表达式;表达式){ 循环体 }
break-Anweisung: Springen Sie nach der Ausführung sofort aus der Schleife, führen Sie nachfolgende Anweisungen nicht aus und beenden Sie alle Schleifen.
continue-Anweisung: Springen Sie nach der Ausführung sofort aus der aktuellen Wortschleife und beurteilen Sie erneut, ob die Bedingung weiterhin in der Schleife ausgeführt wird.
②While-Schleifenanweisung: geeignet für Schleifen mit unbekannter Häufigkeit.
while(条件表达式){ 语句 };
③do-While-Schleife: Es ist auch eine Schleife mit unbekannter Häufigkeit. Die Anordnung muss mindestens einmal ausgeführt werden, bevor ein Urteil gefällt werden kann. Wenn while wahr ist, wird die Schleife fortgesetzt, andernfalls wird die Schleife beendet.
do { 语句 }while(条件表达式);
4. Zeichenfolge mehrmals kopieren
Ein Fehler, der durch Tests nicht gefunden werden kann, besteht darin, dass mehrere Kopien eines unveränderlichen Objekts generiert werden. Ein unveränderliches Objekt kann nicht geändert werden, daher besteht keine Notwendigkeit, es zu kopieren. Das am häufigsten verwendete unveränderliche Objekt ist String.
Wenn Sie den Inhalt eines String-Objekts ändern müssen, sollten Sie StringBuffer verwenden. Der folgende Code funktioniert einwandfrei:
String s = new String ("Text here");
Dieser Code weist jedoch eine schlechte Leistung auf und ist unnötig komplex. Sie können den obigen Code auch folgendermaßen umschreiben:
String temp = "Text here"; String s = new String (temp);
Dieser Code enthält jedoch einen zusätzlichen String, der nicht unbedingt erforderlich ist. Der bessere Code ist:
String s = "Text here";
5. Es gibt kein vom Klon zurückgegebenes Objekt (Klon)
Kapselung ist ein wichtiges Konzept in der objektorientierten Programmierung. Leider macht es Java leicht, die Kapselung versehentlich zu unterbrechen – Java ermöglicht es Ihnen, Verweise auf private Daten zurückzugeben. Der folgende Code verrät dies:
import java.awt.Dimension; /***Example class.The x and y values should never*be negative.*/ public class Example{ private Dimension d = new Dimension (0, 0); public Example (){ } /*** Set height and width. Both height and width must be nonnegative * or an exception is thrown.*/ public synchronized void setValues (int height,int width) throws IllegalArgumentException{ if (height <0 || width <0) throw new IllegalArgumentException(); d.height = height; d.width = width; } public synchronized Dimension getValues(){ // Ooops! Breaks encapsulation return d; } }
Die Beispielklasse garantiert, dass die von ihr gespeicherten Höhen- und Breitenwerte immer nicht negativ sind. Der Versuch, die setValues()-Methode zum Festlegen negativer Werte zu verwenden, löst eine aus Ausnahme. Da getValues() leider eine Referenz auf d und keine Kopie von d zurückgibt, können Sie destruktiven Code wie diesen schreiben:
Example ex = new Example(); Dimension d = ex.getValues(); d.height = -5; d.width = -10;
Jetzt hat das Beispielobjekt einen negativen Wert. Wenn der Aufruf von getValues()! Wenn der Benutzer niemals die Breiten- und Höhenwerte des zurückgegebenen Dimensionsobjekts festlegt, ist es unmöglich, solche Fehler allein durch Tests zu erkennen.
Leider kann der Clientcode im Laufe der Zeit den Wert des zurückgegebenen Dimensionsobjekts ändern. Derzeit ist die Ermittlung der Fehlerquelle mühsam und zeitaufwändig, insbesondere in einer Umgebung mit mehreren Threads.
Eine bessere Möglichkeit besteht darin, getValues() eine Kopie zurückgeben zu lassen:
public synchronized Dimension getValues(){ return new Dimension (d.x, d.y); }
6 Falsche Daten kopieren
Manchmal wissen Programmierer, dass sie eine Kopie zurückgeben müssen, aber nicht. t Achten Sie darauf, dass Sie keine falschen Daten kopieren. Da nur ein Teil der Datenkopierarbeit erledigt ist, weicht der folgende Code von der Absicht des Programmierers ab:
import java.awt.Dimension; /*** Example class. The height and width values should never * be negative. */ public class Example{ static final public int TOTAL_VALUES = 10; private Dimension[] d = new Dimension[TOTAL_VALUES]; public Example (){ } /*** Set height and width. Both height and width must be nonnegative * or an exception will be thrown. */ public synchronized void setValues (int index, int height, int width) throws IllegalArgumentException{ if (height <0 || width <0) throw new IllegalArgumentException(); if (d[index] == null) d[index] = new Dimension(); d[index].height = height; d[index].width = width; } public synchronized Dimension[] getValues() throws CloneNotSupportedException{ return (Dimension[])d.clone(); } }
Das Problem hierbei ist, dass die Methode getValues() nur das Array klont, nicht jedoch das enthaltene Dimension-Objekt im Array: Obwohl der Aufrufer das interne Array nicht so ändern kann, dass seine Elemente auf verschiedene Dimensionsobjekte verweisen, kann der Aufrufer den Inhalt der internen Array-Elemente (dh des Dimension-Objekts) ändern. Eine bessere Version der Methode getValues() ist:
public synchronized Dimension[] getValues() throws CloneNotSupportedException{ Dimension[] copy = (Dimension[])d.clone(); for (int i = 0; i // NOTE: Dimension isn’t cloneable. if (d != null) copy[i] = new Dimension (d[i].height, d[i].width); } return copy; }
Ähnliche Fehler werden beim Klonen mehrdimensionaler Arrays atomarer Daten gemacht. Zu den Atomtypen gehören int, float usw. Ein einfacher Klon eines eindimensionalen Arrays vom Typ int ist korrekt, wie unten gezeigt:
public void store (int[] data) throws CloneNotSupportedException{ this.data = (int[])data.clone(); // OK }
Das Kopieren eines zweidimensionalen Arrays vom Typ int ist komplizierter. Java verfügt nicht über ein zweidimensionales Array vom Typ int, daher ist ein zweidimensionales Array vom Typ int eigentlich ein eindimensionales Array: Sein Typ ist int[]. Das einfache Klonen eines Arrays vom Typ int[][] führt zu demselben Fehler wie bei der ersten Version der getValues()-Methode im obigen Beispiel, daher sollte dies vermieden werden. Das folgende Beispiel demonstriert die falschen und richtigen Methoden beim Klonen eines zweidimensionalen int-Arrays:
public void wrongStore (int[][] data) throws CloneNotSupportedException{ this.data = (int[][])data.clone(); // Not OK! } public void rightStore (int[][] data){ // OK! this.data = (int[][])data.clone(); for (int i = 0; i if (data != null) this.data[i] = (int[])data[i].clone(); } }
Für weitere Java-Kenntnisse beachten Sie bitte die Spalte Java Basic Tutorial.
Das obige ist der detaillierte Inhalt vonEinführung in mehrere häufige Fehler in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Leitfaden zur Smith-Zahl in Java. Hier besprechen wir die Definition: Wie überprüft man die Smith-Nummer in Java? Beispiel mit Code-Implementierung.

In diesem Artikel haben wir die am häufigsten gestellten Fragen zu Java Spring-Interviews mit ihren detaillierten Antworten zusammengestellt. Damit Sie das Interview knacken können.

Java 8 führt die Stream -API ein und bietet eine leistungsstarke und ausdrucksstarke Möglichkeit, Datensammlungen zu verarbeiten. Eine häufige Frage bei der Verwendung von Stream lautet jedoch: Wie kann man von einem Foreach -Betrieb brechen oder zurückkehren? Herkömmliche Schleifen ermöglichen eine frühzeitige Unterbrechung oder Rückkehr, aber die Stream's foreach -Methode unterstützt diese Methode nicht direkt. In diesem Artikel werden die Gründe erläutert und alternative Methoden zur Implementierung vorzeitiger Beendigung in Strahlverarbeitungssystemen erforscht. Weitere Lektüre: Java Stream API -Verbesserungen Stream foreach verstehen Die Foreach -Methode ist ein Terminalbetrieb, der einen Vorgang für jedes Element im Stream ausführt. Seine Designabsicht ist

Anleitung zum TimeStamp to Date in Java. Hier diskutieren wir auch die Einführung und wie man Zeitstempel in Java in ein Datum konvertiert, zusammen mit Beispielen.

Kapseln sind dreidimensionale geometrische Figuren, die aus einem Zylinder und einer Hemisphäre an beiden Enden bestehen. Das Volumen der Kapsel kann berechnet werden, indem das Volumen des Zylinders und das Volumen der Hemisphäre an beiden Enden hinzugefügt werden. In diesem Tutorial wird erörtert, wie das Volumen einer bestimmten Kapsel in Java mit verschiedenen Methoden berechnet wird. Kapselvolumenformel Die Formel für das Kapselvolumen lautet wie folgt: Kapselvolumen = zylindrisches Volumenvolumen Zwei Hemisphäre Volumen In, R: Der Radius der Hemisphäre. H: Die Höhe des Zylinders (ohne die Hemisphäre). Beispiel 1 eingeben Radius = 5 Einheiten Höhe = 10 Einheiten Ausgabe Volumen = 1570,8 Kubikeinheiten erklären Berechnen Sie das Volumen mithilfe der Formel: Volumen = π × R2 × H (4

PHP und Python haben jeweils ihre eigenen Vorteile, und die Wahl sollte auf Projektanforderungen beruhen. 1.PHP eignet sich für die Webentwicklung mit einfacher Syntax und hoher Ausführungseffizienz. 2. Python eignet sich für Datenwissenschaft und maschinelles Lernen mit präziser Syntax und reichhaltigen Bibliotheken.

PHP ist eine Skriptsprache, die auf der Serverseite weit verbreitet ist und insbesondere für die Webentwicklung geeignet ist. 1.PHP kann HTML einbetten, HTTP -Anforderungen und Antworten verarbeiten und eine Vielzahl von Datenbanken unterstützt. 2.PHP wird verwendet, um dynamische Webinhalte, Prozessformdaten, Zugriffsdatenbanken usw. mit starker Community -Unterstützung und Open -Source -Ressourcen zu generieren. 3. PHP ist eine interpretierte Sprache, und der Ausführungsprozess umfasst lexikalische Analyse, grammatikalische Analyse, Zusammenstellung und Ausführung. 4.PHP kann mit MySQL für erweiterte Anwendungen wie Benutzerregistrierungssysteme kombiniert werden. 5. Beim Debuggen von PHP können Sie Funktionen wie error_reporting () und var_dump () verwenden. 6. Optimieren Sie den PHP-Code, um Caching-Mechanismen zu verwenden, Datenbankabfragen zu optimieren und integrierte Funktionen zu verwenden. 7

Java ist eine beliebte Programmiersprache, die sowohl von Anfängern als auch von erfahrenen Entwicklern erlernt werden kann. Dieses Tutorial beginnt mit grundlegenden Konzepten und geht dann weiter zu fortgeschrittenen Themen. Nach der Installation des Java Development Kit können Sie das Programmieren üben, indem Sie ein einfaches „Hello, World!“-Programm erstellen. Nachdem Sie den Code verstanden haben, verwenden Sie die Eingabeaufforderung, um das Programm zu kompilieren und auszuführen. Auf der Konsole wird „Hello, World!“ ausgegeben. Mit dem Erlernen von Java beginnt Ihre Programmierreise, und wenn Sie Ihre Kenntnisse vertiefen, können Sie komplexere Anwendungen erstellen.
