[Java] Szenen, die nicht neu zugewiesen werden können (im Wesentlichen endgültig)

Behandlung mehrerer Ausnahmen

e ist effektiv endgültig.

    public static void main(String[] args) throws IOException{
        try{
            throw new IOException();
        }catch (RuntimeException | IOException e){
            e = new RuntimeException();  // Cannot assign a value to final variable 'e'
            throw e;
        }
    }

Wenn Sie jedoch eine einzelne Ausnahme anstelle einer Mehrfachausnahme abfangen, können Sie die abgefangene Ausnahme und ihre Unterklassen neu zuweisen.


static class FooException extends Exception{}
static class BarException extends FooException{}

public static void main(String[] args) throws FooException{
        try{
            throw new FooException();
        }catch (FooException fe){
            fe = new FooException();
            fe = new BarException();
            throw fe;
        }
    }

Definieren Sie den Lambda-Ausdruck

Im folgenden Beispiel ist die im Lambda-Ausdruck verwendete lokale Variable effektiv endgültig und beim Neuzuweisen tritt ein Kompilierungsfehler auf.

public interface Greeting {
    void sayHi(String name);
}

String name = "Ken";
Greeting g = n -> System.out.println("Hi, " + name);
name = "Taro"; //★ Fehler hier kompilieren
g.sayHi(name);

try-with-resources

JDBC-Beispiel, das praktisch nicht endgültig ist, aber nicht neu zugewiesen werden kann

        import java.sql.Connection;
        import java.sql.DriverManager;
        import java.sql.SQLException;

        Connection connection = null;
        try (connection = DriverManager.getConnection("url") { // unknown class "connection" 

        } catch (SQLException e) {
            e.printStackTrace();
        }

Übrigens ist es mit einem normalen Try-Catch möglich

        try {
            connection = DriverManager.getConnection("url");
        } catch (SQLException e) {
            e.printStackTrace();
        }

Recommended Posts

[Java] Szenen, die nicht neu zugewiesen werden können (im Wesentlichen endgültig)
Java Stream kann nicht wiederverwendet werden.
Java kann unter Ubuntu 13.04 nicht installiert werden
Beachten Sie, dass Systemeigenschaften einschließlich JAXBContext in Java11 nicht verwendet werden können
Java-Code, der nicht von Kotlin verwendet werden kann (für interne Lernsitzungen)
Überprüfen Sie mit Java / Kotlin, ob Dateien unter Windows nicht in die Benutzerkontensteuerung geschrieben werden können
[Lösung] Java kann unter Windows 10 + ATOK 2017 nicht installiert werden
Warum der Klassenvergleich vom Typ Java String (==) nicht verwendet werden kann
Die geänderte Funktion von kotlin kann nicht von Java aus aufgerufen werden.
Java Final Modifier
Bitte beachten Sie, dass Spring Boot + Tomcat 8.5.8 nicht verwendet werden kann!
Tomcat kann aufgrund einer Änderung der Java-Version nicht gestartet werden
Schreiben einer Klasse, die in Java bestellt werden kann Ein kleines Standard-Memo
[Java] Es scheint, dass Sie nicht "0 <hoge <10" in den bedingten Ausdruck der "if" -Anweisung schreiben können.