Java学习笔记26(异常)
异常的定义:
Java代码在运行过程中发生的问题就是异常
异常类:出现问题就会常见异常类对象,并抛出异常的相关信息,异常的位置,原因
异常体系:
Throwable类是java中所有错误或异常的父类
Throwable类的子类Error类是所有错误的的父类
Throwable类的子类Exception类是所有异常的父类
在开发中,更关心异常而不关心错误
异常和错误的区别:
异常可以通过开发人员修改代码来处理,让程序继续执行,异常可以被解决,而错误是无法被解决的,也不需要程序员来处理
示例:
package com.zs.Demo;
public class Yichang {
    public static void main(String[] args) {
        fun();
        fun2();
    }
    private static void fun2() {
        int[] arr=new int[666666666];
        System.out.println(arr);
        /*   异常:
        *Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
        at com.zs.Demo.Yichang.fun(Yichang.java:18)
        at com.zs.Demo.Yichang.main(Yichang.java:5)*/
    }
    private static void fun() {
        int[] arr={1,2};
        System.out.println(arr[3]);
        /*错误:
        * Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
        at com.zs.Demo.Yichang.fun(Yichang.java:16)
        at com.zs.Demo.Yichang.main(Yichang.java:5)
        */
    }
}
出现异常,那么后边的程序都无法执行,因此 要想办法解决这个问题
异常的处理方式:
1:抛出异常:throws
2:编写try..catch
throws类:写一段代码,存在空指针异常;
public class Demo1 {
    public static void main(String[] args) {
        int [] arr=null;
        function(arr);
    }
    private static void function(int[] arr) {
        int i=arr[arr.length-1];
        System.out.println(i);
    }
}
throws抛出异常:
public class Demo1 {
    public static void main(String[] args) throws Exception {
        int [] arr=null;
        function(arr);
    }
    private static void function(int[] arr) throws Exception {
        if (arr==null)
            throw new Exception("传递数组不存在");
        if (arr.length==0)
            throw new Exception("传递的数组中没有元素");
        int i=arr[arr.length-1];
        System.out.println(i);
        /*Exception in thread "main" java.lang.Exception: 传递数组不存在
        at com.zs.Demo.Demo1.function(Demo1.java:11)
        at com.zs.Demo.Demo1.main(Demo1.java:6)
        */
    }
}
如果是运行时异常(RuntimeException),不需要throws声明,必须改代码,否则无意义;
try...catch异常处理方法:
package com.zs.Demo;
public class Demo2 {
    public static void main(String[] args) {
        int [] arr=null;
        try {
            function(arr);
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println("结束");
    }
    private static void function(int[] arr) throws Exception {
        if (arr==null)
            throw new Exception("传递数组不存在");
        if (arr.length==0)
            throw new Exception("传递的数组中没有元素");
        int i=arr[arr.length-1];
        System.out.println(i);
        /*java.lang.Exception: 传递数组不存在
        at com.zs.Demo.Demo2.function(Demo2.java:16)
        at com.zs.Demo.Demo2.main(Demo2.java:7)
        结束
        */
    }
}
这里发现,虽然程序有异常,但是依然执行后面的代码,这就是异常处理
finally:
package com.zs.Demo;
/*finally:代码必须执行,无论有没有异常都要执行*/
public class Demo3 {
public static void main(String[] args) {
try {
fun(1);
} catch (Exception e) {
e.printStackTrace();
}finally {
System.out.println("必须执行的代码");
}
} private static void fun(int i) throws Exception {
if (i==0)
throw new Exception();
System.out.println(i);
}
/*结果:1
必须执行的代码 可以看出即使程序没有异常,也会执行finally代码*/
}
注意:父类的方法如果抛出异常,子类重写后可以不抛出异常,但是子类如果要抛出异常,这个异常的继承关系不能大于父类的异常
Throwable类的方法:
/*Throwable类中的方法都和异常信息有关
* String getMessage() 对异常信息的详细描述
* String toString() 对异常信息的简短描述
* void PrintStackTrace() 异常信息最全的jvm默认调用的方法*/
public class ThrowableDemo {
public static void main(String[] args) {
try {
fun();
} catch (Exception e) {
e.printStackTrace();
System.out.println(e);
String me = e.getMessage();
System.out.println(me);
/*java.lang.Exception: 异常了,下雨了
at com.zs.Demo.ThrowableDemo.fun(ThrowableDemo.java:19)
at com.zs.Demo.ThrowableDemo.main(ThrowableDemo.java:9)
java.lang.Exception: 异常了,下雨了
异常了,下雨了*/
}
} private static void fun() throws Exception {
throw new Exception("异常了,下雨了");
}
}
Java学习笔记26(异常)的更多相关文章
- 1.13(java学习笔记)异常机制
		异常不同于错误,它是程序运行时产生的未知问题. 如果把程序比喻成一辆汽车,那么汽车开着开着突然前面出现了一个大石头挡住了路,这就叫异常. 那么出现了这个异常我们需要去处理,比如打电话给公路管理局,让它 ... 
- Java学习笔记26(Math类、Arrays类、BigInteger类、BigDecimal类)
		Math类:数学工具类,做一些数学计算,开方,对数,三角函数等 所有方法都是静态方法,不需要建立对象,直接用类名调用即可 示例: 这里写几个在日常开发中会用到的,比如三角函数之类的平时不会用到,了解即 ... 
- 【原】Java学习笔记030 - 异常
		package cn.temptation; public class Sample01 { public static void main(String[] args) { /* * 异常:Java ... 
- Java学习笔记__异常机制_try_catch_finally_return执行顺序
		package cn.xiaocangtian.Exception; import java.io.FileInputStream; import java.io.FileNotFoundExcept ... 
- Java 学习笔记之 异常法停止线程
		异常法停止线程: public class RealInterruptThread extends Thread { @Override public void run() { try { for ( ... 
- JAVA学习笔记—review基本知识[反射与异常]
		JAVA学习笔记—review基本知识[反射与异常] 1.异常: 1.1异常的分类: Java会将所有的异常封装成对象,其根本父类为Throwable. Throwable有两个子类:Error 和E ... 
- Java学习笔记4
		Java学习笔记4 1. JDK.JRE和JVM分别是什么,区别是什么? 答: ①.JDK 是整个Java的核心,包括了Java运行环境.Java工具和Java基础类库. ②.JRE(Java Run ... 
- 0032 Java学习笔记-类加载机制-初步
		JVM虚拟机 Java虚拟机有自己完善的硬件架构(处理器.堆栈.寄存器等)和指令系统 Java虚拟机是一种能运行Java bytecode的虚拟机 JVM并非专属于Java语言,只要生成的编译文件能匹 ... 
- 0030 Java学习笔记-面向对象-垃圾回收、(强、软、弱、虚)引用
		垃圾回收特点 垃圾:程序运行过程中,会为对象.数组等分配内存,运行过程中或结束后,这些对象可能就没用了,没有变量再指向它们,这时候,它们就成了垃圾,等着垃圾回收程序的回收再利用 Java的垃圾回收机制 ... 
随机推荐
- DBWritable的使用
			首先导入mysql连接驱动jar包 或者maven模式下在pom.xml文件中追加: <dependency> <groupId>mysql</groupId> & ... 
- 把xml转成javabean的工具类
			import java.io.IOException; import java.io.StringReader; import java.io.StringWriter; import javax.x ... 
- java动态代理机制
			首先了解代理设计模式,其思想是为其他对象提供一种代理以控制对这个对象的访问. java动态代理就是遵循这种思想,spring中的AOP实现原理就是java的动态代理. 在java的动态代理机制中,有两 ... 
- P2756 飞行员配对方案问题
			题目背景 第二次世界大战时期.. 题目描述 英国皇家空军从沦陷国征募了大量外籍飞行员.由皇家空军派出的每一架飞机都需要配备在航行技能和语言上能互相配合的2 名飞行员,其中1 名是英国飞行员,另1名是外 ... 
- 自用chrome+油猴脚本,使用迅雷下载百度云大文件,一键离线下载
			油猴是有名的火狐浏览器插件(Greasemonkey),当然也有Chrome版本(tampermonkey),甚至IE.Safari.Opera都有……虽然这些插件是由不同的开发者开发出来的,界面也可 ... 
- Oracle11g温习-第十二章:tables
			2013年4月27日 星期六 10:44 1.表的功能 存储.管理数据的基本单元(二维表:由行和列组成) 2.表的类型 1)普通表:[heap table(堆表) :数据存储时,无序的,对它的访问采 ... 
- Create JSON by Jackson API(转)
			原文地址: Create JSON by Jackson API Jackson API is a multi-purpose Java library for processing JSON. ... 
- 浅谈MSSQL2012中的列存储索引(columnstore indexes)
			列存储索引为MSSQL2012版本中引进的一个新特性.所有版本MSSQL中标准查询处理模式采用一次一行模型,操作符每次处理一行数据.列存储索引中增加了一种新的基于向量的查询执行功能,通过这种功能,操作 ... 
- Chargen UDP服务远程拒绝服务攻击漏洞修复教程
			一.前置说明 chargen服务最初设计用于测试网络状态,监听19端口(包括TCP和UDP),其中UDP协议存在“Chargen UDP服务远程拒绝服务攻击漏洞”. chargen一般不会使用,所以直 ... 
- LY.JAVA面向对象编程.内存图
			2018-07-06 一个对象的内存图 两个对象的内存图 三个对象的内存图 this static super 向上转型 向下转型 
