[英]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.