我有一个问题关于处理错误的代码由用户。
所以问题是我需要我的用户添加一个程序的名字,以添加程序在RAM中占用的内存,并添加他将打开程序的时间。
我需要在我的代码中添加防御性的编程,所以我想也许我可以通过检查用户是否添加了程序需要的变量类型来做到这一点。
无论如何,我对如何使用try和catch块感到困惑,这是我所拥有的……
System.out.println("add program Id");
String programID = scan.next();
try{
String check;
check = programID;
}catch(Exception e){
System.out.println("add a value of String type");
}
# # #这并不工作。
您可以输入的任何内容都是字符串。我会打‘5’。这是一个字符串。你可能认为它是一个数字,但这整个文本块是一个字符串和'5'在其中。
没有文本也是字符串。字符串x = "";编译好了。
因此,这里不会发生任何异常,也不清楚您试图检测的是什么场景。
也许程序id的形式是:“一个大写字母(例如,只有英文大写字母,不包括ü),然后最多3个不同的数字”。例如‘Z5’或‘Y495’。
您需要编写代码来检测它,而不需要try/catch。例如正则表达式:
private static final Pattern PROGRAM_ID_PATTERN = Pattern.compile("^[A-Z]\\d{1,3}$");
public static void main(String[] args) {
....
String programId;
do {
programId = scanner.next();
if (!PROGRAM_ID_PATTERN.matcher(programId).matches()) {
System.err.println("Enter a valid program ID, e.g. A123");
} else {
break;
}
} while (true);
}
异常适用于方法有多种不同退出方式的情况。
例如,想象一下这个方法:
byte[] contentsOfFile = Files.readFileFully("myfile.txt");
readfileful方法看起来很简单:您提供一个文件名,然后它返回一个包含其内容的字节数组。
然而,这只是一种可能。如果文件不存在怎么办?如果文件存在,但是您的进程没有读访问权限怎么办?如果磁盘坏了,或者它是一个可移动驱动器,在读取它的过程中被拔出了怎么办?
这些在某种程度上可预测的潜在出路通常是由例外情况完成的。该方法将抛出FileNotFoundException、noReadAccessException以及更一般的IOException。
没有scanner。next()的“that is not a string”变体。
你可以使用scanner。next(Pattern):
private static final Pattern PROGRAM_ID_PATTERN = Pattern.compile("^[A-Z]\\d{1,3}$");
public static void main(String[] args) {
....
String programId;
do {
try {
programId = scanner.next(PROGRAM_ID_PATTERN);
break;
} catch (NoSuchElementException e) {
System.err.println("Enter a valid program ID, e.g. A123");
}
} while (true);
}
javadoc通常会解释会发生什么异常;如果一个方法没有提到任何你不应该尝试/捕捉那里。