Java >> Java Tutorial >  >> Java

Beste Codierungspraktiken für Java

Durch die Verwendung von Best Practices, gängigen Sprachausdrücken und guten Programmierstilen können wir zuverlässige Software erstellen, die gut geschrieben und einfach zu warten ist. Heutzutage entwickeln Teams mehr denn je Enterprise-Java-Anwendungen, die zuverlässig, skalierbar und wartbar sind. Um so effizient wie möglich zu arbeiten, müssen Teams bewährte Designstandards und gute Codierungsstandards übernehmen. Wenn Sie diesen Beitrag als Richtlinie zum Schreiben von hochwertigem Java-Code verwenden, werden Sie und Ihre Organisation auf dem richtigen Weg sein.

Beginnen Sie mit einer Reihe von Richtlinien

Fangen wir mit Folgendem an:

  • Lesbarkeit – Machen Sie die Programme so lesbar wie möglich, indem Sie die richtigen Abstände, Tabulatoren, Einrückungen, Namenskonventionen usw. erzwingen.
  • Einfachheit – Lassen Sie Ihr von der U.S. Navy in den 1960er Jahren geprägtes Leitbild (KISS ) – Keep it Simple, Dumm oder Keep is Stupid Simple . Einfachheit sollte das Hauptziel beim Design sein und unnötige Komplexität sollte vermieden werden.
  • Übereinkommen – Nutzen Sie so weit wie möglich Standardkonventionen und bewährte Praktiken. Variablen und Funktionen werden in Großbuchstaben geschrieben, Klassen in Großbuchstaben und Konstanten in Großbuchstaben.
  • public void Funktionsname
    KONSTANTE_VARIABLE
    öffentliche Klasse Klassenname {…}

    Quellcode-Richtlinien

    Kommentare

  • Doc-Kommentare — Quelldateien (*.java) sollten mit Dokumentationskommentaren im C-Stil beginnen, die den Titel, die Version und das Datum MM/TT/JJJJ enthalten Format- und Copyright-Informationen. Best Practices schreiben vor, dass wir unseren Quellcode so weit wie möglich dokumentieren.
  • /**
    * Copyright (c) 2005, 2006, avaldes.com   All rights reserved.
    * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    * 
    * This module defines the Customer model and all of its
    * data elements.  
    * 
    * @author Amaury Valdes
    * @version 1.0
    * @since 09/25/2005
    */
  • Zeilenkommentare — Wenn Sie eine einzelne Codezeile kommentieren müssen, können Sie die Notation mit doppeltem Schrägstrich // verwenden. Dadurch wird alles rechts vom doppelten Schrägstrich ignoriert.
  • // Print Sample Message Below
    System.out.println("Sample Message !!!");
    

  • Javadoc verwenden — Größere Projekte sollten Javadoc zur Dokumentation verwenden. Das Javadoc command parst Quellcodedeklarationen und Dokumentationskommentare und erzeugt eine Reihe von HTML-Seiten, die alle öffentlichen und geschützten Klassen, Schnittstellen, Konstruktoren, Methoden und Felder beschreiben.
  • Einzug

  • Einzüge — Vier Leerzeichen sollten die Standardeinheit für den Einzug sein. Ihr Code sollte in der gesamten Codebasis konsistent sein. Stellen Sie sicher, dass Sie Tabulatoren in Leerzeichen umwandeln, indem Sie die Funktionen Ihrer IDE verwenden, um die Einrückung zu unterstützen.
  • Blockeinrückung (2 Leerzeichen) — Jedes Mal, wenn ein neuer Block geöffnet wird, rücken wir um zwei Leerzeichen ein. Wenn der Block endet, kehren wir sofort zur vorherigen Einrückungsebene zurück. Mit dieser Methodik lassen sich Codeblöcke leicht identifizieren und Ihr Code wird klarer und prägnanter.
  • public void MyMethod() {
      if (condition1()) {
        try {
          doSomethingCondition1();
        } catch (Exception e) {
          showException();
        }
      } else if (condition2()) {
        doSomethingCondition2();
      } else {
        doFallback();
      }
    }
    

    Leerraum

  • Leerzeilen — Verwenden Sie Leerzeilen, um die Lesbarkeit des Codes zu verbessern.
  • Zwischen Paket- und Importanweisungen
  • Zwischen Variablen und erster Anweisung
  • Methoden sollten Leerzeilen vorangestellt sein.
  • Vor jedem diskreten logischen Codeabschnitt, um die Lesbarkeit zu verbessern
  • package com.avaldes.tutorial;
    
    import java.text.DateFormat;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.stereotype.Controller;
    
    @Controller
    public class RestController {
    
      private static final Logger logger = LoggerFactory
                                   .getLogger(RestController.class);
    
      @Autowired
      private IssuerRepository issuerRepository;
    
      @RequestMapping(value="/issuers", method=RequestMethod.GET)
      @ResponseBody
      public multipleIssuerResponse getAllIssuers() {
          ...
      }
    }
    
  • Leerzeichen — Leerzeichen sollten bei Bedarf (nach Schlüsselwörtern) und zur besseren Lesbarkeit verwendet werden
  • Keywords gefolgt von einer Klammer sollten durch ein Leerzeichen getrennt werden (if, for, while, switch, …)
  • Leerzeichen nach dem Komma für jeden Parameter in der Liste
  • Leerzeichen nach Zuweisungen und anderen Operatoren
  • Leerzeichen nach Casts
  • // Spaces for readability
    String[] names = {"Amaury", "John", "James", "Marie"};
    //Spaces required after keywords like 'for' loops
    for (String name : names) {
      System.out.println("value is " + name);
    }
    // Spaces after casts - assume Ferrari extends Car
    Car c = new Car();
    Car myCar;
    Ferrari f = new Ferrari ();
    myCar = (Ferrari) c; // Explicit Cast car to Ferrari
    

    Klammern

  • Klammern — Klammern sollten mit if verwendet werden , sonst , für , tun und während Anweisungen auch für einzelne Anweisungen. Verwenden Sie die Klammern im Stil von Kernighan und Ritchie (K &R)
  • Keine Zeilenumbrüche vor der öffnenden geschweiften Klammer
  • Zeilenumbrüche nach der öffnenden geschweiften Klammer
  • Zeilenumbruch vor der schließenden Klammer
  • Linke Pause nach der schließenden geschweiften Klammer
  • public void MyMethod() {
      if (condition1()) {
        try {
          doSomethingCondition1();
        } catch (Exception e) {
          showException();
        }
      } else if (condition2()) {
        doSomethingCondition2();
      } else {
        doFallback();
      }
    }
    

    MACH DAS NICHT

    Bitte stellen Sie sicher, dass Ausnahmen immer im Catch angezeigt werden blockieren.

    try {
        doSomethingCondition1();
    } catch (Exception e) {}
    

    if-Anweisungen

  • Das wenn Anweisung und bedingter Ausdruck werden in derselben Zeile platziert und geschweifte Klammern werden verwendet, um den Gültigkeitsbereich zu definieren. Auf das Schlüsselwort „if“ folgt ein Leerzeichen und die Bedingung wird in Klammern gesetzt, gefolgt von einem weiteren Leerzeichen und der öffnenden geschweiften Klammer. Die Aussage oder Aussagen werden in einzelnen Zeilen darunter platziert, wobei die richtige Einrückung verwendet wird. Die abschließende geschweifte Klammer beginnt in einer neuen Zeile mit der gleichen Einrückung wie die öffnende geschweifte Klammer für diese „if“-Anweisung.
  • if (condition) {
      statement1
    } else {
      statement2
    }
    

    für Aussage

  • Das für -Anweisung bietet eine schnelle und effektive Möglichkeit, über einen Wertebereich zu iterieren. Sie wird von Entwicklern oft als for-Schleife bezeichnet.
  • for (initialization; condition; increment/decrement) {
      statement
    }
    
  • Im nächsten Beispiel wird die Variable „i“ sowohl instanziiert als auch auf eins (1) initialisiert. Es ist wichtig zu beachten, dass der Gültigkeitsbereich dieser Variablen „i“ auf die öffnende geschweifte Klammer und die abschließende geschweifte Klammer beschränkt ist.
  • for (int i=1; i<=10; i++) {
      statement
    }
    

    Endlosschleifen

    // Infinite For Loop
    for (;;) {
      statement
    }
    
    // Infinite While Loop
    while (true) {
      statement
    }
    
    // Infinite Do-While Loop
    do {
      statement
    } while (true);
    

    while-Anweisungen

  • Die während Die Anweisung folgt demselben Format wie das Konstrukt „if“. Auf das Schlüsselwort „while“ folgt ein Leerzeichen und die Bedingung wird in Klammern gesetzt, gefolgt von einem weiteren Leerzeichen und der öffnenden geschweiften Klammer. Die Aussage oder Aussagen werden in einzelnen Zeilen darunter platziert, wobei die richtige Einrückung verwendet wird. Die abschließende geschweifte Klammer beginnt in einer neuen Zeile mit der gleichen Einrückung wie die öffnende geschweifte Klammer für diese „while“-Anweisung.
  • while (condition) {
      statement
    }
    

    do-while-Anweisungen

  • Das do-while Die Anweisung folgt demselben Format wie das Konstrukt „while“. Der einzige Vorbehalt ist, dass die Bedingung wie unten gezeigt auf die schließende geschweifte Klammer folgt.

    HINWEIS: Die do-while-Schleife sollten Sie nur dann verwenden, wenn die Ausführung der Anweisungen mindestens einmal stattfinden soll, ansonsten ist die while-Schleife immer die bessere Wahl.
  • do {
      statement
    } while (condition);
    

    switch-Anweisungen

  • Der Schalter -Anweisung können Sie mehrere mögliche Ausführungspfade haben. Die switch-Anweisung funktioniert mit mehreren primitiven Typen (byte, short, char und int). Außerdem können Sie mit Enum-Typen, String-, Character-, Byte-, Short- und Integer-Wrapper-Klassen arbeiten.
  • switch (condition) {
    case A:
        statements;
        break;
    case B:
        statements;
        break;
    case C:
        statements;
        // missing break -- will run case C / case D statements
    case D:
        statements;
        break;
    default:
        statements;
        break;
    }
    

    try-catch-finally-Anweisungen

  • Die try-catch-Anweisungen werden verwendet, um Ausnahmen in Ihrem Java-Code abzufangen. Sie können mehrere Ausnahmen in einem Try-Catch-Codeblock abfangen. Jeder nachfolgende catch-Block definiert einen anderen Ausnahmetyp, der behandelt wird. Der Ausnahmetyp muss der Name der Klasse sein, die von der Throwable-Klasse erbt.
  • try {
       doSomeIOProcessing();
    } catch (IOException ex1) {
       logger.error("IOException found: {}", ex1);
       throw ex;
    } catch (SQLException ex2) {
       logger.error("SQLException found: {}", ex2);
       throw ex;
    } catch (Exception ex3) {
       logger.error("Exception found: {}", ex3);
       throw ex;
    }
    

    Java 7 und höher

    Der Fang -Block kann jetzt mehrere Ausnahmen in einem einzigen Catch-Block behandeln, die durch ein Pipe-Symbol (|) getrennt sind.

    try {
        doSomeIOProcessing();
    } catch (IOException|SQLException ex) {
        logger.log(ex);
        throw ex;
    }
    

    Arrays

    Java-Arrays sind Container, die eine feste Anzahl homogener Elemente enthalten. Mit anderen Worten, alle Datenelemente im Array sind vom gleichen Datentyp. Wir definieren die Länge des Arrays, wenn es erstellt wird. Jedes der Elemente in einem Array wird als Element bezeichnet. Auf diese Elemente wird jeweils über ihren numerischen Index zugegriffen beginnend mit Index =0.

    Angenommen, wir haben ein Array mit 10 Elementen, wir hätten einen Indexbereich von 0 bis 9.

    Array in Java deklarieren

    Das Deklarieren von Java-Arrays folgt denselben Konventionen wie das Deklarieren von Variablen anderer Typen. Wir schreiben das Array als type[] ; Die Klammern [] werden verwendet, um anzuzeigen, dass die Variablen ein Array enthalten. Darauf folgt der Name des Arrays , wie auch immer Sie es nennen möchten, vorausgesetzt, Sie folgen den Standardnamenskonventionen. Weitere Informationen zu Namenskonventionen für Variablen finden Sie in einem früheren Beitrag mit dem Titel „Java-Tutorial – Sprachsyntax und -struktur“ .

    Das Deklarieren eines Arrays in Java hat zwei Formate; die Entwickler haben die Möglichkeit, eine der folgenden Syntaxen zu verwenden:

    Standardkonvention

    array_type[] array_name;

    <br>
    int[] arrayOfInts;      // array of int primitives<br>
    long[] nationalDebt;    // array of long primitives<br>
    boolean[] isActive;     // array of boolean primitives<br>
    char[] arrayOfChars;    // array of char primitives<br>
    String[] arrayOfString; // array of String objects<br>
    

    oder

    Nicht standardmäßige Konvention

    array_type array_name[];

    <br>
    short gamesPlayed[];  // array of short primitives<br>
    

    Wie Sie an den obigen Beispielen sehen können, erleichtert die Verwendung der Standardkonvention die Identifizierung des Arrays eines bestimmten Typs, wenn die Klammern neben der Typzuweisung stehen.

    An dieser Stelle werden Sie feststellen, dass die Array-Größe nicht definiert wurde. Das bedeutet, dass das Array array_name kann beliebig lang belegt werden. Dies wird im nächsten Abschnitt kurz erklärt.

    Instanziieren eines Arrays in Java

    Als wir das Array zuvor deklariert haben, haben wir das Array tatsächlich nicht erstellt. Wir haben den Java-Compiler nur angewiesen, dass die von uns deklarierte Variable ein Array eines bestimmten Typs enthalten wird. Das Instanziieren eines Arrays geschieht, wenn wir new verwenden Betreiber.

    neuer Typ[Größe];

    <br>
    int[] arrayOfInts;<br>
    char[] arrayOfChars;<br>
    String[] arrayOfString;</p>
    <p>arrayOfInts = new int[20];<br>
    arrayOfChars = new char[100];<br>
    arrayOfString = new String[100];</p>
    <p>arrayOfString[0] = "Amaury Valdes";<br>
    arrayOfString[1] = "Stacy Wilder";<br>
    arrayOfString[2] = "Jane Hoffman";<br>
    ...<br>
    arrayOfString[99] = "Bill Bradley";<br>
    

    In diesem Beispiel erstellen wir drei separate Arrays. Das erste Beispiel erstellt ein Array von int 20-Primitiven. Diese Primitive werden alle mit dem Standardwert 0 erstellt (für int). Das zweite Array wird mit einer Größe von 100 erstellt und standardmäßig auf ‘\u0000’ gesetzt (für Zeichen). Das letzte Array vom Typ String wird mit einer Größe von 100 erstellt und standardmäßig auf null gesetzt (für String).

    Wir referenzieren Array-Elemente, indem wir einen Index verwenden . Bitte beachten Sie, dass für Arrays der Größe n , liegen die gültigen Indizes zwischen 0 und n-1 .

    Wir können Arrays in einer Zeile abwechselnd deklarieren und instanziieren (erzeugen).

    <br>
    int[] arrayOfInts = new int[20];<br>
    char[] arrayOfChars = new char[100];<br>
    String[] arrayOfString = new String[100];<br>
    

    Bitte beachten

    Seien Sie vorsichtig, wenn Sie Arrays mit dem Index referenzieren wie die Verwendung eines Negativ Zahl oder eine Zahl größer als die Arraygröße wird eine java.lang.ArrayIndexOutOfBoundsException generieren .

    Negative Array-Größenausnahme

    Die java.lang.NegativeArraySizeException ist eine Ausnahme, die Sie selten sehen werden, da sie nur auftritt, wenn Sie versehentlich ein Array mit einer Arraygröße von negativ instanziieren Nummer.

    Dies kann beispielsweise vorkommen, wenn der Entwickler die Größe basierend auf einer Computerberechnung zugewiesen hat und der Wert irgendwie negativ wurde.

    Das ist es!

    Ich hoffe, Ihnen hat dieser Beitrag gefallen. Es hat auf jeden Fall viel Spaß gemacht, es für Sie zusammenzustellen. Bitte teilen Sie weiterhin die Liebe und liken Sie uns, damit wir Ihnen weiterhin qualitativ hochwertige Posts und Tutorials bieten können. Viel Spaß beim Programmieren!!!

    Core Java Related Tutorials

    • Base64-Codierungs- und -Decodierungsbeispiele in Java 8
      In diesem Tutorial werden wir besprechen, wie man Base64 mit Java 8 kodiert und dekodiert, das jetzt endlich native Base64-Unterstützung hat.
    • Base64-Kodierungs- und Dekodierungsbeispiele in Java mit Google Guava
      In diesem Tutorial wird das Codieren und Decodieren mit Base64 unter Verwendung der Guava Project Open Source-Bibliothek von Google vorgestellt.
    • Base64-Kodierungs- und Dekodierungsbeispiele in Java mit Apache Commons
      In diesem Tutorial werden Beispiele für die Base64-Codierung und -Decodierung unter Verwendung der Apache Commons Codec-Bibliothek vorgestellt.
    • Benutzerdefinierte Zahlenformatierung in Java
      In diesem Beispiel zeigen wir Ihnen, wie Sie die Klassen NumberFormat und DecimalFormat verwenden, um Zahlen mit speziellen Mustern zu formatieren.
    • Benutzerdefinierte Datumsformatierung in Java
      In diesem Beispiel zeigen wir Ihnen, wie Sie die SimpleDateFormat-Klasse verwenden, um Date-Objekte mit speziellen Mustern zu formatieren, um sie besser an die Anforderungen der Anwendung anzupassen.

    Java-Tag