`
jsbylibo
  • 浏览: 12003 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

异常相关知识

 
阅读更多

1.异常:在Java语言中,将程序执行中发生的不正常情况称为“异常”。(开发过程中的语法错误和逻辑错误不是异常)

2.Java程序在执行过程中所发生的异常事件可分为两类:

       Error:  Java虚拟机无法解决的严重问题。如:JVM系统内部错误、资源耗尽等严重情况。一般不编写针对性的代码进行处理。

       Exception: 其它因编程错误或偶然的外在因素导致的一般性问题,可以使用针对性的代码进行处理。例如:空指针访问  试图读取不存在的文件  网络连接中断

       捕获错误最理想的是在编译期间,但有的错误只有在运行时才会发生。比如:除数为0,数组下标越界等

       分类:编译时异常运行时异常

1).运行时异常

    是指编译器不要求强制处置的异常。一般是指编程时的逻辑错误,是程序员应该积极避免其出现的异常。java.lang.RuntimeException类及它的子类都是运行时异常。

对于这类异常,可以不作处理,因为这类异常很普遍,若全处理可能会对程序的可读性和运行效率产生影响。

 

2).编译时异常

是指编译器要求必须处置的异常。即程序在运行时由于外界因素造成的一般性异常。编译器要求java程序必须捕获或声明所有编译时异常。

对于这类异常,如果程序不处理,可能会带来意想不到的结果。

3.常见异常

   java.lang.RuntimeException 

      ClassCastException

      ArrayIndexOutOfBoundsException

      NullPointerException

      ArithmeticException

      。。。

   java.io.IOExeption

      FileNotFoundException

      EOFException

   java.lang.ClassNotFoundException

   java.lang.InterruptedException

   java.io.FileNotFoundException

   java.sql.SQLException

 

Error

package com.atguigu.java_exception;

public class TestError {
	public static void main(String[] args) {
		//java.lang.StackOverflowError栈溢出
		//main(args);
		
		//java.lang.OutOfMemoryError: Java heap space堆空间溢出
		byte[] b = new byte[1024*1024*600];
	}
}

 

package com.atguigu.java_exception;

import java.util.Date;
import java.util.Scanner;

import org.junit.Test;
/*一:异常的体系结构
 * java.lang.Throwable
 * 		-----Error:错误,程序中不进行处理
 * 		-----Exception异常,要求在编写程序时,就要考虑到对这些异常的处理
 * 				-----编译时异常:在编译期间会出现的异常(执行javac.exe命令时,出现异常)
 * 				-----运行时异常:在运行期间会出现的异常(执行java.exe命令时,出现异常)
 * 
 * 当执行一个程序时,如果出现异常,那么异常之后的代码就不再执行!
 * 
 */
public class TestException {
	//编译时异常
	@Test
	public void test6(){
		
	}
	
	//常见的运行时异常
	//4.空指针异常:NullPointerException
	@Test
	public void test5(){
//		Person p = new Person();
//		p = null;
//		System.out.println(p.toString());
		
		String str = new String("aa");
		str = null;
		System.out.println(str.length());
	}
	
	//3.类型转换异常:ClassCastException
	@Test
	public void test4(){
		Object obj = new Date();
		String str = (String)obj;
		
		//String str1 = (String)new Date();//编译出错
	}
	
	//2.算术异常:ArithmeticException
	@Test
	public void test3(){
		int i = 10;
		System.out.println(i / 0);
	}
	
	//1.数组下标越界的异常:ArrayIndexOutOfBoundException
	@Test
	public void test2(){
		int [] i = new int[10];
		//System.out.println(i[10]);
		System.out.println(i[-10]);
	}
	
	@Test
	public void test1(){
		Scanner s = new Scanner(System.in);
		int i = s.nextInt();
		System.out.println(i);
	}
}
class Person{
	public Person(){
		
	}
}

 

如何处理异常?

 

package com.atguigu.java_exception;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Date;
import java.util.InputMismatchException;
import java.util.Scanner;

import org.junit.Test;

/*
 * 二、如何处理Exception的异常
 * Java提供的是异常处理的抓抛模型
 * 1."抛":当我们执行代码时,一旦出现异常,就会在异常的代码处生成一个对应的异常类型的对象,并
 *        将此对象抛出。(自动抛出   / 手动抛出)
 *        >一旦抛出此异常类的对象,那么程序就终止执行
 *        >此异常类的对象抛给方法的调用者。
 * 2."抓":抓住上一步抛出来的异常类的对象。如何抓?即为异常处理的方式
 *    java 提供了两种方式用来处理一个异常类的对象。
 *    处理的方式一:
 *    try{
 *    	//可能出现异常的代码
 *    }catch(Exception1 e1){
 *    	//处理的方式1
 *    }catch(Exception2 e2){
 *    	//处理的方式2
 *    }finally{
 *    	//一定要执行的代码 
 *    }
 * 注:1.try内声明的变量,类似于局部变量,出了try{}语句,就不能被调用
 *    2.finally是可选的。
 *    3.catch语句内部是对异常对象的处理:
 *        >getMessage();  printStackTrace();
 *    4.可以有多个catch语句,try中抛出的异常类对象从上往下去匹配catch中的异常类的类型,一旦满足
 *      就执行catch中的代码。执行完,就跳出其后的多条catch语句
 *    5.如果异常处理了,那么其后的代码继续执行。
 *    6.若catch中多个异常类型是"并列"关系,孰上孰下都可以。
 *      若catch中多个异常类型是"包含"关系,须将子类放在父类的上面,进行处理。否则报错!
 *    7.finally中存放的是一定会被执行的代码,不管try中、catch中是否仍有异常未被处理,以及是否有return语句。
 *    8.try-catch是可以嵌套的。
 *    
 * 三、对于运行时异常来说,可以不显式的进行处理。
 *    对于编译时异常来说,必须要显式的进行处理。 
 *    
 * 四、子类重写父类的方法,其抛出的异常类型只能是被重写的方法的异常类的子类或异常类型一样。否则(catch罩不住)
 */
public class TestException1 {
	// 编译时异常
	@Test
	public void test6() {
		FileInputStream fis = null;
		try {
			fis = new FileInputStream(new File("hello.txt"));
			int b;
			while ((b = fis.read()) != -1) {
				System.out.print((char) b);
			}

		} catch (FileNotFoundException e1) {
			System.out.println("文件找不到了!");
		} catch (IOException e1) {
			System.out.println(e1.getMessage());
		} finally {
			try {
				fis.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

	// 常见的运行时异常
	// 4.空指针异常:NullPointerExcetion
	@Test
	public void test5() {
		// Person p = new Person();
		// p = null;
		// System.out.println(p.toString());

		try {
			String str = new String("AA");
			str = null;
			System.out.println(str.length());
		} catch (Exception e) {
			// e.printStackTrace();
			System.out.println("出现空指针的异常了");
		}
	}

	// 3.类型转换异常:ClassCastException
	@Test
	public void test4() {
		try {
			Object obj = new Date();
			String str = (String) obj;
		} catch (ClassCastException e) {
			System.out.println("出现类型转换的异常了");
			//System.out.println(10 / 0);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			System.out.println("hello!美女!");
		}
		// String str1 = (String)new Date();
	}

	// 2.算术异常:ArithmeticException
	@Test
	public void test3() {
		try {
			int i = 10;
			System.out.println(i / 0);
		} catch (Exception e) {
			// e.printStackTrace();
			System.out.println(e.getMessage());
		}
	}

	// 1.数组下标越界的异常:ArrayIndexOutOfBoundsException
	@Test
	public void test2() {
		try {
			int[] i = new int[10];
			// System.out.println(i[10]);
			System.out.println(i[-10]);
		} catch (Exception e) {
			System.out.println("出现异常了!");
		}
	}

	@Test
	public void test1() {
		Scanner s = new Scanner(System.in);
		try {
			int i = s.nextInt();
			System.out.println(i);
		} catch (InputMismatchException e) {
			System.out.println("出现类型不匹配的异常了!");
		}
	}
}

 

package com.atguigu.java_exception;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

/*
 * 异常处理的方式二:在方法的声明处,显式的抛出该异常对象的类型
 * 格式:如:public static  void method2() throws FileNotFoundException,IOException{}
 * 当在此方法内部出现异常的时候,会抛出一个异常类的对象,抛给方法的调用者。
 * 异常的对象可以逐层向上抛,直至main中。当然在向上抛的过程中,可以再通过try-catch-finally进行处理。
 * 
 * java的异常处理:抓抛模型
 * 1.抓:异常的处理,有两种方式(①try-catch-finally② throws + 异常的类型)
 * 2.抛:一旦执行过程中,出现异常,会抛出一个异常类的对象。(自动的抛出  vs 手动的抛出(throw + 异常类的对象))throw"相当于"return
 *     >异常类,既可以是现成的异常类,也可以是自己创建的异常类
 */

public class TestException2 {
	public static void main(String[] args){
		try{
		method2();
		}catch(FileNotFoundException e){
			System.out.println(e.getMessage());
		}catch(IOException e){
			e.printStackTrace();
		}
		
		method3();
	}
	
	public static void method3(){
		try{
		method1();
		}catch(Exception e){
			e.printStackTrace();
		}
	}
	
	public static  void method2() throws FileNotFoundException,IOException{
		method1();
	}
	
	public static void method1() throws FileNotFoundException,IOException{
		FileInputStream fis = new FileInputStream(new File("hello1.txt"));
		int b;
		while((b = fis.read()) != -1){
			System.out.print((char)b);
		}
		fis.close();
	}
}

 

如何自定义一个异常类

 1.自定义的异常类继承现有的异常类(注意异常类型要不能大于父类

 2.提供一个序列号,提供几个重载的构造器 

 

package com.atguigu.java_exception;
//如何自定义一个异常类
//1.自定义的异常类继承现有的异常类
//2.提供一个序列号,提供几个重载的构造器
public class MyException extends Exception{
	
	static final long serialVersionUID = -70348975766939L;
	
	public MyException(){
		
	}
	public MyException(String msg){
		super(msg);
	}
}

 

分享到:
评论

相关推荐

    java异常有关的习题.docx

    Java 异常相关知识点 -java 异常分类- Java 语言中异常的分类是哪项?答案是 B.受检异常和非受检异常。Java 语言中异常可以分为两类:受检异常(checked exception)和非受检异常(unchecked exception)。受检...

    Java异常基础知识总结文档

    Java异常基础知识主要涵盖了Java语言中异常的分类、处理机制、抛出方式以及自定义异常等方面的知识。异常是程序在执行过程中出现的非正常情况,需要被妥善处理以防止程序崩溃或数据丢失。Java通过类层次结构中的...

    有关java开发中对异常的处理知识

    ### 有关Java开发中对异常的处理知识 #### 引言 在Java开发过程中,异常处理是一项非常重要的技能。良好的异常处理不仅可以提升程序的健壮性,还能提高用户体验。本篇将详细介绍Java中的异常处理机制及其应用。 ##...

    java中有关异常处理有关知识,ppt形式的

    **非运行时异常**是编译时就能检测到的异常,通常与特定的编程规则或API使用有关,如文件未找到异常(FileNotFoundException)、网络异常(IOException)或类型转换异常(ClassCastException)。这些异常需要在方法...

    异常处理的相关知识与实例

    ### 异常处理的相关知识与实例 在编程领域,异常处理是一种重要的机制,用于捕捉和处理程序执行过程中发生的错误或异常情况。对于数据库应用程序来说,正确处理异常不仅可以提高程序的健壮性和可用性,还可以帮助...

    有关精液质量异常的知识PPT学习教案.pptx

    有关精液质量异常的知识PPT学习教案.pptx

    java 异常相关

    本篇文章将深入探讨Java中的异常处理机制,并结合提供的"異常処理.doc"文档,详细讲解相关知识点。 1. **异常类层次结构**: Java的异常类都是从`java.lang.Throwable`类派生出来的。主要分为两大类:`Error`和`...

    异常处理.ppt异常处理.ppt异常处理.ppt异常处理.ppt异常处理.ppt

    以下是对异常处理相关知识点的详细说明: 1. **异常与异常对象**:在Java中,异常是程序执行过程中发生的问题,它会打断正常的执行流程。异常通常通过异常类的对象来表示,这些对象包含了关于异常的详细信息。例如...

    java异常 各种异常

    根据给定文件的信息,我们可以提炼出关于Java异常处理的一些关键知识点。尽管提供的内容与异常处理直接相关的部分较少,但基于标题、描述以及部分上下文,我们可以深入探讨Java异常处理的相关概念。 ### Java异常...

    易语言线程结构异常处理

    通过理解并熟练运用这些知识点,开发者可以创建更加健壮和稳定的易语言程序,有效地处理线程异常,提高程序的容错性和可靠性。同时,深入理解线程管理、异常处理和底层内存操作也是提升编程技能的重要步骤。

    Java习题_异常相关的习题_chap11.pdf

    根据给出的文件内容,我们可以提取出有关Java异常处理的关键知识点,具体如下: 1. 异常的概念和分类 - 在Java中,异常是指在程序执行过程中发生的不正常情况。所有的异常都是由Throwable类或其子类的实例表示。 ...

    Java异常学习资料

    异常分为检查型异常(Checked Exceptions)和非检查型异常(Unchecked Exceptions),前者是程序可以预见并应该处理的异常,后者是程序难以预见,通常与编程错误相关的异常。 2. **异常分类** - **检查型异常**:...

    Python-异常检测相关资源精选列表

    以下是对"Python-异常检测相关资源精选列表"的详细说明,以及与机器学习相关的知识点。 一、异常检测的定义与应用 异常检测,也称为离群值检测,是数据分析过程中的一个关键步骤。其目标是识别那些与其他观测值显著...

    C++异常处理之大全,包括SEH,CRT函数,打印堆栈等相关知识

    这些知识对于编写健壮的C++代码至关重要。 首先,我们来了解一下结构化异常处理(SEH)。SEH是Windows平台特有的异常处理机制,主要用于处理非C++异常,如硬件故障、内存访问错误等。SEH使用`__try`、`__except`和`...

    VS自定义异常处理窗口

    本文将深入探讨VS自定义异常处理窗口的相关知识点,并结合实际操作进行说明。 首先,理解C++中的异常处理机制是基础。C++的异常处理基于`try-catch`块,允许程序员在可能出现错误的代码段周围设置`try`块,然后在`...

    Windows下的异常处理

    下面我们将详细探讨Windows下的异常处理机制及其相关知识点。 一、异常的基本概念 异常是程序执行过程中遇到的非正常情况,如除零错误、访问无效内存地址、硬件故障等。在Windows中,异常由处理器硬件引发,然后由...

    TenRpcs—hook(过异常检测三方非法)_过保护_过异常检测三方非法_异常检测_

    在IT行业中,游戏保护机制是开发者用来防止游戏被破解、作弊或未经授权的修改的重要手段。...对于想在这个领域深入的人来说,理解和掌握过保护、过异常检测三方非法以及异常检测的相关知识至关重要。

    文件异常处理的一个例子

    下面,我们将深入探讨这一主题,分析相关知识点。 首先,我们需要理解文件异常可能来自何处。在读取、写入或操作文件时,常见的异常包括文件不存在、权限不足、磁盘空间不足、文件正在被其他进程使用等。这些异常...

Global site tag (gtag.js) - Google Analytics