Java面向对象程序设计 第七章总结_方法的返回值被错误地处理为一个非空的对象-程序员宅基地

技术标签: exception  jvm  Java  java  编程语言  


1. 简述Java Error类与Exception类的区别。

  • 共同点:
    • 都继承自第一层次的Object和第二层次的Throwable类
  • 不同点:
    • Error类:不是需要程序进行捕获和处理的,Error抛出后程序停止运行。
    • Exception类:虚拟机系统根据异常的类型产生相应的异常对象,程序可以继续对抛出的异常进行捕获和相应的处理。

2. 简述异常处理的两种方式,并举例说明区别。

  • 声明抛出处理:

    • RunTimeException或其子类的异常,属于默认声明抛出。可以对其不做任何声名抛出或处理,交由调用该方法的地方处理(main方法交由JVM处理),编译时不会对可能产生异常地方给出提示;
    • 其他异常类必须显示声明抛出。 例如
      public static void main(String args[]) throws IOExceprion;
  • 程序捕获处理:
    通过使用try - catch - [finally]语句块,用来对可能产生异常的代码产生的异常进行捕获,并根据其异常类型进行不同的操作。


3. 选取RuntimeException类的五个子类,编写抛出并捕获上述子类异常的程序。

import java.util.EmptyStackException;
import java.util.Stack;

class A{
    
    int v = 6;
    public int getV() {
    
        return v;
    }
}

public class ExcpOp {
    
    public static void Arithmetic() {
    
        int a = 6, b = 0;
        try{
    
            int c = a / b;
        } catch (ArithmeticException ae) {
    
            System.out.println(ae.getClass().getName()+" has been throw");
        } finally {
    
            System.out.println("ArithmeticEp is over!\n");
        }
    }

    public static void NullPointer() {
    

        try {
    
            A a = null;
            a.getV();
        } catch (NullPointerException npe) {
    
            System.out.println(npe.getClass().getName()+" has been throw");
        } finally {
    
            System.out.println("NullPointer is over!\n");
        }
    }

    public static void EmptyStack() {
    
        Stack s = new Stack();

        try{
    
            s.push(5);
            s.pop();
            System.out.println("Pop 1");
            s.pop();
            System.out.println("Pop 2");
        } catch (EmptyStackException ese) {
    
            System.out.println(ese.getClass().getName()+" has been throw");
        } finally {
    
            System.out.println("EmptyStack is over!\n");
        }
    }

    public static void IndexOutOfBounds() {
    
        int[] a = new int[3];
        for (int i = 0; i<3 ; i++ ) {
    
            a[i] = i;
        }
        try{
    
            System.out.println(a[4]);
        } catch (IndexOutOfBoundsException ioe) {
    
            System.out.println(ioe.getClass().getName()+" has been throw");
        } finally {
    
            System.out.println("EmptyStack is over!\n");
        }
    }

    public static void NegativeArraySize() {
    
        try{
    
            int[] a = new int[-3];
        } catch (NegativeArraySizeException nase) {
    
            System.out.println(nase.getClass().getName()+" has been throw");
        } finally {
    
            System.out.println("NegativeArraySize is over!\n");
        }
    }

    public static void main(String[] args) {
    
        ExcpOp.Arithmetic();
        ExcpOp.EmptyStack();
        ExcpOp.IndexOutOfBounds();
        ExcpOp.NegativeArraySize();
        ExcpOp.NullPointer();
    }

}


4. 仿照例7.9,自己定义一个异常类,并在某场景下抛出该异常对象。

public class MyException extends Exception{
    
    MyException(String msg) {
    
        super(msg);
    }

    public static void Throw(int a) throws MyException {
    
        if(a <= 666) {
    
            throw new MyException(" 输入不666 ");
        }
    }

    public static void main(String[] args) {
    
        int a = 660;
        try{
    
            MyException.Throw(a);
        } catch (MyException me) {
    
            me.printStackTrace();
            a = 668;
        } finally {
    
            System.out.println("此时 a = "+a);
        }
    }
}


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_45750637/article/details/109248236

智能推荐

PHP反序列化:-程序员宅基地

文章浏览阅读100次。序列化。

初探计算机视觉的三个源头、兼谈人工智能|正本清源_计算机视觉的三个核心问题-程序员宅基地

文章浏览阅读3.4k次,点赞4次,收藏6次。2016-11-24 视觉求索谈话人:杨志宏 视觉求索公众号编辑朱松纯 加州大学洛杉矶分校UCLA统计学和计算机科学教授 Song-Chun Zhu     www.stat.ucla.edu/~sczhu时间: 2016年10月 杨: 朱教授,你在计算机视觉领域耕耘20余年,获得很多奖项, 是很资深的研究人员_计算机视觉的三个核心问题

程序员必学!Gradle源码全解析,看看这篇文章吧!_gradle 6.7.1源码分析-程序员宅基地

文章浏览阅读154次。背景惯例,先简单陈述一下自己的,91年生人,164年三本毕业后在深圳工作,末流小公司,工资13k,无房,无车,无户口。那时候感觉生活也还行,父母有退休金,我基本上不用太操心,女朋友在一起很久了,很体贴,没有怎么要求我。本来生活就这样一帆风顺下去我就满足了,但是去年初,女朋友家里出了一些事情,一点积蓄全给她了,后面疫情来了,家里开始催婚了,我感觉到了压力。目前的工资无法满足生活,虽然这些年来有一点点的提升,但是,房价物价涨的更快,于是我决定跳槽。从去年年底开始瞎投简历,回顾了一下,一共投了33份简历_gradle 6.7.1源码分析

