Java面向对象之异常(throw与throws)
一、基础概念
1、throw和throws的区别:
位置不同:throws用在函数上,后面跟的是异常类,可以跟多个。
throw用在函数内,后面跟的是异常对象。
功能不同:throws用来声明异常,让调用者知道该功能有可能出现的问题,并由调用者给出预先的处理方式。
throw抛出具体问题的对象。语句执行到throw功能就结束了,跳转到调用者。并将具体的问题对象抛给调用者。
注意:throw语句独立存在,下面不要定义其他语句。因为执行不到throw下面的语句。
2、异常体系的特点: 类以及对象都具备可抛性,可以被throws和throw所操作。
3、异常的原则:
一般情况:(编译时会检测到异常)
功能内部有异常throw抛出,功能上一定要throws声明。功能内部有异常throw抛出,功能上一定要throws声明。(内部抛什么,功能上就声明什么。)
声明的目的就是为了让调用者处理,如果调用者不处理,编译失败。
特殊情况:(编译时不进行检查)
当函数内通过throw抛出了RuntimeException时,函数上可以不用throws声明。
不声明是不让调用者处理。运行时发生异常,程序会停止,对代码进行修改。
4.Exception分两种:
编译时会被检测的异常。
运行时异常(编译时不检测)RuntimeException
二、编译时会被检测的异常代码:
class Demo
{
int div(int a,int b)throws Exception//声明异常Exception
{
if(b==0)
throw new Exception("异常信息:除数不能为0");//抛出具体问题,编译时进行检测。
return a/b;
}
} class ExceptionDemo1
{
public static void main (String[] arge)
{
Demo d = new Demo(); //对异常进行处理
try
{
int num = d.div(4,0);
System.out.println("num="+num);
}
catch(Exception e)
{
//处理这个对象,可以使用该对象的方法。
System.out.println("处理异常的代码:除数不能为0");
System.out.println(e.getMessage());//异常信息
System.out.println(e.toString());//异常名称+异常信息
e.printStackTrace();//异常名字+异常信息+位置。jvm默认处理收到异常就是调用这个方法。将信息显示在屏幕上。
}
System.out.println("over");
}
}
运行代码:

三、编译时不检测,运行异常程序停止代码
ArithemticException异常 属于 RuntimeException异常,所以函数上也可以不用throws声明。
class Demo
{
int div(int a,int b)
{
if(b==0)
throw new ArithmeticException("异常信息:除数不能为0");//抛出具体问题,编译时不检测
return a/b;
}
} class ExceptionDemo1
{
public static void main (String[] arge)
{
Demo d = new Demo(); int num =d.div(4,0);
System.out.println("num="+num);
System.out.println("over");//这句话不能被执行了
}
}
代码运行:

NullPointerExceptionException异常 和 ArrayIndexOutOfBoundsException异常 都 属于 RuntimeException异常,所以函数上也可以不用throws声明。
class ExceptionDemo1
{
public static void main(String[] args)
{
int[] arr = new int[3];
//arr = null;
System.out.println("element:"+getElement(arr,-2));
}
//定义一个功能。返回一个整型数组中指定位置的元素。
public static int getElement(int[] arr,int index)
{
if(arr==null)
throw new NullPointerException("数组实体不存在"); if(index<0 || index>=arr.length)
{
throw new ArrayIndexOutOfBoundsException(index+",角标不存在");
}
System.out.println("element:"+getElement(arr,-2));
int element = arr[index];
return element;
}
}
代码运行:

