问题出在“私有静态BufferedReader”这一行。
错误是“-未报告的异常java.io.FileNotFoundException;必须捕获或声明为抛出”。
这是我当前的代码:
import java.io.*;
import java.util.*;
public class PG2ERC
{
private static ArrayList<Integer> arl = new ArrayList<Integer>();
private static BufferedReader br = new BufferedReader(new FileReader("pageRefString.txt"));
public static void main(String[] args) throws IOException, FileNotFoundException
{
String [] arr;
int n1 = 3;
int n2 = 4;
int f;
int pf1 = 0;
int pf2 = 0;
arr = br.readLine().split(" ");
for(String s:arr)
{
f=Integer.parseInt(s);
if(arl.contains(f))
{
arl.remove(arl.indexOf(f));
arl.add(f);
}
else if(arl.size() < n1)
{
++pf1;
arl.add(f);
}
else
{
arl.remove(0);
arl.add(f);
++pf1;
}
f=Integer.parseInt(s);
if(arl.contains(f))
{
arl.remove(arl.indexOf(f));
arl.add(f);
}
else if(arl.size() < n2)
{
++pf2;
arl.add(f);
}
else
{
arl.remove(0);
arl.add(f);
++pf2;
}
try (Writer writer = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream("pg2out.txt"))))
{
writer.write(("Number of page faults is ") + pf1);
writer.write(("Number of page faults is ") + pf2);
}
}
}
}
最佳答案
问题更简单地显示为:
import java.io.*;
class Test {
private static Reader reader = new FileReader("foo.txt");
}
问题是您的类的静态初始化器可能引发异常。这与
main
方法完全分开。现在,根据您的情况,最简单的解决方案是将字段更改为局部变量:
// No need to declare FileNotFoundException - it's a subclass of IOException anyway
public static void main(String[] args) throws IOException
{
ArrayList<Integer> arl = new ArrayList<Integer>();
BufferedReader br = new BufferedReader(new FileReader("pageRefString.txt"));
... rest of method as before ...
}
到那时,可以引发异常的代码在声明可以引发这些异常的方法中,因此可以。
如果确实需要像这样初始化静态变量,则应在静态初始化程序块中进行初始化:
private static BufferedReader br;
static {
try {
br = new BufferedReader(new FileReader("pageRefString.txt"));
} catch (IOException e) {
// Go bang hard - RuntimeException isn't a checked exception
throw new RuntimeException(e);
}
}