// immutable // constant // final final int i = 4; i = 5; // literal (static) final String s = "abc"; s.setCharAt(1, 'x'); // nonexistant for String MyObj myObj = new MyObj(); myObj.manipulate(); // valid myObj = new MyObj(); // valid final MyObj myObj2 = new MyObj(); myObj2.manipulate(); // still valid myObj2 = new MyObj(); // INvalid e.g. in C++ : int const * const int* int& enum MyEnum { E1(), E2("abc"), E3(4); int field1; String field1; MyEnum() { ... } MyEnum(String s) { ... } MyEnum(int i) { ... } } MyEnum enumInst = null; javac X.java java X java X.java void g() { try { while (true) { f(); } } catch (Error e) { System.out.println("BIIIIIIG PROBLEM"); } } void f() { FileReader fr = null; try { fr = new FileReader(...); // use it } finally { // close it if (fr != null) { fr.close(); } } } // try-with-resources void f() { try ( FileReader fr = new FileReader(...); FileReader fr2 = new FileReader(...); FileReader fr3 = new FileReader(...); Scanner fr3 = new Scanner(...); ) { // use it } } class MyResource implements AutoCloseable { public void close() extends Exception { } }