1java异常详解

语法错误、编译时错误
语义错误、逻辑错误、运行时错误


1、注意:这里说的异常是运行期错误,不包括编译期错误。

2、try尝试运行,catch捕获并处理,finally无论出错不出错都会执行。

3、异常类根类:Throwable(注意,这是一个类)

Throwable又有两个子类,Error和Exception。Error不是我们关注的,不是我们能够处理的。

Exception还有一个子类,RuntimeException,可捕捉也可不捕捉。其它的Exception必须处理。

4、注意:不要轻易地抛出异常,不要轻易地吞掉异常。

  该处理的一定要处理;处理不了,没关系,可以往外抛。在main方法上也可以抛异常,但永远都不要这样做,除非测试。

5、printStackTrace()打印堆栈错误信息,一个地方出错可能是另一个地方引起的。

6、java异常处理机制:

6.1、java程序执行过程中如出现异常,系统会监测到并自动生成一个相应的异常类对象,然后再将它交给运行时系统。

(自定义异常需要我们自己监测,并手动生成这个异常的对象,然后抛出交给运行时系统)

6.2、运行时系统再寻找相应的代码来处理这一异常。如果java运行时系统找不到可以处理异常的代码,则运行时系统将终止,相应的java程序也将退出。

public static void main(String[] args) {

String str = "1";

for(int i=0;i<10000;i++) {

str += str;

}

}

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

常见异常类:

RuntimeException          运行时异常

IndexOutOfBoundsException      下标越界异常

NullPointerException          空指向异常

ArrayIndexOutOfBoundsException  数组下标越界异常

StringIndexOutOfBoundsException    字符串下标越界异常

ClassCastException          类型转换异常

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Exception:

IOException

FileNotFoundException

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

String[] str = {"1","2","3"};

try {

for(int i=0;i<5;i++) {

System.out.print(str[i]);

}

}catch(ArrayIndexOutOfBoundsException e){

System.out.println("数组下标越界");

return;//如果return,下面的finally还会执行

//System.exit(0);//如果是exit()方法,那么下面的finally就不会被执行了。

//exit()终止虚拟机的运行

}finally{

System.out.println("我是finally");

}

System.out.println("程序结束");

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

人工抛出异常

java异常类对象除了在程序运行出错时由系统自动生成并抛出之外,也可根据需要人工创建并抛出。

throw new IOException();

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

自定义异常示例:

自定义异常需要人工抛出。

class MyException extends Exception {

public MyException(String message) {

super(message);

}

}

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

public class TestException {

public void regist(int number) throws MyException {

if (number < 0) {

throw new MyException("人数不能为负数");

}

}

public static void main(String[] args) {

TestException t = new TestException();

try{

t.regist(-1);

}catch(MyException m) {

m.printStackTrace();

}

}

}

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

重写:两同两小一大

方法名相同

形参列表相同

返回值类型小于或等于父类方法的返回值类型

抛出异常小于或等于父类方法的返回值类型

访问权限大于或等于父类方法的访问权限

时间: 2024-12-22 04:29:55

1java异常详解的相关文章

java异常详解

