2023.4.12

news2024/9/21 23:34:08

文章目录

  • 一:try catch处理异常
    • 1:原理:
    • 2:catch中如何处理异常
    • **3:try-catch-finally**
    • 4:多重catch
    • 5:异常的分类
    • 6:throw和throws的区别
    • 7:练习题
    • 8:重载和重写的异常
    • 9:自定义异常
  • 使用Calendar做个小日历

一:try catch处理异常

public class Test2 {
    public static void main(String[] args) {
        try{
            Scanner scanner = new Scanner(System.in);
            int a = scanner.nextInt();
            int b = scanner.nextInt();
            System.out.println(a / b);
        } catch (Exception ex) {
            System.out.println("对不起,程序出现异常!");
        }
        System.out.println("最后一句话");
    }
}

1:原理:

把可能出现异常的代码放入try代码块中,然后将异常封装为对象,被catch后面的()中的那个异常对象接收,接收以后:执行catch后面的{}里面的代码,然后try-catch后面的代码,该怎么执行就怎么执行。

详细说一下:

(1)try中没有异常,catch中代码不执行。

(2)try中有异常,catch进行捕获:如果catch中异常类型和你出的异常类型匹配的话:走catch中的代码–》进行捕获, 如果catch中异常类型和你出的异常类型不匹配的话:不走catch中的代码–》没有捕获成功,程序相当于遇到异常了,中断了,后续代码不执行

注意:

(1)try中如果出现异常,然后用catch捕获成功的话,那么try中后续的代码是不会执行的。

(2)如果catch捕获异常成功,那么try-catch后面的代码该执行还是执行没有影响。

2:catch中如何处理异常

package P1.package2;

import java.util.Scanner;

public class Test2 {
 public static void main(String[] args) {
     try{
         Scanner scanner = new Scanner(System.in);
         int a = scanner.nextInt();
         int b = scanner.nextInt();
         System.out.println(a / b);
     } catch (Exception ex) {
         // 处理方法1:什么都不写,什么都不做

         // 处理方法2:输出自定义异常信息
         System.out.println("对不起,程序出现异常!");
         // 处理方法3:打印异常信息
         //      3.1:调用tostring方法,打印异常的类名(全限定路径)
         System.out.println(ex.toString());
         //      3.2: 显示异常描述信息对应的字符串,如果没有就显示null
         System.out.println(ex.getMessage());
         //      3.3::显示异常的堆栈信息:将异常信息捕获以后,在控制台将异常的效果给我们展示出来,方便我们查看异常
         ex.printStackTrace();
         // 处理方法4:抛出异常
         throw ex;
     }
     System.out.println("最后一句话");
 }
}

3:try-catch-finally

【1】在什么情况下,try-catch后面的代码不执行?

(1)throw抛出异常的情况

(2)catch中没有正常的进行异常捕获

(3)在try中遇到return

【2】怎么样才可以将 try-catch后面的代码 必须执行?

只要将必须执行的代码放入finally中,那么这个代码无论如何一定执行。

【3】return和finally执行顺序?

先执行finally最后执行return

【4】什么代码会放在finally中呢?

关闭数据库资源,关闭IO流资源,关闭socket资源。

【5】有一句话代码很厉害,它可以让finally中代码不执行!

