[英]Program reports exceptions when not using try and catch
我对Java还是很陌生,并且正在从事加密技术方面的学校作业。 当我寻找从文件中读取的方法时,我看到许多方法都有try and catch块。 我对它们的使用不是很熟悉,我想尝试避免在代码中使用它们,但是当我删除它们时,在new FileReader
的new和reader.readLine()
之后的括号中报告了两个异常。 但是,如果我确实使用它们,则效果相对较好。 谁能解释发生了什么事? 另外,当使用catch并尝试编码时,我得到一个异常Null。 任何帮助表示赞赏。
import java.io.*;
import java.util.*;
public class Encrypter {
public static void main(String[] args) {
File input = null;
if (1 < args.length) {
input = new File(args[1]);
} else {
System.err.println("Invalid arguments count:" + args.length);
System.exit(0);
}
String key = args[0];
BufferedReader reader = null;
try {
int i = 0;
String[] inputText = new String[20];
String[] encryptText = new String[20];
reader = new BufferedReader(new FileReader(input));
while ((inputText[i] = reader.readLine()) != null) {
encryptText[i] = inputText[i];
System.out.println(inputText[i]);
++i;
}
int hash = key.hashCode();
Random random = new Random(hash);
String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ ";
String alphabetPerm = alphabet;
char temp;
for (int j = 0; j < 100; j++) {
int n1 = random.nextInt(27) + 0;
int n2 = random.nextInt(27) + 0;
char[] swapper = alphabet.toCharArray();
temp = swapper[n1];
swapper[n1] = swapper[n2];
swapper[n2] = temp;
String alphaSwap = new String(swapper);
alphabet = alphaSwap;
}
System.out.println(alphabet);
for (int k = 0; k < inputText.length; k++) {
encryptText[k] = inputText[k].replaceAll("[^A-Za-z0-9 ]+", " ");
for (int j = 0; j < inputText[k].length(); j++) {
int index = alphabetPerm.indexOf(encryptText[k].charAt(j));
encryptText[k] = alphabetSwapper(encryptText[k], alphabet, index, j);
System.out.println(encryptText[k]);
}
}
} catch (Exception e) {
System.err.println("Caught Exception: " + e.getMessage());
}
}
public static String alphabetSwapper(String s, String alpha, int index, int value) {
char toSwap = s.charAt(value);
char[] inputChars = s.toCharArray();
inputChars[value] = alpha.charAt(index);
String swapped = new String(inputChars);
return swapped;
}
}
最好不要按原样捕获异常,因为您将丢弃两条最有用的信息,即抛出了哪个异常以及异常发生在哪里。
您可以将异常添加到main()
的throws
子句中,而不是捕获异常。
例如
public static void main(String[] args) throws IOException {
// ...
}
谁能解释发生了什么事?
当您读取文件时,您可能是IOException
例如,如果文件不存在。 您可能必须捕获此异常,但现在可以让调用者将main
打印出来(如果发生)。
同样在使用catch并尝试编码时我得到异常Null
这意味着您正在触发异常而没有消息。 如果打印异常及其发生的位置(或让JVM为您处理),您将看到异常的位置。
为了确定为什么会发生这种情况,建议您逐步调试程序中的代码,以便您了解每一行的功能。
粘贴形式的主要方法通常是程序的入口点,而不会被其他Java代码调用。 因此,在离开程序之前,捕获并处理所有异常是一个好习惯。
“句柄”可能意味着不同的含义:
BTW1:我什至会抓住Throwable。 因此,您还会捕获可能的未经检查的异常(NullPointerException,ArrayIndexOutOfBoundsException等)。 并将尝试放在最开始的位置(如果您在访问args数组时出错,那么您还将涵盖ArrayIndexOutOfBoundsException)
BTW2:如果您在main方法中没有任何try..catch,我认为代码甚至不会编译,因为编译器可以检测到可能存在未处理的检查异常(来自IO操作)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.