1. java中throw和throws:throw用在方法内部实际抛出异常的时候:throws用在方法头部(参数后面,方法体前面). public class Test{ public static void main(String[] args) { try { f(); } catch(NoSuchMethodException e) { System.out.println("test2"); } //用try-catch捕获并处理之后,后面的语句可以正常执行 System.o

java笔记--异常详解与处理

一.异常概念 Throwable类是Java中所有错误或异常的超类. 1.只有当对象是此类(或其子类)的实例时,才能通过Java虚拟机或着Java throw语句抛出.     2.只有此类或其子类才可以是catch字句中的参数类型.     3.有两个直接子类:Error和Exception         Error--指应用程序不应该去处理捕获的一种严重问题,常表示系统级的错误,如内存溢出        Exception--指程序需要捕获,需要处理的异常,是一种设计或实现方面的问题.  

JAVA基础——异常详解

阅读目录 一.异常简介 二.try-catch-finally语句 三.throw和throws关键字 四.java中的异常链 五.结束语 JAVA异常与异常处理详解 回到顶部 一.异常简介 什么是异常? 异常就是有异于常态,和正常情况不一样,有错误出错.在java中,阻止当前方法或作用域的情况,称之为异常. java中异常的体系是怎么样的呢? 1.Java中的所有不正常类都继承于Throwable类.Throwable主要包括两个大类,一个是Error类,另一个是Exception类: 2.其

Java面向对象之异常详解

目录 Java面向对象之异常[一] Java面向对象之异常[二] 捕获异常的规则 访问异常信息 异常对方法重写的影响 finally详解 Java面向对象之异常[一] Java面向对象之异常[二] 往期回顾:上一篇我们大致总结了异常的继承体系,说明了Exception和Error两个大类都继承于顶级父类Throwable,又谈到编译时异常与运行时异常的区别,谈到异常的处理方式,以及处理方式中关于捕获方式的几种类型. 本篇承上启下,将从异常的其余部分进行总结,但是毕竟现在处于初学阶段,未必能够体会

黑马程序员-Java异常详解

--Java培训.Android培训.iOS培训..Net培训.期待与您交流! --- 异常的介绍 Java中的异常就是那些会阻碍当前程序运行,使程序执行可能失败的一些可能情况,如程序中出现除零错误,数组下标越界等.异常在Java中被封装成了一个类,继承自Throwable,名为Exception,它有很多子类,分别描述了系统中很多常见的异常情况,这些异常机制的出现使得编写程序时对一些问题的处理变得尤为方便,下面是一些简单的使用情况. 异常捕获的一般格式 /** * javac Exceptio

缺页异常详解

http://blog.csdn.net/cosmoslhf/article/details/42743349 首先明确下什么是缺页异常,CPU通过地址总线可以访问连接在地址总线上的所有外设,包括物理内存.IO设备等等,但从CPU发出的访问地址并非是这些外设在地址总线上的物理地址,而是一个虚拟地址,由MMU将虚拟地址转换成物理地址再从地址总线上发出,MMU上的这种虚拟地址和物理地址的转换关系是需要创建的,并且MMU还可以设置这个物理页是否可以进行写操作,当没有创建一个虚拟地址到物理地址的映射,或

中断与异常详解(二)

中断或异常发生之前 当 CPU 执行了当前指令之后,CS 和 EIP 这对寄存器中所包含的内容就是下一条将要执行 指令的逻辑地址.在对下一条指令执行前,CPU 先要判断在执行当前指令的过程中是否发生 了中断或异常. 如果发生了一个中断或异常 那么 CPU 将做以下事情 • 确定所发生中断或异常的向量i(在 0-255 之间). • 通过 IDTR 寄存器找到 IDT 表,读取 IDT 表第i项(或叫第i个门). • 分两步进行有效性检查:首先是“段”级检查,将 CPU 的当前特权级 CPL(存放

java中的异常详解

java中的exception关系图如图下图所示: Throwable是Exception(异常)和Error(错误)的超类!! 两者的区别: Exception表示程序需要捕捉和处理的的异常; Error表示系统级别的错误和程序无需处理的. 我们日常程序中所遇到的是Exception,Exception分为两种: 第一种是JDK标准自带的异常,当程序违反了jdk的语法规则或者非法使用内存等,程序就会抛出异常,常见的jdk异常有: java.lang.nullpointerexception,

Java虚拟机OutOfMemoryError 异常详解及解决方法(3)

上图是一张Java运行时的内存分布图,可知虚拟机内存都有发生OutOfMemoryError(下文称 OOM)异常的可能,作为一个合格的Java开发人员,我们应该做到的是: (1)第一,通过代码验证 Java 虚拟机规范中描述的各个运行时区域储存的内容: (2)第二,遇到内存溢出的时候,应该可以找打具体的位置,并进行合理的解决: 下边就聊一下 OOM: 一.Java 堆溢出 我们知道Java 堆用于储存对象实例,我们只要不断地创建对象,并且保证 GC Roots 到对象之间有可达路径来避免垃圾回