第2课第5节_Java面向对象编程_异常_P【学习笔记】
摘要:韦东山android视频学习笔记
java的异常处理的原则如下:


1、我们先写一个没有对异常处理的程序,在进行除法运算的时候,除数是非零的话,运行时没有问题的,但是除数为零的时候,运行就会有问题,程序也不能往下执行(只打印了Begin of div)
public class Div{
public static void main(String args[]){
int m = Integer.parseInt(args[0]);
int n = Integer.parseInt(args[1]);
System.out.println("Begin of div");
int r = div(m,n);
System.out.println("end of div");
System.out.println(m+"/"+n+"="+r);
}
public static int div(int m,int n){
int r = m / n;
return r;
}
}
编译运行:


2、我们先写一个有对异常进行处理程序(自己处理异常),根据下面的运行结果,程序可以捕获到异常并且可以正常的执行.
public class Div2{
public static void main(String args[]){
int m = Integer.parseInt(args[0]);
int n = Integer.parseInt(args[1]);
System.out.println("Begin of div");
int r = div(m,n);
System.out.println("end of div");
System.out.println(m+"/"+n+"="+r);
}
public static int div(int m,int n){
int r = 0;
try {
r = m / n ;
}catch (ArithmeticException e){
System.out.println(e);
}finally{
System.out.println("This is finally of div");
}
return r;
}
}
编译运行:

3、我们写一个程序将异常抛出的类,这个抛出的异常是由main进行处理.
public class Div4{
public static void main(String args[]){
int m = Integer.parseInt(args[0]);
int n = Integer.parseInt(args[1]);
int r = 0;
System.out.println("Begin of div");
try {
r = div(m,n);
}catch (ArithmeticException e){
System.out.println(e);
}
System.out.println("end of div");
System.out.println(m+"/"+n+"="+r);
}
public static int div(int m,int n) throws ArithmeticException{
int r = 0;
r = m / n ;
return r;
}
}
编译运行:

4、如果在类的方法中如果处理了异常,那样在main方法中就不会对异常进行处理.
public class Div5{
public static void main(String args[]){
int m = Integer.parseInt(args[0]);
int n = Integer.parseInt(args[1]);
int r = 0;
System.out.println("Begin of div");
try {
r = div(m,n);
}catch (ArithmeticException e){
System.out.println(e);
}
System.out.println("end of div");
System.out.println(m+"/"+n+"="+r);
}
public static int div(int m,int n) throws ArithmeticException{
int r = 0;
try{
r = m / n ;
}catch(ArithmeticException e){
System.out.println("div :"+e);
}
return r;
}
}
编译运行:

5、如果在类的方法中如果处理了异常,同时在类方法中把异常抛出,那样main方法也可以捕获到异常.
public class Div6{
public static void main(String args[]){
int m = Integer.parseInt(args[0]);
int n = Integer.parseInt(args[1]);
int r = 0;
System.out.println("Begin of div");
try {
r = div(m,n);
}catch (ArithmeticException e){
System.out.println(e);
}
System.out.println("end of div");
System.out.println(m+"/"+n+"="+r);
}
public static int div(int m,int n) throws ArithmeticException{
int r = 0;
try{
r = m / n ;
}catch(ArithmeticException e){
System.out.println("div :"+e);
throw e;
}
return r;
}
}
编译运行:

6、现在我们上面第5个例子的代码,只有对这种算术运行的异常进行处理,如果我传入的参数个数不对,还有参数的格式也不对,程序是处理不了的。

