In this java code
import java.io.IOException; public class Copy { public static void main(String[] args) { if (args.length != 2) { System.err.println("usage: java Copy srcFile dstFile"); return; } int fileHandleSrc = 0; int fileHandleDst = 1; try { fileHandleSrc = open(args[0]); fileHandleDst = create(args[1]); copy(fileHandleSrc, fileHandleDst); } catch (IOException ioe) { System.err.println("I/O error: " + ioe.getMessage()); return; } finally { close(fileHandleSrc); close(fileHandleDst); } } static int open(String filename) { return 1; // Assume that filename is mapped to integer. } static int create(String filename) { return 2; // Assume that filename is mapped to integer. } static void close(int fileHandle) { System.out.println("closing file: " + fileHandle); } static void copy(int fileHandleSrc, int fileHandleDst) throws IOException { System.out.println("copying file " + fileHandleSrc + " to file " + fileHandleDst); if (Math.random() < 0.5) throw new IOException("unable to copy file"); System.out.println("After exception"); } }
the conclusion that I expect
copying file 1 to file 2 I/O error: unable to copy file closing file: 1 closing file: 2
However, sometimes I get this expected result, and in other cases I get the following output:
copying file 1 to file 2 closing file: 1 closing file: 2 I/O error: unable to copy file
and sometimes even this conclusion:
I/O error: unable to copy file copying file 1 to file 2 closing file: 1 closing file: 2
and I get the first, second or third output, it seems to happen by chance during each performance. I found THIS POST , which seems to be talking about the same problem, but I still donβt understand why I sometimes get output 1, 2 or 3. If I understand this code correctly then output 1 should be the one what i get every time (exception occurs). How can I guarantee that I will get pin 1 in sequence or can I say when I get output 1 or when I get output 2 or 3?
java exception
user13267
source share