Java面向对象之异常(throw与throws)的更多相关文章
- Java中处理异常throw和throws
1.首先我们来了解什么是异常呢? 异常阻止当前方法或作用域继续执行的问题. 2.处理异常 说到处理异常,我们当然会想到 try catch finally 在java中我们会对异常的处理有更高的认识 ...
- Java面向对象之异常【一】
目录 Java面向对象之异常[一] 异常的继承体系 Error Exception 异常是否受检 unchecked exceptions(不受检异常) checked exceptions(受检异常 ...
- Java面向对象之异常详解
目录 Java面向对象之异常[一] Java面向对象之异常[二] 捕获异常的规则 访问异常信息 异常对方法重写的影响 finally详解 Java面向对象之异常[一] Java面向对象之异常[二] 往 ...
- JAVA 异常 throw 与 throws
最近一直throw和throw new …… 获取头部罢工,要彻底生气清楚这件事,他对这个思想精华收集了很多网友.这里摘录. throws全部异常信息throw则是指抛出的一个详细的异常类型.通常在一 ...
- JAVA笔记9__异常/throw关键字/自定义异常/受检与非受检异常、assert关键字/StringBuffer、StringBuilder/代码国际化、动态文本
/** * 异常:在程序中导致程序中断运行的一些指令 * 1.受检异常:编译期 * 2.非受检异常:运行期 * 异常处理过程分析: * 1.一旦产生异常,系统会自动产生一个异常类的实例化对象 * 2. ...
- Java中 try--catch-- finally、throw、throws 的用法
一.try {..} catch {..}finally {..}用法 try { 执行的代码,其中可能有异常.一旦发现异常,则立即跳到catch执行.否则不会执行catch里面的内容 } catch ...
- Java面向对象之异常(自定义异常)
一.基础概念 在自定义的程序中,如果有了问题.也可以像java中的异常一样,对问题进行描述. 注意:1.继承RuntimeException的异常,不需要进行处理.在执行过程中有异常会直接抛出. 2. ...
- java为什么有些异常throw出去需要在函数头用throws声明,一些就不用。
Excepiton分两类:checked exception.runtime exception:直接继承自Exception就是checked exception,继承自RuntimeExcepti ...
- Java面向对象之异常(异常处理方式)
一.基础概念 (1)异常:Java程序在运行时期发生的不正常情况. Java就按照面向对象的思想对不正常情况进行描述和对象的封装. (2)异常问题分类: (Throwable:定义对于问题共性的功能. ...
随机推荐
- Kafka源码分析
本文主要针对于Kafka的源码进行分析,版本为kafka-0.8.2.1. 由于时间有限,可能更新比较慢... Kafka.scala // 读取配置文件 val props = Utils.load ...
- WPF——Sharder实现Logo走光动画
利用WPF的走光动画实现的走光动画. 资源 实例程序 示例代码 LogoEffect logoEffect = }; //要添加走光动画的物体 logo.Effect = logoEffect; D ...
- Miller-Rabin算法
Miller-Rabin算法用于检测一个数n是否是素数.其时间复杂度上界为O(klog2(n)),其中k为检测的轮数.增大k可以提高Miller-Rabin算法的准确度. 要检测一个数是否为素数,简单 ...
- 【ZOJ 3228】Searching the String 【AC自动机】
题意 给出n个模式串和一个文本串,输出各个模式串在文本串中出现的次数.模式串有两种类型,0类型代表可以有重叠,1类型代表不能有重叠.模式串可能出现重复. 分析 算是AC自动机的模板题? 因为模式串可以 ...
- sql查询exist替换in
很多时候用 exists 代替 in 是一个好的选择: select num from a where num in(select num from b) 用下面的语句替换: select num f ...
- code1006 等差数列
我绞尽脑汁想一个更好的算法,然而不能如愿,只好写一个n^3的了 很简单,就是暴力搜索(还好n<100) 先排序,然后循环i=1ton,j=i+1ton 把a[i]a[j]确定为等差数列开始的两个 ...
- maven 执行本地、服务器 jar包安装
开发时遇到过第三方jar包依赖不了时的尴尬 因为遇到过几次所以记录一下,POM文件引入的个推jar包无效,就必须本地安装了,服务器上的也是一样,执行相同的maven命令就行,注意修改路径!和将jar包 ...
- Java设计模式(2)——工厂方法模式
工厂方法模式同样属于类的创建型模式又被称为多态工厂模式.工厂方法模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中.核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色, ...
- poj 3304 Segments (题意理解出错,错误的只枚举了过线段的直线)
//枚举过每一条线段的直线, //再判断其他线段的点在直线上或被直线穿过 //即求直线与线段相交(叉积) #include<stdio.h> #include<math.h> ...
- python 中面向对象编程简单总结3--定制类
声明:资源来自慕课网python学习课程,以下只是个人学习总结,仅供参考 1.Python类的特殊方法 特征:以 __ 开头并结尾的方法,比如用于print的__str__() , __getatt ...