首页 > 编程语言 >添砖Java(十二)——异常,异常捕获,常见异常方法

添砖Java(十二)——异常,异常捕获,常见异常方法

时间:2024-05-29 17:03:25浏览次数:20  
标签:10 Exception Java 添砖 int 我们 异常 public

异常:

定义:异常通俗来讲,其实就是你写出bug来了,编译器给你报错了。

    public static void main(String[] args)throws Exception {
        int z=10/0;
    }

 这个代码虽然说是可以运行,但是编译器会报错。

因为10不能去除以0。

异常分为两种,一种是运行时异常,另一种时编译时异常(就是运行到那就不会再运行了),然后异常都是一个类异常new出来的对象我们去接收就行了。

首先我们要知道异常类最大的爹是Exception,然后往下细分出很多,这里不举例api文档有。

编译时异常:

跟这个差不多。

捕获异常:

我们一个是发现了异常并解决异常(温柔的方式)。另一种是直接让你编译时异常(暴力的方式),让你程序直接崩掉,有点像c++中的assert。

温柔的方式:

我们需要将可能出现异常的代码写在try里边然后再用catch去捕获异常

        try {
            int i=10/0;//出现异常会去new一个异常类
        }catch (RuntimeException e) //e去捕获了new出来的异常类
        {
            System.out.println("10不能去除以0");//打印为什么错了
        }

这个方法不会让你的程序停止,会继续运行。

暴力的方式:

暴力的方式就是我们向上抛出异常

这个图应该很形象,但是这是编译器自己弄识别的,但是我们也可以自己去创建一个异常。

我们就来举个栗子:首相我们来个场景,我们需要去获取一个0-120的年龄,由用户自己输入,然后如果输入错了就直接抛出异常并终止程序。

    public  static void get(int a)throws  Exception//2.去获取到异常
    {
        if(a>=0&&a<=120)
        {}
        else {
            throw new Exception("请输入0-120的数字");//1.创建一个异常向上抛出
        }
    }

    public static void main(String[] args) throws Exception{    //4.获取主方法代码存在的异常
        Scanner sc=new Scanner(System.in);
        get(sc.nextInt());//3.获取到了异常并且抛出异常
    }

因为这个异常时一级一级传的,最终要到jvm里边,所以我们需要这样写。这就是另一种场景,但是作为用户你不想让程序崩掉,想以温柔的方式提醒,并且改正,这时候需要怎么办呢?

我们就可以这样设计:

    public  static void get(int a)throws  Exception
    {
        if(a>=0&&a<=120)
        {}
        else {
            throw new Exception("请输入0-120的数字");
        }
    }

    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        while(true)
        {
            try {
                get(sc.nextInt());//去get一个年龄
                break;            //get到了就退出循环
            } catch (Exception e) {
                System.out.println("请重新输入");
            }
        }
    }

这种方法还是非常喵~的。最简单的两种方法就搞好了。
 

常见异常方法:

getMessage:

就是返回你带参构造的那串字符,所以我们就可以这样用了

打印的就是你传入的字符。

printStackTrace:

就是打印原本的异常(就是红字的那种异常),并且不让你的程序崩掉。举个栗子:

还需运行下面的代码

自定义异常:

我们其实也可以去写一个异常类,比如我们在get年龄的时候我们可以自己去造一个,这样也可以提高代码的可读性。

class getageException extends RuntimeException//继承运行异常类
{
    public getageException() {
    }
    public getageException(String message) {
        super(message);
    }
}

public class exception {

    public  static void get(int a)throws  Exception
    {
        if(a>=0&&a<=120)
        {}
        else {
            throw new getageException("请输入0-120的数字");
        }
    }

    public static void main(String[] args) throws Exception{
    Scanner sc=new Scanner(System.in);
        while(true) {
            try {
                get(sc.nextInt());
                break;
            } catch (getageException e) {
                System.out.println(e.getMessage());
            }
        }
    }
}

其实我感觉有点鸡肋在这种场景,写法上有点装b,你为什么不直接用个循环呢?

比如这样写:

但是你不得不承认,他在z=10/0;这种场景很好用!~

