为什么我不可以用try/catch处理这个异常

为什么我不可以用try/catch处理这个异常

问题描述:

import java.io.*;import java.util.*;
public class Day_23_2 {
//private static final Object x = null;

public static void main(String[] args)throws Exception {
    Emp_man1 em=new Emp_man1();
    BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
    while(true){
        System.out.println("请选择所需要的功能!");
        System.out.println("1.添加成员!");
        System.out.println("2.查看成员!");
        System.out.println("3.查看所有!");
        System.out.println("4.修改工资!");
        System.out.println("5.删除成员!");
        System.out.println("6.退出系统!");
        //try {
            String x=br.readLine();
        //} catch (IOException e) {
            // TODO Auto-generated catch block
            //e.printStackTrace();
        //}
        if(x.equals("1")){
            System.out.print("请输入工号!");
            //try {                          为什么这里用不了try/catch?
                String emp_no=br.readLine();
            //} catch (IOException e) {      用了try/catch的话emp_no就不会被下面的Emp1引用。
                // TODO Auto-generated catch block
                //e.printStackTrace();
            //}
            System.out.print("请输入名字!");
            //try {
                String name=br.readLine();
            //} catch (IOException e) {
                // TODO Auto-generated catch block
                //e.printStackTrace();
            //}
            System.out.print("请输入年龄!");
            //try {
                float age=Float.parseFloat(br.readLine());
            //} catch (NumberFormatException e) {
                // TODO Auto-generated catch block
                //e.printStackTrace();
            //} catch (IOException e) {
                // TODO Auto-generated catch block
                //e.printStackTrace();
            //}
            System.out.print("请输入工资!");
            //try {
                float sal=Float.parseFloat(br.readLine());
            //} catch (NumberFormatException e) {
                // TODO Auto-generated catch block
                //e.printStackTrace();
            //} catch (IOException e) {
                // TODO Auto-generated catch block
                //e.printStackTrace();
            //}
            Emp1 emp1=new Emp1(emp_no, name, age, sal);
            em.add_man(emp_no, emp1);;
        }else if(x.equals("2")){
            System.out.print("请输入工号!");
            //try {
                String emp_no=br.readLine();
            //} catch (IOException e) {
                // TODO Auto-generated catch block
                //e.printStackTrace();
            //}
            em.show_info(emp_no);
        }else if(x.equals("3")){
            em.show_all();
        }else if(x.equals("4")){
            System.out.println("请输入工号!");
            String emp_no=br.readLine();
            System.out.println("请输入新工资");
            float newsal=Float.parseFloat(br.readLine());
            em.change_sal(emp_no, newsal);
        }else if(x.equals("5")){
            System.out.println("请输入工号!");
            String emp_no=br.readLine();
            em.del_emp(emp_no);
        }else if(x.equals("6")){
            System.exit(0);
        }
    }
}

}
class Emp_man1{
Hashtable ht=null;
public Emp_man1(){
ht=new Hashtable();
}
public void add_man(String emp_no,Emp1 emp1){
ht.put(emp_no, emp1);
}
public void show_info(String emp_no){
Emp1 emp1=ht.get(emp_no);
if(ht.containsKey(emp_no));
System.out.println("工号是:"+emp1.getEmp_no());
System.out.println("名字是:"+emp1.getName());
System.out.println("年龄是:"+emp1.getAge());
System.out.println("工资是:"+emp1.getSal());
}
public void show_all(){
Iterator it=ht.keySet().iterator();
if(it.hasNext()){
String emp_no =it.next().toString();
Emp1 emp1=ht.get(emp_no);
System.out.print("工号是:"+emp1.getEmp_no()+" ");
System.out.print("名字是:"+emp1.getName()+" ");
System.out.print("年龄是:"+emp1.getAge()+" ");
System.out.print("工资是:"+emp1.getSal());
}
}
public void change_sal(String emp_no,float newsal){
Emp1 emp1=ht.get(emp_no);
emp1.setSal(newsal);
}
public void del_emp(String emp_no){
ht.remove(emp_no);
}
}

class Emp1{
private String emp_no;
private String name;
private float age;
private float sal;
public Emp1(String emp_no,String name,float age,float sal){
this.emp_no=emp_no;this.name=name;this.age=age;this.sal=sal;
}
public String getEmp_no() {
return emp_no;
}
public void setEmp_no(String emp_no) {
this.emp_no = emp_no;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public float getAge() {
return age;
}
public void setAge(float age) {
this.age = age;
}
public float getSal() {
return sal;
}
public void setSal(float sal) {
this.sal = sal;
}
}

关于异常处理的几点:
1)异常try中使用的变量,如果需要在catch或者finally分支中使用,必须是try之前定义的变量。
2)如果一个方法中,有好几个操作都会有异常,可以都放在try方法体重,在catch分支中一起捕获。
3)代码逻辑之间独立的,而且后面的逻辑依赖前面的操作,可以分批处理try-catch,有关联的代码放一块处理,

 //第一部分
 try{

 catch(){
 }

 //第二部分逻辑
  try{

 catch(){
 }

 ....

try catch 里面定义的变量是局部变量,只在try catch里面有效

那这个 br.readLine()的异常应该怎么处理 求解答 谢谢!

异常处理的基本思想是简化程序的错误代码,为程序键壮性提供一个标准检测机制。

也许我们已经使用过异常,但是你会是一种习惯吗,不要老是想着当我打开一个文件的时候才用异常判断一下,我知道对你来说你喜欢用return value或者是print error message来做,你想过这样做会导致Memory Leak,系统退出,代码重复/难读,垃圾一堆…..吗?现在的软件已经是n*365*24小时的......
答案就在这里:C++处理异常 try,catch,throw
----------------------你好,人类,我是来自CSDN星球的问答机器人小C,以上是依据我对问题的理解给出的答案,如果解决了你的问题,望采纳。