首页 > 编程语言 >Java学习7

Java学习7

时间:2025-01-21 18:58:37浏览次数:3  
标签:try Java 抛出 学习 println catch 异常 public

一、异常概念、异常分类

ArrayIndexOutofBoundsException 数组下标越界异常

NullPointerException 空指针异常

StringIndexOutofBoundsException 字符串下标越界异常 Char charAt(int index)

ArithmeticException 算数异常

ClassCastException

public class Throwable

异常的由来:Java是纯面向对象的语言,异常就是Java用面向对象的思想将不正常的情况进行封装

比如数组下标只是0-5,你找下标6,那么就会报数组下标越界异常

异常的分类:

Error:非常严重的错误,环境、线程、虚拟机等问题

Exception:并不是严重的错误

Exception分为

                编译时异常:写代码时要处理的异常,程序正确,但是因为一些条件不满足,程序报错

                运行时异常:程序存在bug,代码有问题

二、异常的处理

try {
需要检查的代码(可能会抛出异常,也可能不会抛出异常)
        } catch(异常的类型   异常类型的变量) {
捕获异常后要处理异常
} finally {
一定会被执行的代码(不管异常抛不抛出都会执行)
        }

@Test
public void test2() {
    //运行时异常:运行的时候抛出的异常,是程序员自己写的代码有问题
    //java.lang.ArithmeticException: / by zero
    //int num = 1 / 0;

    String str = null;
    System.out.println(str.toUpperCase());

    //编译时异常:未雨绸缪
    //Unhandled exception: java.io.FileNotFoundException
    try {
        // 需要检查的代码(可能会抛出异常,也可能不会抛出异常)
        FileInputStream fileInputStream = new FileInputStream("a.txt");
        System.out.println("ExceptionDemo.test2 try");
    } catch (FileNotFoundException e) {
        //捕获异常后要处理异常
        e.printStackTrace();
    } finally {
        //一定会被执行的代码(不管异常抛不抛出都会执行)
        System.out.println("finally");
    }
    System.out.println("ExceptionDemo.test2");
}

三、编译时异常(非运行时异常、检查异常)

写代码时必须要处理的异常,不处理就报错

处理方法:1.try-catch 捕获这个异常,自己处理了这个异常    2.throws抛出异常,我不处理这个异常,抛出异常

@Test
public void test3(){
    //加载jdbc驱动
    try {
        Class.forName("com.mysql,jdbc,Driver");
    } catch (ClassNotFoundException e) {
        //throw new RuntimeException(e);
        e.printStackTrace();
    }
    System.out.println("ExceptionDemo.test3");
}
public  void  test35(){
    try {
        show();
    } catch (ClassNotFoundException e) {
        //throw new RuntimeException(e);
        e.printStackTrace();
    }
}

public void show() throws ClassNotFoundException {
    Class.forName("com.mysql,jdbc,Driver");
}

四、多重代码捕获块(多个catch)

try {
需要检测的代码(可能会抛出异常,也可能不会抛出异常)
} catch (异常的类型1 异常类型的变量1) {
捕获异常后处理异常
} catch (异常的类型2 异常类型的变量2) {
捕获异常后处理异常
} catch (异常的类型3 异常类型的变量3) {
捕获异常后处理异常
} finally {
一定会被执行的代码(不管异常抛不抛出都会执行,例如数据库释放连接)
}

@Test
public void test45() {
    try {
        FileInputStream fileInputStream = new FileInputStream("a.txt");
        fileInputStream.read();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        System.out.println("finally");
    }

    //FileNotFoundException extends IOException
    try {
        FileInputStream fileInputStream = new FileInputStream("a.txt");
        fileInputStream.read();
    } catch (IOException e) {
        e.printStackTrace();
    } /*catch (FileNotFoundException e) {
        //Exception 'java.io.FileNotFoundException' has already been caught
        e.printStackTrace();
    }*/ finally {
        System.out.println("finally");
    }
}

五、自定义异常

1.所有的异常的都是Throwable的子类

2.如果写一个运行时异常,需要继承RuntimeException

3.如果要写一个编译时异常,继承Exception

public class MeiQianException extends Exception{

    //message代表抛出这个异常要打印的错误信息
    public MeiQianException(String message) {
        super(message);
    }
}

@Test
public void test22() {
    try {
        quQian(1900);
    } catch (MeiQianException e) {
        e.printStackTrace();
    }
}

