什么是异常错误,我该如何解决?
What is a exception error and how do I fix it?
我是 Java 的新手,需要您的帮助。我的导师给了我 class MD5Digest,当我 运行 文件本身时,它编译没有问题。但是当我将 class 复制并粘贴到我的文件时,它不起作用。有人可以帮帮我吗?我读到它与 try catch 循环有关,但我不确定如何为这个特定的 class 设置一个,因为它是给我的,我不知道它的一半方法。提前致谢!
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
import java.security.MessageDigest;
public class Login{
public static void main(String []args){
Scanner user_input = new Scanner(System.in);
String entered_username = Get_Credentials.get_username(user_input);
String entered_password = Get_Credentials.get_password(user_input);
MD5Digest.encrypt(entered_password);
user_input.close();
User[] all_users = File_Scanner.create_users();
}
}
class Get_Credentials{
public static String get_username(Scanner user_input){
System.out.println("Username: ");
return user_input.next();
}
public static String get_password(Scanner user_input){
System.out.println("Password: ");
return user_input.next();
}
}
class File_Scanner{
public static User[] create_users(){
User users[] = new User[6];
int index_counter = 0;
try {
File credentials_file = new File("credentials.txt");
String pattern = "[^\"\s]+|\"(\\.|[^\\\"])*\"";
Scanner file_reader = new Scanner(credentials_file);
while (file_reader.hasNextLine()) {
users[index_counter] = new User();
users[index_counter].username = file_reader.findInLine(pattern);
users[index_counter].encrypted_password = file_reader.findInLine(pattern);
users[index_counter].password = file_reader.findInLine(pattern);
users[index_counter].role = file_reader.findInLine(pattern);
file_reader.nextLine();
index_counter++;
}
file_reader.close();
}
catch (Exception e) {
System.out.println(e.getClass());
}
return users;
}
}
class User {
String username;
String password;
String encrypted_password;
String role;
}
class MD5Digest {
public static void encrypt(String original) throws Exception {
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(original.getBytes());
byte[] digest = md.digest();
StringBuffer sb = new StringBuffer();
for (byte b : digest) {
sb.append(String.format("%02x", b & 0xff));
}
System.out.println("original:" + original);
System.out.println("digested:" + sb.toString());
}
}
抛出错误:
Login.java:12: error: unreported exception Exception; must be caught or declared to be thrown
MD5Digest.encrypt(entered_password);
^
1 error
你在用什么IDE?您应该能够轻松解决此错误,而无需任何外部帮助。在 IntelliJ 上按 Alt + Enter 可以选择将加密方法调用包含在 try/catch 块中,如下所示:
try {
MD5Digest.encrypt(entered_password);
} catch (Exception e) {
e.printStackTrace();
}
该方法抛出异常,这基本上意味着它可以 运行 出错,try catch 块是一种在不让程序崩溃的情况下处理该错误的方法。
加密方法位于底部,在 MD5Digest class 内。查看第一行:
public static void encrypt(String original) throws Exception
它告诉编译器它可能 运行 进入异常(错误),您应该准备好处理这种可能性。因此 try/catch 是必需的。它将尝试 try 括号中的内容,然后如果 运行 出现错误,将执行 catch 块中的代码。
将您的主要方法更改为:
public static void main(String []args) throws Exception {
.
由于您通过 main
方法调用 encrypt
方法,因此您还需要将 throws Exception
添加到 main
方法。希望这对您有所帮助!
基本上你只需要给你的方法一个关于可能的异常的标志,在这种情况下称为检查异常。因此,您使用 MessageDigest
抽象 class 并且您访问 getInstance
的方法具有 throws NoSuchAlgorithmException
的签名。正如@Dymas 所说,IDE 有助于更清楚地看到它。
所以encrypt
方法使用getInstance
方法,你应该让encript
知道这个检查异常。此外,由于 main
调用 encript
,这会带来 getInstance
的异常,您还应该让 main
知道这一点。
这导致您输入:
public static void main(String []args) throws NoSuchAlgorithmException
public static void encrypt(String original) throws NoSuchAlgorithmException
这个页面也解释得很好,可能对进一步阅读有帮助:
https://www.geeksforgeeks.org/checked-vs-unchecked-exceptions-in-java/
您可以使用 throws NoSuchAlgorithmException
的签名或 @K.Kretz 所说的 throws Exception
,这是关于异常层次结构的,您也可以在此处查看图片:
https://itblackbelt.wordpress.com/2015/02/17/checked-vs-unchecked-exception-in-java-example/
我是 Java 的新手,需要您的帮助。我的导师给了我 class MD5Digest,当我 运行 文件本身时,它编译没有问题。但是当我将 class 复制并粘贴到我的文件时,它不起作用。有人可以帮帮我吗?我读到它与 try catch 循环有关,但我不确定如何为这个特定的 class 设置一个,因为它是给我的,我不知道它的一半方法。提前致谢!
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
import java.security.MessageDigest;
public class Login{
public static void main(String []args){
Scanner user_input = new Scanner(System.in);
String entered_username = Get_Credentials.get_username(user_input);
String entered_password = Get_Credentials.get_password(user_input);
MD5Digest.encrypt(entered_password);
user_input.close();
User[] all_users = File_Scanner.create_users();
}
}
class Get_Credentials{
public static String get_username(Scanner user_input){
System.out.println("Username: ");
return user_input.next();
}
public static String get_password(Scanner user_input){
System.out.println("Password: ");
return user_input.next();
}
}
class File_Scanner{
public static User[] create_users(){
User users[] = new User[6];
int index_counter = 0;
try {
File credentials_file = new File("credentials.txt");
String pattern = "[^\"\s]+|\"(\\.|[^\\\"])*\"";
Scanner file_reader = new Scanner(credentials_file);
while (file_reader.hasNextLine()) {
users[index_counter] = new User();
users[index_counter].username = file_reader.findInLine(pattern);
users[index_counter].encrypted_password = file_reader.findInLine(pattern);
users[index_counter].password = file_reader.findInLine(pattern);
users[index_counter].role = file_reader.findInLine(pattern);
file_reader.nextLine();
index_counter++;
}
file_reader.close();
}
catch (Exception e) {
System.out.println(e.getClass());
}
return users;
}
}
class User {
String username;
String password;
String encrypted_password;
String role;
}
class MD5Digest {
public static void encrypt(String original) throws Exception {
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(original.getBytes());
byte[] digest = md.digest();
StringBuffer sb = new StringBuffer();
for (byte b : digest) {
sb.append(String.format("%02x", b & 0xff));
}
System.out.println("original:" + original);
System.out.println("digested:" + sb.toString());
}
}
抛出错误:
Login.java:12: error: unreported exception Exception; must be caught or declared to be thrown
MD5Digest.encrypt(entered_password);
^
1 error
你在用什么IDE?您应该能够轻松解决此错误,而无需任何外部帮助。在 IntelliJ 上按 Alt + Enter 可以选择将加密方法调用包含在 try/catch 块中,如下所示:
try {
MD5Digest.encrypt(entered_password);
} catch (Exception e) {
e.printStackTrace();
}
该方法抛出异常,这基本上意味着它可以 运行 出错,try catch 块是一种在不让程序崩溃的情况下处理该错误的方法。
加密方法位于底部,在 MD5Digest class 内。查看第一行:
public static void encrypt(String original) throws Exception
它告诉编译器它可能 运行 进入异常(错误),您应该准备好处理这种可能性。因此 try/catch 是必需的。它将尝试 try 括号中的内容,然后如果 运行 出现错误,将执行 catch 块中的代码。
将您的主要方法更改为:
public static void main(String []args) throws Exception {
.
由于您通过 main
方法调用 encrypt
方法,因此您还需要将 throws Exception
添加到 main
方法。希望这对您有所帮助!
基本上你只需要给你的方法一个关于可能的异常的标志,在这种情况下称为检查异常。因此,您使用 MessageDigest
抽象 class 并且您访问 getInstance
的方法具有 throws NoSuchAlgorithmException
的签名。正如@Dymas 所说,IDE 有助于更清楚地看到它。
所以encrypt
方法使用getInstance
方法,你应该让encript
知道这个检查异常。此外,由于 main
调用 encript
,这会带来 getInstance
的异常,您还应该让 main
知道这一点。
这导致您输入:
public static void main(String []args) throws NoSuchAlgorithmException
public static void encrypt(String original) throws NoSuchAlgorithmException
这个页面也解释得很好,可能对进一步阅读有帮助:
https://www.geeksforgeeks.org/checked-vs-unchecked-exceptions-in-java/
您可以使用 throws NoSuchAlgorithmException
的签名或 @K.Kretz 所说的 throws Exception
,这是关于异常层次结构的,您也可以在此处查看图片:
https://itblackbelt.wordpress.com/2015/02/17/checked-vs-unchecked-exception-in-java-example/