Heim Java JavaBase Einführung in mehrere häufige Fehler in Java

Einführung in mehrere häufige Fehler in Java

Dec 23, 2019 pm 03:43 PM
java

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;
    }
  }
}
Nach dem Login kopieren

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(表达式;表达式;表达式){
        循环体
 }
Nach dem Login kopieren

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(条件表达式){
  语句
 };
Nach dem Login kopieren

③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(条件表达式);
Nach dem Login kopieren

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");
Nach dem Login kopieren

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);
Nach dem Login kopieren

Dieser Code enthält jedoch einen zusätzlichen String, der nicht unbedingt erforderlich ist. Der bessere Code ist:

String s = "Text here";
Nach dem Login kopieren

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;
  }
  }
Nach dem Login kopieren

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;
Nach dem Login kopieren

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);
  }
Nach dem Login kopieren

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();
  }
  }
Nach dem Login kopieren

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;
  }
Nach dem Login kopieren

Ä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
  }
Nach dem Login kopieren

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();
  }
  }
Nach dem Login kopieren

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!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

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

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Smith-Nummer in Java Smith-Nummer in Java Aug 30, 2024 pm 04:28 PM

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

Fragen zum Java Spring-Interview Fragen zum Java Spring-Interview Aug 30, 2024 pm 04:29 PM

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.

Brechen oder aus Java 8 Stream foreach zurückkehren? Brechen oder aus Java 8 Stream foreach zurückkehren? Feb 07, 2025 pm 12:09 PM

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

Zeitstempel für Datum in Java Zeitstempel für Datum in Java Aug 30, 2024 pm 04:28 PM

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.

Java -Programm, um das Kapselvolumen zu finden Java -Programm, um das Kapselvolumen zu finden Feb 07, 2025 am 11:37 AM

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 vs. Python: Verständnis der Unterschiede PHP vs. Python: Verständnis der Unterschiede Apr 11, 2025 am 12:15 AM

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: Eine Schlüsselsprache für die Webentwicklung PHP: Eine Schlüsselsprache für die Webentwicklung Apr 13, 2025 am 12:08 AM

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

Gestalten Sie die Zukunft: Java-Programmierung für absolute Anfänger Gestalten Sie die Zukunft: Java-Programmierung für absolute Anfänger Oct 13, 2024 pm 01:32 PM

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.

See all articles