java - 我的 try 语句之后的所有内容都必须包含在该 try 语句中才能访问其中的变量吗?

标签 java exception exception-handling

我正在学习 java,我发现我不喜欢的一件事通常是当我有这样的代码时:

import java.util.*;
import java.io.*;

public class GraphProblem
{
    public static void main(String[] args)
    {
        if (args.length < 2)
        {
            System.out.println("Error: Please specify a graph file!");
            return;
        }


        FileReader in = new FileReader(args[1]);
        Scanner input = new Scanner(in);

        int size = input.nextInt();
        WeightedGraph graph = new WeightedGraph(size);

        for(int i = 0; i < size; i++)
        {
            graph.setLabel(i,Character.toString((char)('A' + i)));
        }

        for(int i = 0; i < size; i++)
        {
            for(int j = 0; j < size; j++)
            {
                graph.addEdge(i, j, input.nextInt());
            }
        }

        // .. lots more code

    }
}

我的 FileReader 有一个未捕获的异常。

因此,我必须将其包装在 try-catch 中以捕获该特定异常。我的问题是 try { } 是否必须在我的方法中包含之后的所有内容,以便使用我的 FileReader(输入)或我的 Scanner(输入)?

如果我没有将整个程序的其余部分包装在那个 try 语句中,那么它之外的任何东西都无法访问 in/input,因为它可能没有被初始化或者已经在它的范围之外被初始化。所以我不能将 try-catch 隔离开来,只说初始化 FileReader 的部分,然后立即关闭 try 语句。

那么,让 try 语句包装将要访问其中初始化的变量的所有代码部分是“最佳实践”吗?

谢谢!

最佳答案

如果您愿意在 FileReader 构造函数之后包装代码,您可以在 try/catch block 之外声明 FileReader,如下所示:

FileReader fr = null;
try
{
    fr = new FileReader(args[1]);
}
catch (IOException e)
{
    // handle
}
// code that uses fr

这是一个合理的设计,我经常使用它。确保在以下代码中正确处理 fr 为 null 的可能性(即构造函数抛出异常)。

关于java - 我的 try 语句之后的所有内容都必须包含在该 try 语句中才能访问其中的变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2746098/

相关文章:

java - Android InputStream 无法接收来自蓝牙 HC-05 的完整消息

java - 遍历 ArrayList - 不打印任何内容

java - 编写库(不是应用程序)时如何处理异常 - Java

c# - 如何处理空套接字缓冲区

java - 如何在 Java 中使用 Button Group Swing 控件?

java - 如何获取RGB颜色的名称?

language-agnostic - 快速故障和故障安全异常处理原则是否不兼容?

java - RestEasy - 无法找到 MessageBodyReader?

Python - 检查当前是否正在处理异常

error-handling - 管道和错误处理