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

智能推荐

记一次分析解决ANR过程_main" prio=5 tid=1 suspended-程序员宅基地

文章浏览阅读8.8k次。ANR即Application Not Responding,一直觉得只要在主线程中注意不要执行耗时操作就不会发生ANR,然而事实告诉我我还是too young too simple,sometimes naive 啊。以前也没遇到过ANR,没分析过ANR,问过同事,同事也说没弄过,没办法只能自己找资料了。ANR问题的分类InputDispatchingTimedOut 应用程序主线程在5秒内没_main" prio=5 tid=1 suspended

模型训练前后显卡占用对比、多卡训练GPU占用分析【一文读懂】_模型训练在0卡上消耗资源比1卡上少-程序员宅基地

文章浏览阅读2.5k次,点赞11次,收藏17次。本次博文简单记录,多卡训练任务中 ,各个 GPU 资源占用情况 ,内容较为基础,后续有新的心再继续补充:多卡训练任务中,主卡需要承担和其他卡之前的通信,可以看到 :实验一:0,1,2,3 四卡训练,0 号主卡多了 3个 通信 进程..._模型训练在0卡上消耗资源比1卡上少

【黑盒对抗攻击】ICML 2021:SPADE: A Spectral Method for Black-Box Adversarial Robustness Evaluation_spade 对抗网络-程序员宅基地

文章浏览阅读398次。【黑盒对抗攻击】SPADE: A Spectral Method for Black-Box Adversarial Robustness Evaluation论文地址:代码地址:论文摘要:主要问题:主要思路:主要贡献:基本概念:谱图理论:对抗性鲁棒性的机器学习:对抗性鲁棒性评估:具体实现:整体框架:基于图的流形构造:论文地址:https://arxiv.org/abs/2102.03716代码地址:https://github.com/Feng-Research/SPADE论文摘要:这篇文章介_spade 对抗网络

2024年地理科学数据库-程序员宅基地

文章浏览阅读697次,点赞14次,收藏20次。地理科学数据库网站导航收集近1000个相关网站,由刘洪老师(成都地质调查中心高级工程师)长期维护,定期更新,该版本为2024年最新版本,转发请注明来源为刘洪老师。该网站导航表由刘洪老师(成都地质调查中心高级工程师)长期维护,定期更新。,转发请注明来源为刘洪老师。

读取点坐标简单地制作dxf文件(C#)_c#生成dxf-程序员宅基地

文章浏览阅读1w次,点赞5次,收藏37次。有时候我们需要在测量的小程序中加入一个功能,就是生成dxf文件。除了调用各种库,就是要自己看过dxf文件的组码,如果不能使用第三方的东西,那我们就可以用组码中最简单直接的部分来完成生成dxf文件的工作这是我们读入的‘控制点.dat’,用datagridview控价展示出了它们的xyz坐标我们还可以在程序界面中画出来,但这个不是关键了,就不管了,主要看看生成的dxf文件。这个点我没瞄准,左下..._c#生成dxf

Android RecyclerView —— 自定义分割线_android recyclerview自定义分割线-程序员宅基地

文章浏览阅读3.4k次。Android RecyclerView —— 自定义分割线Android RecyclerView —— 基本使用Android RecyclerView —— 适配器封装探索前面说了 RecyclerView 的基本使用以及对适配器的封装,但是在使用 ListView 时,有 dividerHeight 和 divider 属性用来设置分割线的高度和颜色(Drawable),但是在 Re..._android recyclerview自定义分割线

随便推点

mysql遇见Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggre的问题_phpstrudy of select list is not in group by clause-程序员宅基地

文章浏览阅读144次。今日在用group by 分组的时候遇到了以上问题!看了sql语句一下午也没发现什么问题!百度吧,也没有结果,仔细检查了一下发现我用的是phpstudy新推出的面板,mysql默认的是8.0版本的我并未进行更改一直那么用了!没办法查mysql手册吧!原来是因为:MySQL 5.7.5及以上功能依赖检测功能。如果启用了ONLY_FULL_GROUP_BY SQL模式(默认情况下),MySQ..._phpstrudy of select list is not in group by clause and contains nonaggregate

mxnet.gluon.data.vision.datasets 各种自带数据集了解一下_visiondataset-程序员宅基地

文章浏览阅读483次。mxnet可以直接调用的数据集有:MNIST(手写数据集)、FashionMNIST(服装数据集,共10类)、CIFAR10(动物&交通工具,共10类)、CIFAR100(含各种各类的事物,共100类)vision.datasetsGluon provides pre-defined vision datasets functions in themxnet.gluon.data.vision.datasetsmodule.Dataset container.Classes.._visiondataset

size_t是什么数据类型?为什么要用size_t替代int、unsigned int、unsigned long、unsigned long long_size_t unsigned long-程序员宅基地

文章浏览阅读1.9k次。今天看RXW源码的时候,发现有个代码把for循环的节点定义为size_t类型,我想这个循环才几次啊,你就用size_t,逼装的不错哦!,,那么size_t究竟是嘎哈用的呢?让我们来看看!破案了,其实这里就应该用size_t,因为strlen()函数返回的就是size_t。。。。它返回啥,我们就用啥类型,不用数据转换,这是最理想的。。。文章目录学过计算机组成原理应该不会对此有疑问。int小于等于数据线宽度,size_t大于等于地址线宽度。size_t存在的最大原因可能是因为:地址线宽度历史中经常都是大_size_t unsigned long

一句话实现MySQL库中的重叠分组_mysql 相邻数据相同则进行分组-程序员宅基地

文章浏览阅读272次。枚举多个条件进行分组时,可能发生重叠,重叠部分仅计入某个组,还是计入所有符合条件的组,这在写 SQL 时,写法大不相同。只计入第一个符合条件的组时,可以通过 case when 转换成常规分组,例如:select (case when age<=18 then ‘Teenager’ when age>=16 and age<=30 then ‘Youth’ when age>=28 and ag..._mysql 相邻数据相同则进行分组

【数据结构与算法】(14):堆排序和选择排序(超详细配图~)-程序员宅基地

文章浏览阅读972次,点赞41次,收藏16次。本文用超详细配图来生动的讲解简单选择排序和堆排序,就怕你学不会!

codeforces 507 ABC_in the first line output one integer m representin-程序员宅基地

文章浏览阅读951次。codeforces 507A Amr and Music 507B Amr and Pins 507C Guess Your Way Out!_in the first line output one integer m representing the maximum number of pr

推荐文章

热门文章

相关标签