首页 > 编程语言 >Java学习之异常

Java学习之异常

时间:2023-02-24 19:13:39浏览次数:59  
标签:Java name age System 学习 grilFriend 异常 public

异常

exception

一般需要程序员管理的异常可以分为两类:
Exception(大类): Runnable异常及其子类 其他异常

  • 运行时异常:RuntimeException及其子类,编译时不会出现异常,运行时才会报错,比如数组索引越界

  • 编译时异常:编译时就会出现的异常,比如日期解析异常

    ## 异常的作用
    
  1. 查询bug的相应信息
  2. 异常可以作为方法中的特殊返回值,以便调用者知道代码底层的情况(可以选择打印信息到控制台,也可以转入1)

异常的处理方式

  • JVM处理异常的方式:打印异常的名称与内容至控制台,停止执行之后的代码
  • 自己处理
/**
 * 捕获异常 格式
 * try{
 *     可能出现异常的代码
 * }catch(异常类 变量名){
 *     出现异常的处理方法
 * }
 * try可以与多个catch搭配,catch中也可以写多个异常,用或者符号隔开。
 * 捕获多种异常,如果异常中存在父子关系,父类一定要写在下面
 * try中若出现异常,那try下面的代码不会执行
 */
public class WebDownload {
    public static void main(String[] args) {
        int[] arry = {1,2,3,4};
        try {
            System.out.println(arry[5]);
        }catch (ArrayIndexOutOfBoundsException e){ //数组索引异常类名
            System.out.println("数组索引不存在");
        }
    }
}

关于抛出异常,捕获异常的选择

Mac上异常快捷键

command+option+T;

小案例

public class ExcepterTest {

    public static void main(String[] args){
        GrilFriend grilFriend = new GrilFriend();
        Scanner sc = new Scanner(System.in);
      //这里使用捕获异常,不让程序停止
        while (true) {
            try {
                grilFriend.setName(sc.next());
                grilFriend.setAge(sc.nextInt());
                break;
            } catch (RuntimeException e) {
                System.out.println("输入格式有误,请重新输入!");
            }
        }
        System.out.println("grilFriend:"+grilFriend.getName()+" "+grilFriend.getAge());
        System.out.println("结束");
    }
}



class GrilFriend{
    private String name;
    private int age;

    public GrilFriend() {
    }

    public GrilFriend(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        //这里可以使用抛出异常,如果输入不合法,则不能进行赋值
        if(name.length()<3||name.length()>10){
            throw new RuntimeException();
        }
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        if(age < 18 || age > 40){
            throw new RuntimeException();
        }
        this.age = age;
    }
}

自定义异常

/**
 * 这是一个自定义异常类
 * 命名格式:异常名+Exception
 * 运行时异常继承Runnable类:表示由于参数错误而导致的问题
 * 编译时继承Exception类:提醒程序员检查本地信息
 */
public class NameFormationExcepter extends RuntimeException{
    //创建空参构造和有参构造方便调用
    public NameFormationExcepter() {
    }

    public NameFormationExcepter(String message) {
        super(message);
    }
}

public void setName(String name) {
        //这里可以使用抛出异常,如果输入不合法,则不能进行赋值
//        if(name.length()<3||name.length()>10){
//            throw new RuntimeException();
//        }

        //使用异常类
        if(name.length()<3||name.length()>10){
            throw new NameFormationExcepter(name + "这个姓名不符合格式要求");
        }
        this.name = name;
    }

public static void main(String[] args){
        GrilFriend grilFriend = new GrilFriend();
        Scanner sc = new Scanner(System.in);
        while (true) {
            try {
                grilFriend.setName(sc.next());
                grilFriend.setAge(sc.nextInt());
                break;
            }catch (NameFormationExcepter n){
                n.printStackTrace();
            }
            catch (RuntimeException e) {   //父类异常放在下面
                System.out.println("输入格式有误,请重新输入!");
            }
        }
        System.out.println("grilFriend:"+grilFriend.getName()+" "+grilFriend.getAge());
        System.out.println("结束");
    }

标签:Java,name,age,System,学习,grilFriend,异常,public
From: https://www.cnblogs.com/zkit/p/17152808.html

相关文章

  • 2月24日学习总结
    上午关于操作技巧ctrl+shift+tab左移标签栏;ctrl+tab右移标签栏错误码详细介绍《谈谈接口错误码》​​https://www.jianshu.com/p/d1fba0068b36​​我的理解:就如404、403这种......
  • React Native学习笔记----React Native简介与环境安装
    ReactNative的基础是React,是在web端非常流行的开源UI框架。要想掌握ReactNative,先了解React框架本身是非常有帮助的。一、什么是ReactNative1.1ReactNati......
  • 【JavaScript】27_浅拷贝和深拷贝 + 对象的复制
    7、浅拷贝和深拷贝浅拷贝(shallowcopy)通常对对象的拷贝都是浅拷贝浅拷贝顾名思义,只对对象的浅层进行复制(只复制一层)如果对象中存储的数据是原始值,那么拷贝的深浅是不重要浅......
  • 【JavaScript】28_数组的常用方法
    9、数组的方法push()向数组的末尾添加一个或多个元素,并返回新的长度pop()删除并返回数组的最后一个元素unshift()向数组的开头添加一个或多个元素,并返回新的长度shift()删......
  • java代码上传文件,接口consumes = "multipart/*",headers = "content-type=multipart/f
    publicstaticStringdoPost(Stringurl,StringfileName,Filefile){CloseableHttpClienthttpClient=null;CloseableHttpResponseresponse=null;Str......
  • 阿里云ACP学习笔记-负载均衡SLB-弹性伸缩AS-对象存储OSS
    9负载均衡SLBECS+SLB+AS CDN              协议支持:  SSL证书管理:       10弹性伸缩AS 11对象存储OSS ......
  • java代码转发文件流,前端下载文件流
    后端文件流转发代码publicstaticvoiddoGetFile(HttpServletResponsehttpResponse,Stringurl){CloseableHttpClienthttpClient=null;CloseableH......
  • java 反射
    总结一句话就是:在程序运行中根据业务需要由jvm动态获取Class对象来创建对象、执行方法等操作。是动态和灵活的而不是事先代码写死获取Class三种方法:类.class;对象.g......
  • java int 引用传递
    integer是final,不可变的,所以也无法实现引用传递的功能。解决方案int[]做一个包装类org.apache.commons.lang.mutable.MutableIntjava.util.concurrent.atomic.Atomi......
  • Java的特性和优点,三大版本,JDK,JRE,JVM
    Java的特性和优点面对对象跨平台性简单高性能分布式动态性多线程安全的健壮的Java的三大版本JavaSE:标准版(桌面程序,控制台开发...)JavaME:......