• 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();
            }
        }
    }
  • 相关阅读:
    绕过卡巴斯基等杀软抓取 lsass 内存踩坑
    Redis 未授权访问 getshll
    linux 中用 sed 指令 删除/添加 指定行首内容
    使用 git 的时候,出现很多别人的commit
    关于近源渗透测试的免杀
    GIT 使用
    web安全入门(更新中)
    一篇入门代码审计
    动态加载dll的实现+远线程注入
    spring系列cve poc编写
  • 原文地址:https://www.cnblogs.com/zzdbk/p/14157597.html
Copyright © 2020-2023  润新知