java.lang中的异常类2020.12.18

每日心得:

今天比昨天好多了,老师花了大半个上午讲了那个创建一个MyStringBuffer的类的作业,说实话昨天没做多少,主要不知道方式,今天讲的时候也没全部听全,不过知道了答题的方式,逻辑理的还行吧。今天主要讲了java.lang中的异常类。

1、error:用于指示合理的应用程序不应该试图捕获的严重问题;一般出了这个,那就不是我能够解决的了,现在暂时不用关心这个;

2、exception:它指出了合理的应用程序想要捕获的条件。异常属于线程里面,发生会终止线程,有传播性,不管则会根据层数逐渐传播到最顶层jvm会将其终止;

异常抛出:方式throws与try-catch-finally,抛出会有三种事物,一个快照(类似电脑休眠,保持计算机原来的状态),一个详细信息(message),一个缘由(cause),finally中的语句一定会执行,如果在前方有语句强制结束了程序,它会在结束前执行,一般用于资源释放。还有部分知识点在下图:

 

异常又分为checked与runtime

runtime异常与error类似,系统会忽略,因为人为难以解决,父子子类抛出时没有联系,
check异常必须处理,父类抛出的异常类必须大于或等于子类抛出的异常,
但两者都可使线程结束,效果相同,设计原因不明。
java框架中会将check都会转成runtime异常,在编程时不用处理,但不是不处理,会在某工具里集中处理,
自定义异常,java中的异常太大或太小,或者有些情况没概况到有必要设计自己的异常,
再有可以有必要让最顶层使用的人是否知道其异常的原因,或者自己解决不让使用者知道。(这个在架构师时才会想到这么多。我们一般不用处理)。

 

今天还有一个作业,做一个学生管理系统,按照要求要把异常都处理好。20号终于做完了,每一种非法输入都得想到,还真是挺麻烦的,一开始直接用student[]数组做的,麻烦很多,长度固定,让我只能给一个长度,在使用equals作部分判断时,因为要循环,后面的null值不可避免会遍历到,所以老是导致空指针错误,后面直接使用List方便很多,长度可变,有序性的确让题目好做不少,至少我在把类数组转换为list的时候删去了很多不必要的代码,做这个题目让我得到很多技巧,比如将多次使用的功能放在一个方法内,这样会很大程度上减少代码重复度,更加简洁,也有利于性能,每次错误输入都需要重新再次输入,反复调用相应的方法,老师说系统做完的时间与优化的时间不能差太多,我这优化做的时间太多了,下次还是得争取在做的时候将更多情况考虑到!

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