关于Loadrunner并发组函数web_concurrent的注意事项_web_concurrent_start-程序员宅基地

文章浏览阅读5k次。web_concurrent_start函数是并发组开始的标记。组中所有的函数是并发执行的,并发组的结束符为web_concurrent_end 函数。在并发组中,可以包含的函数有:web_url、web_submit_data、web_custom_request、web_create_html_param、web_create_html_param_ex、web_reg_save_param、..._web_concurrent_start

Delphi dbgrideh序号_dbgrideh增加序号和箭头-程序员宅基地

文章浏览阅读267次。数据库里面的数据没有序号的数据,在dbgrideh上新增一列自定义其字段,例如:id。在dbgrideh控件上的‘OnDrawColumnCell’事件下写下代码。在unidatesource的‘OnDataChange’事件下写下。if DataCol = 0 then //设置在第一列。在编码的开头定义i,为integer。_dbgrideh增加序号和箭头

samber/lo 库的使用方法: 处理切片-程序员宅基地

文章浏览阅读1.4k次,点赞27次,收藏26次。是一个 Go 语言库,提供了一些常用的集合操作函数,如 Filter、Map 和 FilterMap。这个库函数太多,因此我决定按照功能分别介绍,本文介绍的是 samber/lo 库中处理切片的函数。主要参考库的README。_samber/lo

随便推点

.Net自定义控件 小结_.net自定义控件需要熟悉哪些东西-程序员宅基地

文章浏览阅读1.1k次。以下内容为转载:写在前面: .Net已经成为许多软件公司的选择,而.Net自定义WinForm界面控件,也成为编程的热点,越来越多的程序员会开发自己需要的自定义界面控件.小作坊网介绍了多种自定义的界面控件,基本了包括了日常所需的各种基本控件,介绍的自定义控件,都对原有的界面控件作了扩展,使之更适用了系统或更美观.下面作一个小结:.Net自定义控件之WinForm的经典O_.net自定义控件需要熟悉哪些东西

TCP版本之TCP Tahoe 和TCP Reno-程序员宅基地

文章浏览阅读6k次。实验目的学习TCP的拥塞控制机制,并了解TCP Tahoe 和 TCP Reno的运行方式。基础知识回顾TCP/IP (Transmission Control Protocol/Internet Protocol)是目前使用最广泛的一组通信协议。TCP所负责的功能包括:将自应用程序收到的信息分成许多较小的数据区段、提供连接导向的服务、提供可靠性服务、提供应用程序与应用和式之间的流量..._tcp reno

Android MediaCodec 简明教程(一):使用 MediaCodecList 查询 Codec 信息,并创建 MediaCodec 编解码器-程序员宅基地

文章浏览阅读1.7k次,点赞13次,收藏30次。最近在学习 Android MediaCodec 相关的知识,准备开个新坑把学习过程记录下来,总结成 MediaCodec 教程。在介绍 MediaCodec 编解码之前,让我们学习一些其他与之配套的组件,今天要讲的是。提示:以下是本篇文章正文内容,下面案例可供参考本文介绍了 MediaCodecList 的基本使用方法,并展示了如何使用 MediaCodecList 来创建 MediaCodec 编解码器。_mediacodeclist

内网穿透 篇四:通过 Cloudflare Tunnel 内网穿透 实现公网访问内网服务-程序员宅基地

文章浏览阅读773次,点赞18次,收藏3次。通过 Cloudflare Tunnel,我们可以直接把内网搭建的服务穿透到公网上,与 frp 不同的是,Cloudflare Tunnel 并不需要购买有公网 IP 的服务器,直接通过 Cloudflare 就可以完成穿透,并且还能使用 80/443 端口。一个域名 (6-9位纯数字的 xyz 域名只需 0.67 美元一年)一张双币信用卡或。

QT 如何把外部程序嵌入到QT界面_qt嵌入外部程序-程序员宅基地

文章浏览阅读5.4k次,点赞4次,收藏52次。一个奇怪但又合乎现实需要的需求,就是把外部程序嵌入到本窗口内,实现外部程序在本窗口的显示。可能外部程序是由其他人开发的,但是想“拿来”作为内部使用,于是乎想把外部程序嵌入到本程序窗口内,让他们更像是一个整体。更有甚者,也可以实现外部程序与本程序之间的通讯。_qt嵌入外部程序

苍穹外卖day8(2)用户下单、微信支付

用户下单因为订单信息中包含了其他业务中的数据,在逻辑处理中涉及了多个其他业务,比如要判断地址簿、购物车数据是否为空(查询地址簿和购物车)订单表字段多,在插入数据的时候,要确保每个字段都有值向订单表插入数据后,也得向订单明细表插入数据:具体来说,就是遍历购物车数据,把购物车中的商品详细信息(菜品、套餐、数量、价格…)赋给订单详情表完成下单后要清空购物车订单支付需要商家号,跳过支付,模拟实现订单支付功能。

推荐文章

热门文章

相关标签