为了修复上述的问题,我们添加对传入参数格式不对,还有传入参数个数不对这两种异常的处理。
public class Div7{
public static void main(String args[]){
int m = 0;
int n = 0;
int r = 0;
System.out.println("Begin of div");
try {
m = Integer.parseInt(args[0]);
n = Integer.parseInt(args[1]);
r = div(m,n);
}catch (ArithmeticException e){
System.out.println("main :" + e);
}catch (NumberFormatException e){
System.out.println("main :" + e);
}catch (ArrayIndexOutOfBoundsException e){
System.out.println("main :" + e);
}
System.out.println("end of div");
System.out.println(m+"/"+n+"="+r);
}
public static int div(int m,int n) throws ArithmeticException{
int r = 0;
try{
r = m / n ;
}catch(ArithmeticException e){
System.out.println("div :"+e);
throw e;
}
return r;
}
}
编译运行结果

7、在第6个例子继续优化,上面的程序目前只能对算术运算、参数格式还有参数个数不对的异常进行处理,其他的情况是无法处理的到的,我们可以添加对这些异常的父类RuntimeException来捕获异常.
public class Div8{
public static void main(String args[]){
int m = 0;
int n = 0;
int r = 0;
System.out.println("Begin of div");
try {
m = Integer.parseInt(args[0]);
n = Integer.parseInt(args[1]);
r = div(m,n);
}catch (ArithmeticException e){
System.out.println("main :" + e);
}catch (NumberFormatException e){ //去掉了参数个数的异常,仍然可以捕获到
System.out.println("main :" + e);
}catch (RuntimeException e){
System.out.println("main :" + e);
}
System.out.println("end of div");
System.out.println(m+"/"+n+"="+r);
}
public static int div(int m,int n) throws ArithmeticException{
int r = 0;
try{
r = m / n ;
}catch(ArithmeticException e){
System.out.println("div :"+e);
throw e;
}
return r;
}
}
编译运行结果

8、对于“不可查异常”, 系统也会抛出它,写不写throws效果一样
public class Div9{
public static void main(String args[]){
int m = 0;
int n = 0;
int r = 0;
System.out.println("Begin of div");
try {
m = Integer.parseInt(args[0]);
n = Integer.parseInt(args[1]);
r = div(m,n);
}catch (ArithmeticException e){
System.out.println("main :" + e);
}catch (NumberFormatException e){
System.out.println("main :" + e);
}catch (RuntimeException e){
System.out.println("main :" + e);
}
System.out.println("end of div");
System.out.println(m+"/"+n+"="+r);
}
//public static int div(int m,int n) throws ArithmeticException{
public static int div(int m,int n){
int r = 0;
try{
r = m / n ;
}catch(ArithmeticException e){
System.out.println("div :"+e);
throw e;
}finally{
System.out.println("finally of div");
}
return r;
}
}
编译运行:

相关代码存放在github,可以下载https://github.com/zzb2760715357/100ask

