- 1Java Exceptions
- 2Java Keywords
- 3Java abstract Keyword
- 4Java assert Keyword
- 5Java boolean Keyword
- 6Java break Keyword
- 7Java byte Keyword
- 8Java case Keyword
- 9Java catch Keyword
- 10Java char Keyword
- 11Java class Keyword
- 12Java const Keyword
- 13Java continue Keyword
- 14Java default Keyword
- 15Java do Keyword
- 16Java double Keyword
- 17Java else Keyword
- 18Java enum Keyword
- 19Java extends Keyword
- 20Java final Keyword
- 21Java finally Keyword
- 22Java float Keyword
- 23Java for Keyword
- 24Java goto Keyword
- 25Java if Keyword
- 26Java implements Keyword
- 27Java import Keyword
- 28Java instanceof Keyword
- 29Java int Keyword
- 30Java interface Keyword
- 31Java long Keyword
- 32Java native Keyword
- 33Java new Keyword
- 34Java null Keyword
- 35Java package Keyword
- 36Java private Keyword
- 37Java protected Keyword
- 38Java public Keyword
- 39Java return Keyword
- 40Java short Keyword
- 41Java static Keyword
- 42Java strictfp Keyword
- 43Java super Keyword
- 44Java switch Keyword
- 45Java synchronized Keyword
- 46Java this Keyword
- 47Java transient Keyword
- 48Java try Keyword
- 49Java void Keyword
- 50Java volatile Keyword
- 51Java while Keyword
- 52Java String Methods - Syntax and Description
- 53Java String
charAt()
method - 54Java String
codePointAt()
method - 55Java String
codePointBefore()
method - 56Java String
codePointCount()
method - 57Java String
compareTo()
method - 58Java String
compareToIgnoreCase()
method - 59Java String
concat()
method - 60Java String
contains()
method - 61Java String
contentEquals()
method - 62Java String
copyValueOf()
method - 63Java String
endsWith()
method - 64Java String
equals()
method - 65Java String
equalsIgnoreCase()
method - 66Java String
format()
method - 67Java String
getBytes()
method - 68Java String
getChars()
method - 69Java String
hashCode()
method - 70Java String
indexOf()
method - 71Java String
intern()
method - 72Java String
isEmpty()
method - 73Java String
join()
method - 74Java String
lastIndexOf()
method - 75Java String
length()
method - 76Java String
matches()
method - 77Java String
offsetByCodePoints()
method - 78Java String
regionMatches()
method - 79Java String
replace()
method - 80Java String
replaceAll()
method - 81Java String
replaceFirst()
method - 82Java String
split()
method - 83Java String
startsWith()
method - 84Java String
subSequence()
method - 85Java String
substring()
method - 86Java String
toCharArray()
method - 87Java String
toLowerCase()
method - 88Java String
toString()
method - 89Java String
toUpperCase()
method - 90Java String
trim()
method - 91Java String
valueOf()
method - 92Java ArrayList Methods - Complete Reference with Syntax and Description
- 93Java LinkedList Methods - Complete Reference with Syntax and Description
- 94Java HashMap Methods - Syntax and Descriptions
Java finally Keyword
Usage and Examples
finally
Keyword in Java
The finally
keyword in Java is a block used in exception handling that guarantees the execution of code regardless of whether an exception was thrown or caught. It's most commonly used to release resources such as closing files, database connections, or network sockets.
Why Use the finally
Block?
Imagine you're opening a file or a database connection. Whether your program succeeds or fails, you must ensure the resource is released properly. That’s where finally
comes in — it runs no matter what.
Syntax of try-catch-finally
try {
// Code that may throw an exception
} catch (ExceptionType e) {
// Exception handling
} finally {
// Code that will always execute
}
Example 1: Basic try-catch-finally Structure
public class FinallyExample {
public static void main(String[] args) {
try {
System.out.println("Inside try block");
int result = 10 / 2;
System.out.println("Result: " + result);
} catch (ArithmeticException e) {
System.out.println("Catch block: " + e.getMessage());
} finally {
System.out.println("Finally block always runs");
}
}
}
Inside try block
Result: 5
Finally block always runs
Explanation
Since no exception is thrown, the catch
block is skipped. But the finally
block runs anyway.
Example 2: When Exception Is Thrown
public class FinallyExample {
public static void main(String[] args) {
try {
System.out.println("Inside try block");
int result = 10 / 0; // Throws ArithmeticException
System.out.println("Result: " + result);
} catch (ArithmeticException e) {
System.out.println("Catch block: " + e.getMessage());
} finally {
System.out.println("Finally block always runs");
}
}
}
Inside try block
Catch block: / by zero
Finally block always runs
Even When No Catch Block Exists
The finally
block can be used with try
even if catch
is absent. This is useful when you don't want to handle exceptions but still need cleanup.
public class FinallyOnlyExample {
public static void main(String[] args) {
try {
System.out.println("Trying risky operation...");
int result = 10 / 0;
} finally {
System.out.println("Cleanup happens here.");
}
}
}
Trying risky operation...
Cleanup happens here.
Exception in thread "main" java.lang.ArithmeticException: / by zero
Even When return
Is Called
What if we return from inside a try
? Will finally
still run? Absolutely yes.
public class ReturnWithFinally {
public static void main(String[] args) {
System.out.println(testReturn());
}
static String testReturn() {
try {
return "Returning from try";
} finally {
System.out.println("Finally still executes before return");
}
}
}
Finally still executes before return
Returning from try
Key Points to Remember
finally
always runs, whether or not an exception is thrown or caught.- It runs even if there is a
return
statement in thetry
orcatch
block. - Use it for cleanup operations like closing file streams or network connections.
- Even when an exception is unhandled and the program crashes, the
finally
block still executes.
Use Case: Closing a File
import java.io.*;
public class FileHandling {
public static void main(String[] args) {
BufferedReader reader = null;
try {
reader = new BufferedReader(new FileReader("file.txt"));
System.out.println("First line: " + reader.readLine());
} catch (IOException e) {
System.out.println("Something went wrong: " + e.getMessage());
} finally {
try {
if (reader != null) reader.close();
System.out.println("Reader closed in finally block");
} catch (IOException ex) {
System.out.println("Failed to close reader");
}
}
}
}