Java catch Exception IllegalArguementsException 强制我启动字符串

标签 java exception try-catch

每当我捕获整数的异常时,它都可以正常工作,但是当我尝试使用字符串值时,它希望我启动该字符串。以下是我到目前为止的代码

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        LocalMath e = new LocalMath();
        Machine machine = new Machine(name);
        String name;
        int age;
        Scanner userInput = new Scanner(System.in);
        System.out.println("What is your name?");

        try{
        name = userInput.nextLine();
        } catch (Exception IllegalArgumentException) {
            System.out.println("Must be a character from the english alphabet!");
        }

        // System.out.println(e.add(5, 10));
        System.out.println(name);
        System.out.println("-------");
        System.out.println("What is your age?");

        try {
            age = userInput.nextInt();
            System.out.println(age);
        } catch (Exception IllegalArgumentException) {
            System.out.println("Must be in numeric value only!");
        }


    }
}

以及我的其余代码

public class Machine {
    public Machine(){

    }

    public Machine(String name){

    }

    public Machine(int age){

    }
}

最佳答案

只需将字符串变量初始化为 null

        String name = null;

由于 name 的 try/catch block 有可能在没有为其分配任何值的情况下到达 sysytem.out 行。例如,如果 userInput.nextLine() 引发非法参数异常,则不会为 name 赋值,但函数的其余部分将执行,因为异常已被捕获。异常和 catch 行之间发生的任何事情都会被跳过。因此,字符串“name”可以在分配任何内容之前使用;因此,编译器强制您显式初始化它。

如果您可以使用变量/内存地址而不保证它已被设置为一个值,您可能会发现“name”保存了上次使用该内存地址时的错误数据。编译器保证不会发生这种情况。

关于Java catch Exception IllegalArguementsException 强制我启动字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26770936/

相关文章:

java - 将 JTextField 输入限制为整数

forms - 子程序中 FORM-ENDFORM 中的异常捕获

ios - -[MPMoviePlayerControllerNew _moviePlayerDidBecomeActiveNotification :] 中的断言失败

java - 由 : java. lang.ClassNotFoundException : org. apache.commons.io.FileUtils、maven pom.xml 引起

language-agnostic - 处理所有异常的正确时机

java - 如何遵循 IntelliJ-IDEA 关于 try/catch block 的建议 "catch branch identical"?

java - 无状态EJB、异常处理问题、容器吞咽异常

javax.jms.MessageConsumer 在消费者关闭时挂起接收

java - 如何在Java中获取当前类名,包括包名?

c++ - 为什么我的程序不执行第二个 catch block ?