gpt4 book ai didi

java - 流对象初始化

转载 作者:行者123 更新时间:2023-12-04 05:24:39 24 4
gpt4 key购买 nike

现在我在第 30 和 38 行收到编译时错误,表明 'fin' 可能尚未初始化。但这样写是完美的

 import java.io.*;
class CopyFile {
public static void main(String args[]) throws IOException {
int i;
FileInputStream fin;//can't it be done like this?
FileOutputStream fout= new FileOutputStream(args[1]);

try{
//open input file
try{
fin = new FileInputStream(args[0]);
}
catch(FileNotFoundException e){
System.out.println("Input file Not Found");
return;
}
//open output file
try{
fout = new FileOutputStream(args[1]);
}
catch(FileNotFoundException e){
System.out.println("Error Opening File");
}
}
catch(ArrayIndexOutOfBoundsException e){
System.out.println("usage: Copyfile From to");
}
try{
do{
i = fin.read();
if(i!= -1)
fout.write(i);
}while(i != -1);
}
catch(IOException e){
System.out.println("file error");
}
fin.close();
fout.close();
}
}

我见过很多次这样初始化。我认为这是由于 try 块。

由于在 try 块中,它可能会错过初始化并因此出现错误?

最佳答案

问题是您没有初始化 FileInputStream fin根本。你的代码在编译器看来是这样的:

FileInputStream fin;
try {
fin = ...
//more code goes here...
} catch (...) {
//exception handling...
} finally {
fin.close(); //fin is not even null for the compiler
}

为了使代码工作,至少用 null 初始化它。值并检查是否 fin != null使用前 close方法。
FileInputStream fin = null;
try {
fin = ...
//more code goes here...
} catch (...) {
//exception handling...
} finally {
if (fin != null) {
fin.close(); //fin is not null, at least the JVM could close it
}
}

更多信息:
  • Java: Declaring Variables
  • Uninitialized variables and members in Java
  • 关于java - 流对象初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13328536/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com