In a hypothetical situation I have a class like this:
import java.io.File;
import java.util.Scanner;
class X
{
static Scanner scanner;
static
{
scanner = new Scanner(new File("X.txt"));
}
}
When compiling, I get
unreported exeption java.io.FileNotFoundException; must be caught or declared to be thrown
To fix this, I can put scanner = new... line in a try/catch statement:
static
{
try
{
scanner = new Scanner(new File("X.txt"));
}
catch(Exception e)
{
e.printStackTrace();
}
}
However, is there any way I can do something like:
static throws java.io.FileNotFoundException
{
scanner = new Scanner(new File("X.txt"));
}
This is a hypothetical situation. Please don't say "well why would you want to do that?" or "Here's a better way to make a Scanner!"
解决方案
It is a compile-time error if a class variable initializer (§8.3.2) or static initializer (§8.7) of a named class or interface can throw a checked exception class.
For completeness, an unchecked exception is defined in JLS §11.1.1:
RuntimeException and all its subclasses are, collectively, the run-time exception classes.
The unchecked exception classes are the run-time exception classes and the error classes.
This is the only type of exception that can be thrown from a static initializer.