系统。退出(1)并返回 import java.io.FileNotFoundException; 导入java.util.Formatter; 导入java.util.FormatterClosedException; 导入java.util.NoSuchElementException; 导入java.util.Scanner; 公共类CreateTextFile { 专用格式化程序; 公共void openFile() { 尝试 { 格式化程序=新格式化程序(“clients.txt”); } 捕获(SecurityException SecurityException) { System.err.println(“您没有访问此文件的权限”); 系统出口(1); } 捕获(FileNotFoundException FileNotFoundException) { System.err.println(“打开或创建文件时出错”); 系统出口(1); } } 公共档案( { AccountRecord=新AccountRecord(); 扫描仪=新的扫描仪(System.in); System.out.printf(“%s%n%s%n%s%n%s%n%s%n”,“要终止输入,请键入文件结束指示符”,“当提示输入时”,“在Unix/Linux/Mac OS X上键入d,然后按enter”,“在Windows上键入z,然后按enter”); while(scanner.hasNext()) { 尝试 { accountRecord.setAccountNumber(scanner.nextInt()); accountRecord.setFirstName(scanner.next()); accountRecord.setLastName(scanner.next()); accountRecord.setBalance(scanner.nextDouble()); 如果(accountRecord.getAccountNumber()>0) 格式化程序.format(“%d%s%s%,.2f%n”、accountRecord.getAccountNumber()、accountRecord.getFirstName()、accountRecord.getLastName()、accountRecord.getBalance()); 其他的 System.out.println(“账号必须大于0”); } catch(FormatterClosedException FormatterClosedException) { System.err.println(“写入文件时出错”); 返回; } catch(NoSuchElementException NoSuchElementException) { System.err.println(“输入无效,请重试”); scanner.nextLine(); } System.out.printf(“%s%s%n%s”,“输入账号(>0)”,“名、姓和余额。”,“?”; } scanner.close(); } 公共文件() { if(格式化程序!=null) formatter.close(); } }
我只是想知道为什么在系统。退出(1)并返回 import java.io.FileNotFoundException; 导入java.util.Formatter; 导入java.util.FormatterClosedException; 导入java.util.NoSuchElementException; 导入java.util.Scanner; 公共类CreateTextFile { 专用格式化程序; 公共void openFile() { 尝试 { 格式化程序=新格式化程序(“clients.txt”); } 捕获(SecurityException SecurityException) { System.err.println(“您没有访问此文件的权限”); 系统出口(1); } 捕获(FileNotFoundException FileNotFoundException) { System.err.println(“打开或创建文件时出错”); 系统出口(1); } } 公共档案( { AccountRecord=新AccountRecord(); 扫描仪=新的扫描仪(System.in); System.out.printf(“%s%n%s%n%s%n%s%n%s%n”,“要终止输入,请键入文件结束指示符”,“当提示输入时”,“在Unix/Linux/Mac OS X上键入d,然后按enter”,“在Windows上键入z,然后按enter”); while(scanner.hasNext()) { 尝试 { accountRecord.setAccountNumber(scanner.nextInt()); accountRecord.setFirstName(scanner.next()); accountRecord.setLastName(scanner.next()); accountRecord.setBalance(scanner.nextDouble()); 如果(accountRecord.getAccountNumber()>0) 格式化程序.format(“%d%s%s%,.2f%n”、accountRecord.getAccountNumber()、accountRecord.getFirstName()、accountRecord.getLastName()、accountRecord.getBalance()); 其他的 System.out.println(“账号必须大于0”); } catch(FormatterClosedException FormatterClosedException) { System.err.println(“写入文件时出错”); 返回; } catch(NoSuchElementException NoSuchElementException) { System.err.println(“输入无效,请重试”); scanner.nextLine(); } System.out.printf(“%s%s%n%s”,“输入账号(>0)”,“名、姓和余额。”,“?”; } scanner.close(); } 公共文件() { if(格式化程序!=null) formatter.close(); } },java,error-handling,try-catch,Java,Error Handling,Try Catch,我只是想知道为什么在openFile()中,catch块以System.exit()终止,addRecords()中的catch块以return终止。是否有一种推荐的方法来确定何时使用每种方法?它们做不同的事情return只需从函数返回调用方,程序就会继续运行System.exit()终止程序;控件不会返回给调用方 当您的程序遇到无法恢复的错误并且程序没有继续运行的意义时,您应该使用System.exit()。当程序可以正常恢复时,或者当程序在退出前应执行清理/关闭操作时,请使用return 另
openFile()
中,catch
块以System.exit()终止,addRecords()中的catch
块以return
终止。是否有一种推荐的方法来确定何时使用每种方法?它们做不同的事情return
只需从函数返回调用方,程序就会继续运行System.exit()
终止程序;控件不会返回给调用方
当您的程序遇到无法恢复的错误并且程序没有继续运行的意义时,您应该使用System.exit()
。当程序可以正常恢复时,或者当程序在退出前应执行清理/关闭操作时,请使用return
另请参见此。返回的应该是一个中断
,只留下while循环,这样scanner.close()
就完成了
System.exit
是一种糟糕的样式,但对于命令行程序来说是可行的。不捕获异常也有点相同:使用消息终止,但也使用堆栈跟踪。
在这种情况下,让函数抛出异常将是更好的方法。return语句用于方法内部以从中取出。System.exit(0)用于程序之外的任何方法。
System.exit(0)终止程序。而System.exit(1)由于程序中遇到错误而终止程序。
System.exit()
在调用行终止程序。
System.exit(1)
在出现错误时终止程序。从技术上讲,如果可能需要进行最终清理,则方法应该引发异常,但答案很好。
import java.io.FileNotFoundException;
import java.util.Formatter;
import java.util.FormatterClosedException;
import java.util.NoSuchElementException;
import java.util.Scanner;
public class CreateTextFile
{
private Formatter formatter;
public void openFile()
{
try
{
formatter = new Formatter("clients.txt");
}
catch (SecurityException securityException)
{
System.err.println("You do not have permission to access this file");
System.exit(1);
}
catch (FileNotFoundException fileNotFoundException)
{
System.err.println("Error opening or creating the file");
System.exit(1);
}
}
public void addRecords()
{
AccountRecord accountRecord = new AccountRecord();
Scanner scanner = new Scanner(System.in);
System.out.printf("%s%n%s%n%s%n%s%n", "To terminate input, type the end-of-file indicator", "when you are prompted to enter input", "On Unix/Linux/Mac OS X type <control> d then press Enter", "On Windows type <ctrl> z then press Enter");
while (scanner.hasNext())
{
try
{
accountRecord.setAccountNumber(scanner.nextInt());
accountRecord.setFirstName(scanner.next());
accountRecord.setLastName(scanner.next());
accountRecord.setBalance(scanner.nextDouble());
if (accountRecord.getAccountNumber() > 0)
formatter.format("%d %s %s %,.2f%n", accountRecord.getAccountNumber(), accountRecord.getFirstName(), accountRecord.getLastName(), accountRecord.getBalance());
else
System.out.println("Account number must be greater than 0");
}
catch (FormatterClosedException formatterClosedException)
{
System.err.println("Error writing to file");
return;
}
catch (NoSuchElementException noSuchElementException)
{
System.err.println("Invalid input. Try again");
scanner.nextLine();
}
System.out.printf("%s %s%n%s", "Enter account number (>0),", "first name, last name and balance.", "?");
}
scanner.close();
}
public void closeFile()
{
if (formatter != null)
formatter.close();
}
}