Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
系统。退出(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 - Fatal编程技术网

系统。退出(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();
    }
}