标签:10,Exception,Java,添砖,int,我们,异常,public
From: https://blog.csdn.net/zgwnb666/article/details/139297555

相关文章

  • javascript右键菜单
      文章来源:https://segmentfault.com/a/1190000023098787 HTML<h1>Clickonblanktoshowcustomcontextmenus</h1>CSS.custom-context-menu{position:fixed;border:1pxsolid#ccc;list-style:none;padding:4px0;border-radius:......
  • 关于java的环境变量配置
    java概念1.sun,oraclejdk,openJdk2.jdk:javadevkit(java开发工具包)3.jre:jave运行时环境4.jvm:java虚拟机2.为啥要配置环境变量?让操作系统找到jave/bin目录位置,这样在任何目录都可以使用javecjavajavap,能够让依赖java的软件系统也能找到java配置环境变量:在w......
  • Java虚拟机栈
    什么是虚拟机栈每个线程运行时所需要的内存,称为虚拟机栈。每个栈由多个栈帧(frame)组成,对应着每次方法调用时所占用的内存每个线程只能有一个活动栈,对应着当前正在执行的那个方法。垃圾回收是否涉及栈内存垃圾回收主要指就是堆内存,当栈帧弹栈以后,内存就会释放。栈内存分配越......
  • Java语言,MySQL数据库;SSM 心理咨询预约管理系统19086(免费领源码)计算机毕业设计项目推荐
    目 录摘要1绪论1.1背景及意义1.2研究现状1.3ssm框架介绍1.4论文结构与章节安排2 心理咨询预约管理系统系统分析2.1可行性分析2.1.1技术可行性分析2.1.2经济可行性分析2.1.3法律可行性分析2.2系统功能分析2.2.1功能性分析2.2.2非功能......
  • Java堆
    作用线程共享的区域:主要用来保存对象实例,数组等,内存不够则抛出OutOfMemoryError异常。组成年轻代+老年代。年轻代被划分为三部分,Eden区和两个大小严格相同的Survivor区。老年代主要保存生命周期长的对象,一般是一些老的对象。Jdk1.7和1.8的区别1.7中有有一个永久代,存储的是......
  • 2024年华为OD机试真题-传递悄悄话-Java-OD统一考试(C卷D卷)
     2024年OD统一考试(D卷)完整题库:华为OD机试2024年最新题库(Python、JAVA、C++合集) 题目描述:给定一个二叉树,每个节点上站着一个人,节点数字表示父节点到该节点传递悄悄话需要花费的时间。初始时,根节点所在位置的人有一个悄悄话想要传递给其他人,求二叉树所有节点上的人都接收......
  • windows添加计划任务异常--问题总结
    首先确定.bat脚本双击可正常运行当使用windows添加计划任务后,运行无报错(看历史记录正常运行成功),但是脚本内容实际未成功可以看下以下内容:1.查看脚本名是否含有中文,改为全英文2.将执行用户改成SYSTEM3.脚本中添加切换到脚本文件夹的命令4.任务重添加脚本时添加脚本所在目录......
  • Java实现一个简单的计算器
    当实现一个简单的计算器时,我们可以创建一个Java程序,该程序接受用户输入的两个数字和一个运算符,然后执行相应的数学运算并输出结果。下面是一个简单的Java代码示例,用于实现这样的计算器:importjava.util.Scanner;publicclassSimpleCalculator{publicstaticvoid......
  • 28. 【Java教程】Scanner 类
    一直以来,我们都使用System.out.println()方法向屏幕打印内容,那么如何接收输入的内容呢?本小节所学习的Scanner类就可以实现对输入内容的接收。在本小节,我们将学习Scanner类的定义,如何使用Scanner类以及其常用方法,在学完这些基础知识后,我们会在最后学习一个比较有趣的实例程序。......
  • 零基础学Java第二十六天之Stream流
    Stream简介Stream(流)是数据渠道,用于操作数据源(集合、数组等),生成元素序列。换言之,集合是存储数据的容器,流使用操作这些数据的Stream可以对集合进行非常复杂的查找、过滤、映射数据等操作,类似于SQL执行数据库查询。Stream提供了一种高效且易于使用的处理数据的方式注意:St......