public class StudentManager {
    public static void main(String[] args) throws Exception {
        Student student1=new Student("作者","Qifan_12345678",18,true);
        Student student2=new Student("读者","Qifan_23456789",19,false);
        stus.add(student1);
        stus.add(student2);
        system();
    }
    static BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));
    static List<Student> stus = new ArrayList<StudentManager.Student>();
    static String regex = "[\u4E00-\u9FA5]+";
    static String regex2 = "^[0-9]*+";
    static class Student{
        private String name;//中文,且不超过5个字
        private String stuNo;//Qifan_8个数字
        private int age;// 18-25之间
        private boolean gender;
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getStuNo() {
            return stuNo;
        }
        public void setStuNo(String stuNo) {
            this.stuNo = stuNo;
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
        public boolean isGender() {
            return gender;
        }
        public void setGender(boolean gender) {
            this.gender = gender;
        }
        public Student(String name,String stuNo,int age,boolean gender) {
            this.name = name;
            this.stuNo = stuNo;
            this.age = age;
            this.gender = gender;
        }
    }
    static void system() {
        stuhe();
        try {
            String Str = reader.readLine();
            int key =Integer.parseInt(Str);
            if(key>0&&key<5){
                    switch (key) {
                    case 1:
                        addstu();
                        break;
                    case 2:
                        deletestu();    
                        break;
                    case 3:
                        updatestu();
                        break;
                    case 4:
                        querystu();
                        isqureystu();
                        break;
                    case 5:
                        System.out.println("退出系统成功!");
                        System.exit(0);
                        break;
                    }
            }else{
                System.out.println("");
                System.out.println("请输入1~5的功能数字!");
                system();
            }
        } catch (Exception e) {
            System.out.println("");
            System.out.println("请输入功能数字!");
            system();
        }    
    }
    static void stuhe(){
        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.print("请选择功能输入数字>>>>>");
    }
    static String inname() throws IOException{
        System.out.println("请输入姓名:");
        String sname = reader.readLine();
        if(sname.length()<0||sname.length()>6||!(sname.matches(regex))){
            System.out.println("姓名格式为五个字以内的中文!");
            sname=inname();
        }
        return sname;
    }
    
    static String inno() throws IOException{
        System.out.println("请输入学号:");
        String sno = reader.readLine();
        if(sno.length()!=8||!(sno.matches(regex2))){
            System.out.println("学号格式为8个数字以内!");
            sno =inno();
        }
        return sno;
    }
    
    static int inage() throws IOException{
        System.out.println("请输入需要添加的年龄:");
        String sage = reader.readLine();
        int iage=0;
        if(sage.length()==2&&(sage.matches(regex2))){
            iage=Integer.valueOf(sage);
            if(iage<18&&iage>25){
            System.out.println("年龄为18到25岁!");
            iage =inage();
            }else{
                iage=Integer.valueOf(sage);    
            }
        }else{
            System.out.println("年龄为18到25岁!");
            iage =inage();
        }
        return iage;
    }
    
    static boolean ingen() throws IOException{
        System.out.println("请输入需要添加的性别:");
        String gender = reader.readLine();
        boolean b=true;
        if(gender.equals("男")){
            gender="true";
            b=Boolean.valueOf(gender);
        }else if(gender.equals("女")){
            gender="false";
            b=Boolean.valueOf(gender);
        }else{
            System.out.println("请输入性别(男/女):");
            b=ingen();
        }
        return b;
    }
    static void yn(int i) throws IOException{
        switch (i) {
        case 1:
            System.out.println("输入y继续添加,n退回主菜单");
            break;
        case 2:
            System.out.println("输入y继续删除,n退回主菜单");    
            break;
        case 3:
            System.out.println("输入y继续修改,n退回主菜单");
            break;
            }
        String key = reader.readLine();
        if(key.equals("y")){
            switch (i) {
            case 1:
                addstu();
                break;
            case 2:
                deletestu();    
                break;
            case 3:
                updatestu();
                break;
            }
        }else if(key.equals("n")){
            system();
        }else{
                System.out.println("请输入y/n!");
                yn(i);
            }
    }
    static void addstu() throws IOException {
        querystu();
        String sname=inname();
        String sno = inno();
        for(int i=0;i<stus.size();i++){
            if((stus.get(i)).getStuNo().equals("Qifan_"+sno)){
                System.out.println("该学号已存在!,请重新输入!");
                sno=inno();
            }
        }
        int sage = inage();
        boolean b = ingen();
        Student s1=new Student(sname,"Qifan_"+sno,sage,b);
        stus.add(s1);
        querystu();
        System.out.println("添加成功!");
        yn(1);
    }
    static void deletestu()throws IOException{
        querystu();
        System.out.println("请输入需要删除的学号或姓名:");
        String s = reader.readLine();
        String text="";
        for(int i=0;i<stus.size();i++){
            if((stus.get(i).getName()).equals(s)||(stus.get(i).getStuNo()).equals("Qifan_"+s)){
                System.out.println("确认删除?y/n");
                String key1 = reader.readLine();
                if(key1.equals("y")){
                    stus.remove(i);
                    querystu();
                    text="删除成功!";
                }else if(key1.equals("n")){
                    text="已取消删除!";
                }    
                break;
            }else{
                text="没有此人,删除失败!";
            }
        }
        System.out.println(text);
        yn(2);
                
    }
    static void updatestu()throws IOException{
        querystu();
        String s = inno();
        String text="";
        for(int i=0;i<stus.size();i++){
                if((stus.get(i)).getStuNo().equals("Qifan_"+s)){
                    String n = inname();
                    System.out.println("确认修改?y/n");
                    String key1 = reader.readLine(); 
                        if(key1.equals("y")){
                            stus.get(i).setName(n);
                            querystu();
                            text="修改成功!";
                        }else if(key1.equals("n")){
                            text="已取消修改!";
                        }    
                        break;
                }else{
                text="没有此人,修改失败!";
            }
        }
        System.out.println(text);
        yn(3);
    }
    static void querystu(){
        System.out.println("学生列表:");
        for(int i=0;i<stus.size();i++){
            if(stus.get(i)!=null){
                System.out.println(stus.get(i));
            }
        }
    
    }
    static void isqureystu() throws IOException{
        System.out.println("输入y进行精准查询,n退回主菜单");
        String key = reader.readLine();
        if(key.equals("y")){
            String sname = inname();
            for(int i =0;i<stus.size();i++){
                if(stus.get(i)!=null&&(stus.get(i).getName()).equals(sname)){
                    System.out.println(stus.get(i));
                }else{
                    System.out.println("查无此人!");
                }
                isqureystu();
            }
        }else if(key.equals("n")){
            system();
            
        }else{
            System.out.println("请输入y/n!");
            isqureystu();
        }
    }
}

 

posted @ 2020-12-20 22:45  Ewg  阅读(216)  评论(0编辑  收藏  举报