java异常1 异常概述与分类

/*

  • 异常的概述与分类
  • 1,在Java语言中,将程序执行中发生的不正常情况称为“异常”。 (开发过程中的语法错误和逻辑错误不是异常)
  • 2,Java程序在执行过程中所发生的广义异常事件可分为两类:
  • 2.1Error(也叫错误):Java虚拟机无法解决的严重问题。如:JVM系统内部错误、资源耗尽等严重情况。
  • 比如:StackOverflowError和OutOfMemoryError。一般不编写针对性的代码进行处理。需要修改现有代码。
  • 2.2Exception: 其它因编程错误或偶然的外在因素导致的一般性问题,可以使用针对性的代码进行处理。
  • 例如:空指针访问,数组角标越界,试图读取不存在的文件,网络连接中断等。
  • 3 对于这些错误,一般有两种解决方法:一是遇到错误就终止程序的运行。
  • 另一种方法是由程序员在编写程序时,就考虑到错误的检测、错误消息的提示,以及错误的处理。
  • 捕获错误最理想的是在编译期间,但有的错误只有在运行时才会发生。比如:除数为0,数组下标越界等
  • 4,按照出现时机分类,异常可分为编译期异常和运行时异常。
  • 4.1编译时异常(也叫checked 受检异常,比较严重),是指编译器要求必须处置的异常。即程序在运行时由于外界因素造成的一般性异常。
  • 编译器要求Java程序必须捕获或声明所有编译时异常。对于这类异常,如果程序不处理,可能会带来意想不到的结果。
  • 4.2运行时异常(也叫unchecked非受检异常),是指编译器不要求强制处置的异常。一般是指编程时的逻辑错误,
  • 是程序员应该积极避免其出现的异常。java.lang.RuntimeException类及它的子类都是运行时异常。
  • 对于这类异常,可以不作处理,因为这类异常很普遍,若全处理可能会对程序的可读性和运行效率产生影响。
  • 5,常见异常
  • 5.1异常的顶级父类是Throwable,位于java.lang包下。下面两个子类是Error和Exception,Exception下的子类RuntimeException中的子类都是运行时异常
  • Exception下的其他子类都是编译时异常。例如:IOException,ClassNotFoundException,CloneNotSupportedException。
  • 5.2常见异常
  • 运行时:
  • 1,NullPointerException
  • 2,ArrayIndexOutOfBoundsException
  • 3,ClassCastException
  • 4,NumberFormatException
  • 5,InPutMismatchException
  • 6,ArithmeticException
  • 编译时:
  • 1,IOException
  • 2,FileNotFoundException
  • 3,ClassNotFoundException

*/

package exception;

import java.io.File;
import java.io.FileInputStream;
import java.util.Date;
import java.util.Scanner;

import org.junit.Test;

public class Exception1 {
      public static void main(String[] args) {
    	  
    	  //栈溢出,例如局部变量循环引用。
		  main(args);//java.lang.StackOverflowError
    	  
    	  //堆溢出,创建对象过多
    	  Double[]  d = new Double[1024*1024*1024];//java.lang.OutOfMemoryError
	}

@Test
//空指针异常与角标越界异常
public void method() {
	//空指针
	String s = null;
	System.out.println(s.charAt(1));
	//角标越界
	int[][] array = new int [6][];
	array[0] = new int[10];
	System.out.println(array[0][10]);
}
@Test
//类型转换异常,数据类型异常
public void method1() {
	//类型转换异常
	Object o = new Date();
	String s = (String)o;
	//数据类型异常
	String str = "123F";
	int n = Integer.parseInt(str);
}
@Test
//输入数据不匹配异常,算数异常
public void method2() {
	//输入数据不匹配异常
	Scanner scan = new Scanner(System.in);
	int n = scan.nextInt();	//当在控制台输入小数时,报异常
	//算数异常
	int a = 11;
	int b = 0;
	System.out.println(a / b);
}
@Test
//编译期错误,IDE中会报错,
public void method3() {
	File file = new File("E:\\eclipse-workspace\\Contacts\\src1.txt");
	FileInputStream fis = new FileInputStream(file);
	int date = fis.read();
	while(date != -1) {
		System.out.print((char)date);
		date = fis.read();
	}	
	fis.close();
}

}
发布了47 篇原创文章 · 获赞 1 · 访问量 1039

猜你喜欢

转载自blog.csdn.net/wisdomcodeinside/article/details/104480078