第2课第5节_Java面向对象编程_异常_P【学习笔记】的更多相关文章
- 第2课第3节_Java面向对象编程_继承性_P【学习笔记】
摘要:韦东山android视频学习笔记 面向对象程序的三大特性之继承性:继承性的主要作用就是复用代码.继承性也有一定的限制,如图一 图一 1.我们在第2课第2节_Java面向对象编程_封装性_P 中 ...
- 第2课第4节_Java面向对象编程_多态性_P【学习笔记】
摘要:韦东山android视频学习笔记 面向对象程序的三大特性之继承性: 1.向上转换:只能定义被子类覆写的方法,不能调用在子类中定义的方法. class Father { private int ...
- 第2课第7节_Java面向对象编程_内部类_P【学习笔记】
摘要:韦东山android视频学习笔记 1.什么是内部类:在类的内部定义一个类,内部类可以访问类的私有属性 class Outer{ ; class Inner{ public void print ...
- 第2课第2节_Java面向对象编程_封装性_P【学习笔记】
摘要:韦东山android视频学习笔记 面向对象程序的三大特性之封装性:把属性和方法封装在一个整体,同时添加权限访问. 1.封装性的简单程序如下,看一下第19行,如果我们不对age变量进行权限的管控 ...
- 第2课第1节_Java面向对象编程_类的引入_P【学习笔记】
摘要:韦东山android视频学习笔记 1. 面向对象编程的引入,我们先写一个简单的程序输出张三,李四的名字.代码如下,假如,现在我们要在名字前面添加籍贯广东,那样岂不是每个printf语句都得修改添 ...
- 第2课第6节_Java面向对象编程_包和权限_P【学习笔记】
摘要:韦东山android视频学习笔记 1.使用package定义编译的时候存放的位置 package a.b.c.d; public class Package { public static v ...
- 类和对象:面向对象编程 - 零基础入门学习Python037
类和对象:面向对象编程 让编程改变世界 Change the world by program 经过上节课的热身,相信大家对类和对象已经有了初步的认识,但似乎还是懵懵懂懂:好像面向对象编程很厉害,但不 ...
- .net 4.0 面向对象编程漫谈基础篇读书笔记
话说笔者接触.net 已有些年头,做过的项目也有不少,有几百万的,也有几十万的,有C/S的,也有B/S的.感觉几年下来,用过的框架不少,但是.net的精髓一直没有掌握.就像学武之人懂得各种招式,但内功 ...
- Python 进阶_OOP 面向对象编程_组合与继承
#目录 前言 组合 派生 通过继承来覆盖重载方法 最常用的重载场景实例方法的重载 从标准类中派生类方法的重载 前言 我们定义一个类是希望能够把类当成模块来使用,并把类嵌入到我们的应用代码中,与其他的数 ...
随机推荐
- 在windows上搭建hadoop开发环境
下载hadoop: http://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common 点击下面链接进行下载 然后进行解压 如果解压出现下面的情况 则用管 ...
- 深入理解JVM-hotspot虚拟机对象探秘
1.背景与大纲 在我们了解了java虚拟机的运行时数据区后,我们大概知道了虚拟机内存的概况,但是我们还是不清楚具体怎么存放的访问的: 接下来,我们将深入探讨HotSport虚拟机在java堆中对象的分 ...
- MySQL MGR--MGR部署
MGR部署 场景描述: 使用三台服务器搭建一个简单MGR集群,使用MySQL 5.7.24版本,服务器列表为: 192.168.1.147 192.168.1.148 192.168.1.149 1. ...
- R语言包在linux上的安装等知识
有关install.packages()函数的详见:R包 package 的安装(install.packages函数详解) R的包(package)通常有两种:1 binary package:这种 ...
- 如何使用anaconda安装pygame
超级方便!!! 打开Anaconda, 输入: pip install pygame 等待下载安装完成. 如图: 显示成功安装:
- 基于tornado---异步并发接口
1.目的 由于有多个程序和脚本需要对mysql进行读写数据库,每次在脚本中进行数据库的连接.用cursor进行操作过于麻烦,因此希望可以有一个脚本开放接口,只需要传入sql语句,就可以返回结果回来.因 ...
- 分布式存储-ceph
1. ceph 简介 Ceph是一种为优秀的性能.可靠性和可扩展性而设计的统一的.分布式文件系统().ceph 的统一体现在可以提供文件系统.块存储和对象存储,分布式体现在可以动态扩展.在国内一些公司 ...
- OpenStack共享组件-Memcache缓存系统
1. 缓存系统 1.1 静态web页面 1> 在静态Web程序中,客户端使用Web浏览器(IE.FireFox等)经过网络(Network)连接到服务器上,使用HTTP协议发起一个请求(Requ ...
- dijkstra,belllman-ford,spfa最短路算法
参考博客 时间复杂度对比: Dijkstra: O(n2) Dijkstra + 优先队列(堆优化): O(E+V∗logV) SPFA: O(k∗E) ,k为每个节点进入队列的次数,一般小于等 ...
- KVM-virsh常用命令
virsh list #在线VM virsh list --all #所有VM virsh start #开机 virsh shutdown #软关机 virsh destroy #强制关机 virs ...