当前位置: 首页 > 知识库问答 >
问题:

如何在try/catch块之前初始化InputStream

艾哲
2023-03-14
public static void main(String[] args){

// Get file string until valid input is entered.
System.out.println("Enter file name.\n Enter ';' to exit.");
String fileName = sc.nextLine();
boolean fileLoop = true;
InputStream inFile;

while (fileLoop){
    try{
        inFile = new FileInputStream(fileName);
        fileLoop = false;
    } catch (FileNotFoundException e) {
        System.out.println("That file was not found.\n Please re enter file name.\n Enter ';' to exit.");
        fileName = sc.nextLine();
        if (fileName.equals(";")){
            return;
        }
   } 

}

// ****** This is where the error is. It says inFile may not have been initalized. ***
exampleMethod(inFile);
}

public static void exampleMethod(InputStream inFile){

    // Do stuff with the file.
}
InputStream inFile = new FileInptStream();
// This yeilds an eror because there are no arguments.
InputStream inFile = new InputStream();
// This doesn't work because InputStream is abstract.

如何确保在输入有效输入之前,仍然允许循环,同时初始化此InputStream?

谢谢你

共有1个答案

卢普松
2023-03-14

要解决此问题,请更改这一行代码:

InputStream inFile;

对此:

InputStream inFile = null;

您必须这样做的原因是因为Java阻止您使用未初始化的局部变量。使用一个未初始化的变量通常是一个疏忽,因此Java阻止在这种情况下允许使用它。正如@immibis所指出的,这个变量总是会被初始化的,但是编译器不够聪明,无法在这种情况下找到它。

 类似资料:
  • 问题内容: 我最初从大学开始编程,然后学习了vb.net。现在,我决定转向Java并进行一些查询。在vb中,try catch语句的布局如下 但是在Java网站(https://docs.oracle.com/javase/tutorial/essential/exceptions/putItTogether.html)中,我发现在Java中,您使用了两个陷阱,如下所示: 我希望有人能够解释为什么

  • 问题内容: 根据Java语言规范的第§14.20.2节 通过首先执行try块来执行带有finally块的try语句。然后有一个选择: 如果try块的执行正常完成,则执行finally块,然后可以选择: 如果finally块正常完成,则try语句正常完成。 如果finally块由于原因S突然完成,则try语句由于原因S突然完成 如果我正确地解释了它,那么在执行try块之后最终会被调用,但是所有这些如

  • 问题内容: 我知道这样做的对策。我想知道是否有一种不错且紧凑的方法来做到这一点。 问题答案: 图例-您的答案可能会有所改善;因为如果失败次数过多,就会吞下异常。好多了:

  • 问题内容: 好的,这可能是一个非常愚蠢的问题,但是我发现关于此的PHP文档以及一些Internet搜索并没有使我对此有所任何了解。 什么时候应该使用try-catch块来改进我的应用程序? 我读过有人说我们应该仅使用try- catch块来防止致命错误。我读过别人的话说,我们应该只在意外错误上使用它(等什么?意外?如果它们是意外错误,如何使用try- catch防止它们出现?我应该将所有应用程序代

  • 我有java中的代码片段,比如 注意:我们可能会将返回值发送给fonten,并调用另一个APi调用finishProcess()。但事实并非如此

  • 问题内容: 我正在审查一些新代码。该程序仅具有try和finally块。由于不包含catch块,如果try块遇到异常或任何可抛出的异常,它将如何工作?它是否直接进入了finally块? 问题答案: 如果try块中的任何代码都可以引发已检查的异常,则它必须出现在方法签名的throws子句中。如果引发了未经检查的异常,则该异常会冒泡退出方法。 无论是否引发异常,都始终执行finally块。