为了账号安全,请及时绑定邮箱和手机立即绑定

finally不执行。

http://img1.sycdn.imooc.com//57a2b91e0001807d06540192.jpg这个finally只执行了 第一个号System.out.println("是否继续查找:Y是,N否");

之后不能进行用户输入 

问下各位怎么解决啊

正在回答

3 回答

没见过在finally里这么干的,finally一般是用来释放资源的,不会在里面做一些等待用户输入的操作。

0 回复 有任何疑惑可以回复我~
#1

ivwv 提问者

问下 之前说的释放资源的意思我一直没搞懂 是用来关闭程序之类的操作的吗?
2016-08-06 回复 有任何疑惑可以回复我~
#2

ivwv 提问者 回复 ivwv 提问者

刚才问了问 就是释放内存。。。。
2016-08-06 回复 有任何疑惑可以回复我~
#3

ziom 回复 ivwv 提问者

你想说什么
2016-08-06 回复 有任何疑惑可以回复我~
#4

ivwv 提问者 回复 ziom

没什么想问的了 谢谢
2016-08-09 回复 有任何疑惑可以回复我~
查看1条回复
import java.util.Scanner;

public class Test1 extends Test2 {
		book b = new book();
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Test1 t =new Test1();
		t.show();
	
	}
		//用show方法通过if判断调用show1和show2方法 
		public void show(){
			Scanner sc = new Scanner(System.in);
			try {
				b.books();
				int i = sc.nextInt();
				if (i==1){
					super.show1();
				}else if(i == 2){
					super.show2();
				}else{
					b.sys3();
				}
			}catch(Exception e){
				b.sys3();
			}finally{			//通过finally块来判断用户接下来的操作
				System.out.println("是否继续查找:Y是,N否");
				Scanner ccc =new Scanner(System.in);    
	//关于之前问的finally块执行不完全的,解决办法:可以通过在外面加一个while循环 就会继续执行
	//也可以新new一个Scanner 然后也会继续执行
	//目前这个是之前在Tese1类里new一个Scanner,所以要是只通过在finally块里新new一个Scanner的话
	//会把之前的sc.next()略过,继续执行到下一个ccc.nextLine()
	//不过用用while循环里面在新new一个Scanner 和在show方法里也新new一个Scanner 就可以解决了
	//目前我只知道这么多 没说到的希望大神们能继续说全 谢谢啦!!
	
				while(true){	                          	
					String yes = ccc.nextLine();
				if (yes.equals("y")||yes.equals("Y")){
					show();
					break;
				}else if (yes.equalsIgnoreCase("N")||yes.equals("n")){
					System.out.println("感谢使用!");
					break;
				
				}else {
				b.sys3();
					continue;
				}
				}
			}
		}

}
import java.util.Scanner;
	//用show1方法来储存根据编号搜索图书的程序
public class Test2 extends book{
	Scanner sc = new Scanner(System.in);
	public void show1(){  
		super.sys2();
			try{
				int number = sc.nextInt();
				
				if(number ==1){
					super.gs();
					
				}else if (number == 2){
					super.yy();
					
				}
			}catch(Exception e){
				super.bcz();
				
			} 
		}
	//用show2方法来储存用图书名搜索的图书程序
	public void show2(){
		super.sys1();
		try {
			String title = sc.nextLine();
			if (title.equals("高数")){
				super.gs();
			}else if (title.equalsIgnoreCase("论语")){
				super.ly();
			}else{
				super.bcz();
			}
		}catch(Exception e){
			super.sys3();
		}
	}
	}
package tryCatchfinally;
	//用来储存所用到的方法
public  class book {
	  
	public void books(){
		System.out.println("输入命令:1-按照名称查询图书;2-按照序号查询图书");
	}
	public void sys1(){
		System.out.println("请输入图书名字");
	}
	public void sys2(){
		System.out.println("请输入图书编号");
	}
	public void sys3(){
		System.out.println("请按提示输入,请重新输入");
		}
	public void ly(){
		System.out.println("论语");
	}
	public void yy(){
		System.out.println("音乐");
	}
	public void gs(){
		System.out.println("高数");
	}
	public void bcz(){
		System.out.println("图书不存在");
	}
}

问题都在注释里写了 

目前最终的代码


0 回复 有任何疑惑可以回复我~

http://img1.sycdn.imooc.com//57a2cdbb0001eb2b08450298.jpg目前在if外面套了一个while循环就可以继续执行了 但是不清楚原理 有大神能给说说吗

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

finally不执行。

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信