java-异常-编译时检测异常和运行时异常区别(throws和throw区别)


- 1 package p1.exception;
- 2 /*
- 3 * 对于角标是整数不存在,可以用角标越界表示,
- 4 * 对于负数为角标的情况,准备用负数角标异常来表示。
- 5 *
- 6 * 负数角标这种异常在java中并没有定义过。
- 7 * 那就按照java异常的创建思想,面向对象,将负数角标进行自定义描述。并封装成对象
- 8 *
- 9 * 这种自定义的问题描述成为自定义异常。
- 10 *
- 11 * 注意:如果让一个类称为异常类,必须要继承异常体系,因为只有称为异常体系的子类才有资格具有可抛性。
- 12 * 才可以被两个关键字所操作,throws throw
- 13 *
- 14 * 异常的分类:
- 15 * 1,编译时被检测异常:只要是Exception和其子类都是,除了特殊子类RuntimeException体系
- 16 * 这种问题一旦出现,希望在编译时就进行检测,让这种问题有对应的处理方式
- 17 * 这样的问题都可以针对性的处理
- 18 *
- 19 * 2,编译时不检测异常(运行时异常):就是Exception中的RuntimeException和其子类
- 20 * 这种问题的发生,无法让功能继续,运算无法进行,更多是因为调用者的原因导致的,或者引发了内部状态改变导致的(比如多线程时候)
- 21 * 那么这种问题一般不处理,直接编译通过,在运行时,让调用者调用时的程序强制停止.让调用者对代码进行修正.
- 22 *
- 23 *所以自定义异常时,要么继承Exception,要么继承RuntimeException
- 24 *
- 25 *throws 和 throw 区别
- 26 *
- 27 *1,throws使用在函数上.
- 28 * throw使用在函数内.
- 29 *2,throws抛出的是异常类,可以抛出多个,用逗号隔开.
- 30 * throw抛出的是异常对象.
- 31 *
- 32 */
- 33
- 34 class FuShuIndexException extends RuntimeException /*Exception*/{//可以改继承运行异常,就不会报编译错误
- 35 public FuShuIndexException() {
- 36 // TODO Auto-generated constructor stub
- 37 }
- 38
- 39 FuShuIndexException(String msg){
- 40 super(msg);
- 41 }
- 42 }
- 43 class Demo {
- 44 public static int method(int[] arr,int index) /*throws FuShuIndexException*/ {
- 45
- 46 // System.out.println(arr[index]);
- 47 if (arr == null) {
- 48 throw new NullPointerException("数组的引用不能为空");
- 49 }
- 50 if (index>=arr.length) {
- 51 throw new ArrayIndexOutOfBoundsException("数组的角标越界"+index);
- 52
- 53 }
- 54 if (index<0) {
- 55 throw new FuShuIndexException("角标变成负数了");
- 56 }
- 57 return arr[index];
- 58 }
- 59
- 60 }
- 61
- 62 public class ExceptionDemo3 {
- 63
- 64 public static void main(String[] args) /*throws FuShuIndexException*/{
- 65 // TODO Auto-generated method stub
- 66 int[] arr = new int[3];
- 67 // System.out.println(arr[3]);
- 68
- 69 Demo d = new Demo();
- 70 int num = d.method(arr,-30);
- 71 System.out.println("num="+num);
- 72 System.out.println("over");
- 73
- 74 }
- 75
- 76 }
ExceptionDemo3
java-异常-编译时检测异常和运行时异常区别(throws和throw区别)的更多相关文章
- 代码编译时JDK版本和运行时JDK版本不一致启动项目报错
java编译: java编译就是.java文件变成.class文件的过程,这个过程一般在我们常用的编译器中进行,例如Ecliplse和IDEA等:下面以IDEA举例: 执行上述编译使用的JDK版本就是 ...
- Java异常-一般异常和运行时异常的区别
Java提供了两类主要的异常:runtime exception和checked exception.checked 异常也就是我们经常遇到的IO异常,以及SQL异常都是这种异常.对于这种异常, JA ...
- 运行时异常&编译时异常
/* 异常体系: --------| Throwable 所有错误或者异常的父类 --------------| Error(错误) --------------| Exception(异常) 异常一 ...
- java泛型编译时被擦除引起多态的破坏,用 桥方法解决此类问题。(java 桥方法)
在JVM虚拟机中泛型编译的时候,会出现类型擦除.但是,在多态场景中,编译时,擦除方式会出现多态被破坏的可能. 举个栗子: A.java public class A<T> { void g ...
- in C#,编译型常量(const)和运行时常量(readonly)
readonly 关键字与 const 关键字不同. const 字段只能在该字段的声明中初始化. readonly 字段可以在声明或构造函数中初始化. 因此,根据所使用的构造函数, readonly ...
- c# 编译期常量const和运行时常量readonly
注意:const编译期常量是编译的时候就确定的,可以查看IL代码,是写死的.如果另一个程序集引用后,该程序集没有进行编译,则值不会改变. 看效果: 项目中有2个程序集: 其中:常量在这个程序集中定义并 ...
- c++ 编译时检测结构体大小的的宏定义写法
一种写法: template <bool> struct CompileAssert { }; #define COMPILE_ASSERT(expr, msg) \ typedef Co ...
- 如何解决pytorch 编译时CUDA版本与运行时CUDA版本不对应
转载请注明: 仰望高端玩家的小清新 http://www.cnblogs.com/luruiyuan/ 如何解决pytorch 编译时CUDA版本与运行时CUDA版本不对应 如果pytorch的编译时 ...
- java异常,异常处理,异常类 关键字:throws 和 throw 自定义的异常类
package cn.kecheng; import java.util.Scanner; /**异常:异常是指在程序的运行过程中所发生的不正常的情况,它会中断正在运行的程序 异常处理机制:java中 ...
随机推荐
- 出现线上bug,测试人能做些什么?
测试奇谭,BUG不见. 大家好,我是谭叔. 一提到线上问题,很多测试小白要么"原则性"恐惧,要么憨憨如也,不知如何下手. 本篇文章,我再细化下这道常见的面试题,跟大家捋捋发生线上问 ...
- nim_duilib(9)之RichEdit
introduction 更多控件用法,请参考 here 和 源码. 本文的代码基于这里 RichEdit的更多用法,请参考源码中RichEdit.h提供的函数,RichEdit控件,可以定制为多种多 ...
- 【LeetCode】513. Find Bottom Left Tree Value 解题报告(Python & C++ & Java)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 BFS DFS Date 题目地址:https:// ...
- 【LeetCode】583. Delete Operation for Two Strings 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...
- 移动端H5-iPhone安全距离适配
安全区域? 安全区域指的是一个可视窗口范围,处于安全区域的内容不受圆角(corners).齐刘海(sensor housing).小黑条(Home Indicator)影响,如下图蓝色区域: 也就是说 ...
- Codeforces 1076G Array Game 题解
目录 题目大意 做法 代码 不想写昨天晚上cf的比赛题目所以来写题解摸摸鱼 题目大意 有一个在长度为\(k\)的正整数序列\(b\)上进行的游戏,一开始一个棋子放在位置\(1\),假如当前棋子的位置为 ...
- ZFNet: Visualizing and Understanding Convolutional Networks
目录 论文结构 反卷积 ZFnet的创新点主要是在信号的"恢复"上面,什么样的输入会导致类似的输出,通过这个我们可以了解神经元对输入的敏感程度,比如这个神经元对图片的某一个位置很敏 ...
- Vue(27)vue-codemirror实现在线代码编译器
前言 如果我们想在Web端实现在线代码编译的效果,那么需要使用组件vue-codemirror,他是将CodeMirror进行了再次封装 支持代码高亮 62种主题颜色,例如monokai等等 支持js ...
- 生成对抗网络GAN与DCGAN的理解
作者在进行GAN学习中遇到的问题汇总到下方,并进行解读讲解,下面提到的题目是李宏毅老师机器学习课程的作业6(GAN) 一.GAN 网络上有关GAN和DCGAN的讲解已经很多,在这里不再加以赘述,放几个 ...
- Java中对象的内存分配机制
一.内存划分 Java把内存划分为两种,一种是栈内存,另一种是堆内存. 1.栈内存 在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配.当在一段代码块定义一个变量时,Java就在栈 ...