zoukankan      html  css  js  c++  java
  • Java异常和Map练习

    Java异常组织结构

    Java语言设计及编写程序的核心是面向对象,对于异常处理Java仍然是以面向对象为核心进行设计错误异常处理。

    任何一个错误/异常的出现都被看做是一个异常对象,异常对象必须属于某个错误/异常类型。java中异常对象的出现导致此方法调用终止,程序将转向异常处理程序。

    异常处理能够让编程者跟踪错误信息,确定程序中的错误异常的位置,从而调试应用程序,使之调整后重新运行。

    1. Throwable 异常的最高级父类

    (1) Error 系统内部的JVM问题,Error任何问题,应用程序问题都无法解决,比如内存爆了

    ① VirtualMachineError

    ② ThreadDeath

    ③ IOError

    (2) Exception 应用程序引起的问题,通过调试程序可以解决

    ① RuntimeException //运行时异常

    ② SQLException //数据库异常

    ③ IOException //文件读写异常

    Java异常Exception分为运行时异常RuntimeException和编译型异常2

    运行时异常只有在程序运行时被发现和处理。

    编译型异常在编译阶段就能被发现并且必须显示处理。

    通常定义自定义异常都是编译型异常。

    方法名称()throws异常类型1,异常类型2{

    throw异常对象;

    }

    异常的捕获和处理

    声明了编译型异常的方法调用时必须进行异常捕获和处理

    使用try块捕获异常或使用throws在调用方法中继续声明

    使用catch块处理try块捕获的异常

    使用finally块强制执行必须执行的代码

    try{

    声明定义了异常的方法调用;

    }catch(Exception e){

    处理异常的代码;

    }finally{

    强制执行必须执行的代码;

    }

    异常常用的方法

    public String e.getMessage();

    public void printStackTrace();

    1.7版本异常新特性

    try{

    调用定义了异常的方法;

    }catch(异常类型1|异常类型2 e){

    异常处理代码;

    }

    异常实例的调用一定会转向异常处理,所以同时只能有一种异常被抛出,抛出以后程序不再执行,所以不会有别的异常。新的语法使用竖线将异常类型隔开,语法更简洁。

    自定义异常

    自定义异常必须直接或间接继承Exception

    通常在Java预定义异常不能满足要求时自定义异常

    自定义异常通常是编译型异常

    自定义异常可以重写父类的相关方法

    /**
     * 编写一个自定义异常类TargetObjectNotExistentException 继承Exception.
     * 此异常类用来在某个范围内查找目标对象而未找到时抛出此异常.
     *
     * 编写一个类,在此类中定义一个在某个范围内查找目标对象的方法,在定义此方法过程中
     * 使用以上定义的异常类.当在某范围内(数组,集合等)查找给定的目标对象找不到时抛出此
     * 异常类对象,从而使程序走向异常处理程序代码.
     *
     * 编写一个测试类包含main方法,调用目标查找对象的方法,测试自定义异常类的使用,体
     * 验自定义异常类的定义,应用及处理异常的过程.
     */
    
    package exceptions;
    
    public class TargetObjectNotExistentException extends Exception{
    
        public static final String MESSAGE = "检测到非法词汇!";
    
        public TargetObjectNotExistentException(){
    
        }
    
        //此方法返回自定义异常信息
        @Override
        public String getMessage() {
            return MESSAGE;
        }
    
        //此方法返回异常轨迹
        @Override
        public void printStackTrace() {
            System.err.println(MESSAGE);
            super.printStackTrace();
        }
    }
    /**
     * 编写一个自定义异常类TargetObjectNotExistentException 继承Exception.
     * 此异常类用来在某个范围内查找目标对象而未找到时抛出此异常.
     *
     * 编写一个类,在此类中定义一个在某个范围内查找目标对象的方法,在定义此方法过程中
     * 使用以上定义的异常类.当在某范围内(数组,集合等)查找给定的目标对象找不到时抛出此
     * 异常类对象,从而使程序走向异常处理程序代码.
     *
     * 编写一个测试类包含main方法,调用目标查找对象的方法,测试自定义异常类的使用,体
     * 验自定义异常类的定义,应用及处理异常的过程.
     */
    
    package until;
    
    import exceptions.TargetObjectNotExistentException;
    import objects.Employee;
    
    import java.util.HashMap;
    import java.util.Map;
    
    public class UseMapTrouble {
        //先new一个模拟的员工数据库类
        Employee emp = new Employee();
    
        public Employee queryEmployee(String str)throws TargetObjectNotExistentException {
    
            //获取所有用户信息存进集合employeeMap里
            Map<String, Employee> employeeMap = emp.getEmployeeMap();
    
            //如果传过来的查询键是非法词汇,则抛出自定义的异常
            if (str.equals("国家主席")){
                throw new TargetObjectNotExistentException();
            }
    
            //通过键获取到对应的值,返回该值对象
            Employee employee = employeeMap.get(str);
    
            //把对象作为返回结果
            return employee;
    
        }
    
    }
    
    
    package objects;
    
    /**
     * 定义一个员工类,模拟数据库存2名员工数据。最后实现的功能是输入字符串键"总工程师"可以返回对象曾誉,如果输入国家主席,会报自定义异常,检测到非法词汇!
     */
    
    import java.util.HashMap;
    import java.util.Map;
    import java.util.UUID;
    
    public class Employee {
        private String empName;
        private String empid;
    
        //定义一个Map集合,存储员工键值,键是员工职位,值是员工姓名和ID
        private static Map<String, Employee> employeeMap = new HashMap<>();
    
        static {
    
    
            Employee emp0 = new Employee();
            emp0.setEmpName("曾誉");
            emp0.setEmpid(UUID.randomUUID().toString());    //一般把id定义为String类型,再把UUID调用toString转换成String类型存进去
    
            Employee emp2 = new Employee();
            emp2.setEmpName("史老师");
            emp2.setEmpid(UUID.randomUUID().toString());
    
            //将员工对象存入Map集合,键是员工职位,值是员工姓名和ID
            employeeMap.put("总工程师",emp0);
            employeeMap.put("董事长",emp2);
    
        }
    
        public String getEmpName() {
            return empName;
        }
    
        public void setEmpName(String empName) {
            this.empName = empName;
        }
    
        public String getEmpid() {
            return empid;
        }
    
        public void setEmpid(String empid) {
            this.empid = empid;
        }
    
        public static void setEmployeeMap(Map<String, Employee> employeeMap) {
            Employee.employeeMap = employeeMap;
        }
    
        //定义一个返回员工集合的方法供其它类调用
        public static Map<String,Employee> getEmployeeMap(){
            return employeeMap;
        }
    
    }
    
    
    import exceptions.TargetObjectNotExistentException;
    import objects.Employee;
    import until.UseMapTrouble;
    
    import java.util.Map;
    import java.util.Scanner;
    
    /**
     * 编写一个自定义异常类TargetObjectNotExistentException 继承Exception.
     * 此异常类用来在某个范围内查找目标对象而未找到时抛出此异常.
     *
     * 编写一个类,在此类中定义一个在某个范围内查找目标对象的方法,在定义此方法过程中
     * 使用以上定义的异常类.当在某范围内(数组,集合等)查找给定的目标对象找不到时抛出此
     * 异常类对象,从而使程序走向异常处理程序代码.
     *
     * 编写一个测试类包含main方法,调用目标查找对象的方法,测试自定义异常类的使用,体
     * 验自定义异常类的定义,应用及处理异常的过程.
     */
    
    public class Test {
        public static void main(String[] args) {
            //new一个Scanner接收用户输入
            Scanner input = new Scanner(System.in);
            //new一个自定义的异常类
            UseMapTrouble use = new UseMapTrouble();
    
            /**
             * 请用户输入需要查询的职位,如果输入国家主席,会报自定义异常,检测到非法词汇!
             */
    
            System.out.println("请您输入需要查询的职位: 总工程师  董事长");
            //使用try和catch块尝试捕获异常
            try {
                //new一个Employee类型接收queryEmployee方法的查询结果
                Employee emp = use.queryEmployee(input.next());
                System.out.println(
                        "员工姓名:"+emp.getEmpName()
                        +"
    员工ID:"+emp.getEmpid()
                );
            } catch (TargetObjectNotExistentException e) {
                //打印异常轨迹和异常信息
                e.printStackTrace();
                System.out.println(e.getMessage());
            }
    
        }
    }
  • 相关阅读:
    团队项目-第一阶段冲刺7
    团队项目-第一阶段冲刺6
    Spring Boot 揭秘与实战(七) 实用技术篇
    Spring Boot 揭秘与实战(七) 实用技术篇
    Spring Boot 揭秘与实战(六) 消息队列篇
    Spring Boot 揭秘与实战(五) 服务器篇
    Spring Boot 揭秘与实战(五) 服务器篇
    Spring Boot 揭秘与实战(五) 服务器篇
    Spring Boot 揭秘与实战(五) 服务器篇
    Spring Boot 揭秘与实战(四) 配置文件篇
  • 原文地址:https://www.cnblogs.com/zengyu1234/p/14998399.html
Copyright © 2011-2022 走看看