public void quQian(double money) throws MeiQianException {
    if (money >= 1000) {
        throw new MeiQianException("钱不够");
    }
    System.out.println("钱够了");
}

六、throws、throw

throws是在方法签名上

throw是在代码中抛出异常

 public void quQian(double money) throws MeiQianException {
        if (money>=1000){
            throw  new MeiQianException("钱不够");
        }
        System.out.println("钱够了");
    }
}

标签:try,Java,抛出,学习,println,catch,异常,public
From: https://blog.csdn.net/weixin_67882736/article/details/145287363

相关文章

  • 为什么要学习C++?
            在编程语言的广阔天地中,C++以其独特的魅力和强大的功能占据着重要的一席之地。尽管它并非新兴的热门语言,学习曲线也相对陡峭,但这丝毫没有阻挡开发者们对它的热情。那么,究竟为什么要学习C++呢?接下来,我们将深入探讨其中的缘由。一、卓越的性能表现    ......
  • 强化学习
    一.简介    深度学习、强化学习和深度强化学习是机器学习的三个重要子领域。它们有着各自独特的应用场景和研究目标,虽然都属于机器学习的范畴,但各自的实现方式和侧重点有所不同。1.1   深度学习与强化学习1.1.1深度学习    深度学习是一种基于神经网络的......
  • JAVA关于国际手机号的校验
    背景:做跨境业务的时候,会有全球手机号的校验,这个时候正则几乎没用了,只能借助第三方maven坐标<dependency><groupId>com.googlecode.libphonenumber</groupId><artifactId>libphonenumber</artifactId><version>8.12.10<......
  • java过滤器实现全局的简繁体转化
    背景:因为是国外项目,有些国家和地区希望默认给繁体,也希望谷歌抓包抓源代码中是繁体推广首先使用到的是opencc库,值得一提的是前端也有,这样就不会有库对库的冲突了maven仓库<dependency><groupId>com.github.houbb</groupId><artifac......
  • java业务逻辑判断
       在平时的业务开发中,空指针出现的频率是比较高的bug,在出现空指针的时候,很多小伙伴都是习惯性地加!=null的判断,这个bug就能解决。当代码中频繁出现!=null的判断时,我们就会很头疼,能不能高效、优雅地做这个判断?答案当然是可以的。1.在做!=null的判断时,请停顿一下,......
  • 将机器学习算法移植到低端MCU上的实用指南
    将机器学习算法移植到低端MCU上的实用指南在物联网(IoT)和边缘计算迅猛发展的今天,将智能功能嵌入到资源有限的低端单片机(MicrocontrollerUnit,MCU)上,已经成为许多开发者和工程师追求的目标。然而,这一过程充满挑战,但只要掌握正确的方法,也能在低端MCU上实现高效的机器学习应用。......
  • Django学习笔记(安装和环境配置)-01
    Django学习笔记(安装和环境配置)-01一、创建python环境1、可以通过安装Anaconda来创建一个python环境#创建一个虚拟python环境condacreate-ndjangopython=3.8#切换激活到创建的环境中activatedjango2、安装django#进入虚拟环境中安装django框架pipinstal......
  • 【转】[JavaScript] textContent 用法
    转自:kimi.ai在JavaScript中,textContent是一个用于操作DOM元素文本内容的属性。它允许你获取或设置指定元素及其子元素的文本内容。以下是关于textContent的详细用法和特点:1.获取文本内容textContent可以获取指定元素及其所有子元素的文本内容,忽略HTML标签。例如:HTM......
  • Linux学习笔记——vim编辑器的使用
    sudo    提权命令,在没有权限执行的时候,在命令前面加上该命令就会使用root身份进行执行。注:输入密码时看不见密码,输入正确即可。vi/vim命令:终端下编辑文件的首选工具。三种模式:1.命令模式:vim        文件名进入文件默认进入命令模式,不能编辑。后续按esc进入......
  • 我的 Python 学习之旅:从入门到实践
    在当今数字化时代,编程语言成为了开启无数可能的钥匙,而Python以其简洁易读、功能强大的特性吸引了众多学习者。我也踏上了这条学习Python的奇妙旅程,下面就来分享一下我的学习过程。一、学习动机的萌芽最初接触Python,是听闻它在数据科学、人工智能、自动化脚本等多个领域......