scanner抛异常,递归死循环导致StackOverflowError问题
问题原因:导致scanner抛出的异常的数据没有被处理,一直存在缓冲区,递归下去,异常一直被截获,无限递归最终导致栈溢出。
public class Demo {
static Scanner input = new Scanner(System.in);
static int count=0;
public static void main(String[] args) {
int num = menu1();
System.out.println("输入的是"+num);
}
public static int menu1(){
System.out.println("输入0/1/2/3");
Scanner input1 = new Scanner(System.in);//1.input1改成input或改下面
int num = -1;
try{
num = input.nextInt();//1.input改成input1
if (num<0 || num>3){
return menu1();
}
return num;
}catch (InputMismatchException e ){
System.out.println("异常时输入的是");//2.括号里加input.next()接收数据
System.out.println("捕获异常"+(++count));
return menu1();
}
}
}
解决方法:如上代码,在menu1方法里再new一个对象或是在catch里用next()接收下来这个数据。
至于方法内scanner和外面static scanner对象引用指向及具体导致栈溢出过程,再研究下。
参考:
https://blog.csdn.net/weixin_51870711/article/details/110309884?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control