[System.exit(0); //终止当前的虚拟机执行](file:///C:/Users/86159/Downloads/System.exit(0);/终止当前的虚拟机执行)

package P1.package2;

import java.util.Scanner;

public class Test2 {
 public static void main(String[] args) {
     try{
         Scanner scanner = new Scanner(System.in);
         int a = scanner.nextInt();
         int b = scanner.nextInt();
         System.out.println(a / b);
         // 终止当前虚拟机执行
         System.exit(0);
         return;
     } catch (Exception ex) {
         // 处理方法1:什么都不写,什么都不做

         // 处理方法2:输出自定义异常信息
         System.out.println("对不起,程序出现异常!");
         // 处理方法3:打印异常信息
         //      3.1:调用tostring方法,打印异常的类名(全限定路径)
         System.out.println(ex.toString());
         //      3.2: 显示异常描述信息对应的字符串,如果没有就显示null
         System.out.println(ex.getMessage());
         //      3.3::显示异常的堆栈信息:将异常信息捕获以后,在控制台将异常的效果给我们展示出来,方便我们查看异常
         ex.printStackTrace();
         // 处理方法4:抛出异常
         throw ex;
     }finally {
         System.out.println("最后一句话");
     }
 }
}

/*
12
4
3
Process finished with exit code 0
*/

/*
ww
对不起,程序出现异常!
java.util.InputMismatchException
null
最后一句话
java.util.InputMismatchException
	at java.util.Scanner.throwFor(Scanner.java:864)
	at java.util.Scanner.next(Scanner.java:1485)
	at java.util.Scanner.nextInt(Scanner.java:2117)
	at java.util.Scanner.nextInt(Scanner.java:2076)
	at P1.package2.Test2.main(Test2.java:9)
Exception in thread "main" java.util.InputMismatchException
	at java.util.Scanner.throwFor(Scanner.java:864)
	at java.util.Scanner.next(Scanner.java:1485)
	at java.util.Scanner.nextInt(Scanner.java:2117)
	at java.util.Scanner.nextInt(Scanner.java:2076)
	at P1.package2.Test2.main(Test2.java:9)

Process finished with exit code 1

*/

4:多重catch

【1】try中出现异常以后,将异常类型跟catch后面的类型依次比较,按照代码的顺序进行比对,执行第一个与异常类型匹配的catch语句

【2】一旦执行其中一条catch语句之后,后面的catch语句就会被忽略了!

【3】在安排catch语句的顺序的时候,一般会将特殊异常放在前面(并列),一般化的异常放在后面。

先写子类异常,再写父类异常。

【4】在JDK1.7以后,异常新处理方式:可以并列用|符号连接:

在这里插入图片描述

package P1.package2;

import java.util.InputMismatchException;
import java.util.Scanner;

public class Test2 {
 public static void main(String[] args) {
     try {
         Scanner scanner = new Scanner(System.in);
         int a = scanner.nextInt();
         int b = scanner.nextInt();
         System.out.println(a / b);
         // 终止当前虚拟机执行
         System.exit(0);
         return;
     } catch (ArithmeticException ex) {
         System.out.println("对不起,除数不可以为0");
     } catch (InputMismatchException ex) {
         System.out.println("对不起,你录入的数据不是int类型的数据");
     } catch (Exception ex) {
         System.out.println("对不起,你的程序出现异常");
     } finally {
         System.out.println("最后一句话");
     }
 }
}

5:异常的分类

【1】层次结构:

在这里插入图片描述

注意:程序中语法错误,逻辑错误 都不属于上面的Error,Exception

一般的Exception默认是检查时异常

【2】检查异常:

处理方式1:try-catch嵌套try-catch

package P1.package2;

public class Test3 {
    public static void main(String[] args) {
        //检查异常:
        try {
            try {
                Class.forName("Test3").newInstance();
            } catch (InstantiationException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

处理方式2:多重catch

package P1.package2;

public class Test3 {
    public static void main(String[] args) {
        //检查异常:
        try {
            Class.forName("Test").newInstance();
        } catch (ClassNotFoundException | InstantiationException | IllegalAccessException e) {
            e.printStackTrace();
        }
    }
}

处理方式3:throws

package P1.package2;

public class Test3 {
    public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
        //检查异常:
        Class.forName("Test").newInstance();
    }
}

6:throw和throws的区别

(1)位置不同:

throw:方法内部

throws: 方法的签名处,方法的声明处

(2)内容不同:

throw+异常对象(检查异常,运行时异常)

throws+异常的类型(可以多个类型,用,拼接)

(3)作用不同:

throw:异常出现的源头,制造异常。 (出现问题就地解决)

throws:在方法的声明处,告诉方法的调用者,这个方法中可能会出现我声明的这些异常。然后调用者对这个异常进行处理:要么自己处理要么再继续向外抛出异常。(出现问题先不解决而是甩锅,甩给方法的调用着)

7:练习题

package P1.package2;

public class Test4 {
    // 属性
    private String name;
    private int age;
    private String sex;
    // 方法
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) throws Exception {
        if(sex == "男" || sex == "女") {
            this.sex = sex;
        }else {
            // 制造运行时异常
            //throw new RuntimeException("性别不对!");
            // 制造检查异常
            try {
                throw new Exception();
            } catch (Exception e) {
                e.printStackTrace();
            }
            // 甩锅法
            throw new Exception();
        }
    }

    @Override
    public String toString() {
        return "Test4{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", sex='" + sex + '\'' +
                '}';
    }

    public Test4() {
    }

    public Test4(String name, int age, String sex) throws Exception {
        this.name = name;
        this.age = age;
        /*
        try {
            this.setSex(sex);
        } catch (Exception e) {
            e.printStackTrace();
        }
        */
        this.setSex(sex);
    }

    //内部类
    static class text5 {
        public static void main(String[] args) throws Exception {
            Test4 t1 = new Test4();
            try {
                t1.setSex("sdasd");
            } catch (Exception e) {
                e.printStackTrace();
            }
            Test4 t2 = new Test4("asd",10,"sdas");
        }

    }
}

8:重载和重写的异常

【1】重载:

没啥关系

在这里插入图片描述

【2】重写:

子类 <= 父类

在这里插入图片描述

9:自定义异常

在这里插入图片描述

如果继承的是运行时异常,那么在使用的时候无需额外处理

如果继承的是检查异常,那么使用的时候需要try-catch捕获或者throws向上抛

使用Calendar做个小日历

package P1.package3;

import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Scanner;

// Calendar训练
public class Test2 {
    public static void main(String[] args) {
        System.out.println("请输入你想要查看的日期:(提示:请按照例如2012-5-6的格式书写)");
        Scanner scanner = new Scanner(System.in);
        // 输入字符串类型的日期
        String date = scanner.next();
        // 将String类型转换成Calendar类型
        // 分解法1:String -> Java.sql.Date  2: Java.sql.Date -> Calendar
        java.sql.Date sqdate = java.sql.Date.valueOf(date);
        Calendar cal = new GregorianCalendar();
        cal.setTime(sqdate);

        System.out.println("日"+"\t"+"一"+"\t"+"二"+"\t"+"三"+"\t"+"四"+"\t"+"五"+"\t"+"六");
        // 获取当月中的最大日期
        int maxDate = cal.getActualMaximum(Calendar.DATE);
        // 获取当月中的这一天
        int nowdate = cal.get(Calendar.DATE);
        // 把当月的这一天设置成当月的第一天
        cal.set(Calendar.DATE,1);
        // 获取当月第一天在周几
        int num = cal.get(Calendar.DAY_OF_WEEK);
        int count = 0;
        for (int i = 1; i < num; i++) {
            System.out.print("\t");
            count++;
        }
        for (int i = 1; i <= maxDate; i++) {
            if(i == nowdate) {
                System.out.print(i+ "*" + "\t");
            }else {
                System.out.print(i + "\t");
            }
            count++;
            if(count == 7) {
                System.out.println();
                count = 0;
            }
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/416765.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python后端架构演进

做了3年的后端开发, 经历一款SaaS产品从0到10(还没有到100, 哈哈哈)的过程, 3年间后端的架构逐步演变, 在微服务的实践过程中遇到的问题也越来越多, 在这里总结下. 产品是一款服务于人力资源的SaaS在线服务, 面向HR有Web Android/iOS 小程序多个客户端, 后端采用RESTful风格AP…

表id自增的方法

数据库主键id自增的方法&#xff0c;列举了几种如下 一、数据库自增&#xff08;部分数据库支持&#xff09; 创建表的时候设置id自增即可&#xff0c;或者后期修改表id自增 # mysql 语法 create table your_table_name(id bigint(20) not null auto_increment primary key …

Android技术分享 | 一行代码实现屏幕、声音采集

之前发布过一行代码实现安卓屏幕采集编码&#xff0c;并介绍了如何屏幕采集编码并进行了封装&#xff0c;简单的调用即可实现MediaProjection权限申请、H264硬编码、错误处理等功能。本文将介绍新增的功能&#xff0c;还是只需一行代码即可实现屏幕、声音采集。 一行代码实现屏…

【原创】万字长文讲解AI绘画基本技术原理

作者&#xff1a;黑夜路人 时间&#xff1a;2023年4月12日 AIGC是什么 AIGC - AI Generated Content &#xff08;AI生成内容&#xff09;&#xff0c;对应我们的过去的主要是 UGC&#xff08;User Generated Content&#xff09;和 PGC&#xff08;Professional user Generat…

c语言数据结构——树形结构之树和二叉树

前言 二叉树有什么用&#xff1f; 二叉树应用非常广泛。 在操作系统源程序中&#xff0c;树和森林被用来构造文件系统。我们看到的window和linux等文件管理系统都是树型结构。在编译系统中&#xff0c;如C编译器源代码中&#xff0c;二叉树的中序遍历形式被用来存放C 语言中的…

如何从阿里云盘下载大文件到自己的电脑或者租赁的服务器中?

首先进入阿里云盘的github项目处&#xff0c;里面有详细的说明&#xff0c;入口&#xff1a;https://github.com/tickstep/aliyunpan Ubuntu挂载阿里云盘作为自己的硬盘 如果你是Ubuntu系统的话&#xff0c;直接在使用apt命令在电脑安装阿里云盘即可&#xff0c;命令如下&…

Oracle基础部分二(伪列/表、单个函数、空值处理、行列转换、分析函数、集合运算)

Oracle基础部分二&#xff08;伪列/表、单个函数、空值处理、行列转换、分析函数、集合运算&#xff09;1 伪列、伪表1.1 伪列1.2 伪表2 单个函数2.1 常用字符串函数2.1.1 length() 询指定字符的长度2.1.2 substr() 用于截取字符串2.1.3 concat() 用于字符串拼接2.2 常用数值函…

生成树端口选举

所有交换机运行RSTP,SW1优先级4096,SW2优先级4096,SW3优先级8192,SW1的G0/0/1、G0/0/2接口通过手动模式加入Eth-Trunk 1,SW1的G0/0/3、G0/0/4接口通过手动模式加入Eth-Trunk 2,SW2的G0/0/1、G0/0/2接口通过手动模式加入Eth-Trunk 1,SW3的G0/0/1、G0/0/2接口通过手动模式…

【Unity VR开发】结合VRTK4.0:攀爬功能

语录&#xff1a; 不要因为开心消失了而感到难过&#xff0c;宇宙正在努力为你准备下一场惊喜&#xff0c;你要给宇宙一点时间。 前言&#xff1a; 攀爬是虚拟现实中一种有趣的运动&#xff0c;可以使用定制的可交互预制体轻松创建这种机制来处理攀爬动作&#xff0c;以及处理用…

ICRA 2023 | 具身感知中学习探索信息丰富的轨迹和样本

我们正在见证感知模型的巨大进步&#xff0c;特别是在大规模互联网图像上训练的模型。 然而如何有效地将这些感知模型推广到具身环境的研究还远远不够&#xff0c;这些研究将有助于推进各种相关应用&#xff08;例如家用机器人&#xff09;的发展。为了使用尽可能少的标注&…

RabbitMQ 安装体验

前言 RabbitMQ是一个开源的遵循 AMQP协议实现的基于 Erlang语言编写&#xff0c;即需要先安装部署Erlang环境再安装RabbitMQ环境。 一、Erlang下载安装 https://packagecloud.io/rabbitmq/erlang 上执行命令 此时&#xff0c;Erlang的rpm包下载完成&#xff0c;见下图。 wg…

Servlet/Web开发概述/Http响应

一、web开发概述 学习web开发&#xff0c;需要先安装一台web服务器&#xff0c;将开发好的web项目部署在web服务器中供外界访问. Web服务器是指驻留于因特网上某种类型计算机的程序&#xff0c;可以放置资源文件&#xff0c;别人可以访问、服务器可以做出响应&#xff1a; 可…

基于PCA与LDA的数据降维实践

基于PCA与LDA的数据降维实践 描述 数据降维&#xff08;Dimension Reduction&#xff09;是降低数据冗余、消除噪音数据的干扰、提取有效特征、提升模型的效率和准确性的有效途径&#xff0c; PCA&#xff08;主成分分析&#xff09;和LDA&#xff08;线性判别分析&#xff0…

centos7怎么查看防火墙以及添加白名单

方法一&#xff1a;systemctl status firewalld 防火墙的开启、关闭、禁用命令 &#xff08;1&#xff09;设置开机启用防火墙&#xff1a;systemctl enable firewalld.service &#xff08;2&#xff09;设置开机禁用防火墙&#xff1a;systemctl disable firewalld.servic…

积化和差公式推导

积化和差公式是初等数学三角函数部分的一组恒等式&#xff0c;积化和差公式将两个三角函数值的积化为另两个三角函数值的和的常数倍&#xff0c;达到降次的作用。 基本上记不住这好几个哥们,不过幸运的是,利用诱导公式可以一式生万式子,记住一个就好了 式子1:sin⁡α∗cos⁡β1…

【3D建模工具】上海道宁与McNeel为您提供强大的专业3D造型软件

Rhino可以对 NURBS曲线、曲面、实体、 细分几何图形 (SubD)、点云和多边形网格 进行创建、编辑、分析、记录、 渲染、动画制作与转换 只要硬件条件允许 不受复杂度、阶数与尺寸大小的限制 Rhino 7使用SubD工具 可以建立有机形状 使用Rhino.Inside.Revit 做为Revit附加…

2023MathorCup数模A题思路数据代码论文【全网最全分享】

文章目录赛题思路赛题详情参赛建议&#xff08;个人见解&#xff09;选择队友及任务分配问题&#xff08;重要程度&#xff1a;5星&#xff09;2023MathorCup数模A题思路数据论文代码【最新】赛题思路 (赛题出来以后第一时间在CSDN分享) 最新进度在文章最下方卡片&#xff0c;…

kruskal重构树

一&#xff0c;定义 kruskal是求最小生成树的一种算法。最小生成树 但是这种结合并查集的特殊方法给了他许多特殊的性质。可以用于解决树上瓶颈边权之类的问题 结合这种算法而诞生的就是——kruskal重构树 二&#xff0c;建树思路及其性质 kruskal求最小生成树是将边权小的…

【超详细】小白初探FME--获取等时圈

在规划分析过程中&#xff0c;往往会涉及等时圈的概念。什么是等时圈呢&#xff1f;小编帮你百度过了&#xff0c;网上的说法是&#xff1a;等时圈是指从某点出发&#xff0c;以某种交通方式在特定时间内能到达的距离覆盖的范围。比如我们在规划设计中接触到的15分钟生活圈就是…

HTML5支持的视频文件格式和音频文件格式有哪些?

在 HTML5 标准中, 我们有了新的 <audio> 和 <video> 标签, 分别可以引入视频和音频文件的标签 那么这些标签又可以支持哪些文件格式呢 ? 格式支持 视频文件格式 MP4&#xff1a;MPEG-4 Part 14&#xff0c;支持H.264编码。几乎所有的浏览器都支持该格式。 Web…