java的面向对象基础(5)——异常

java的面向对象基础(5)——异常,第1张

嵌入式之路,贵在日常点滴

                                                                ---阿杰在线送代码

目录

一、异常概念 

什么是异常?

异常导致的后果?

如何防止程序中断?

二、异常的分类 

三、 Java异常处理机制

四、throw和throws

两者区别 

五、常见异常和自定义异常 

常见异常

自定义异常


一、异常概念  什么是异常?

所谓异常是指在程序运行的过程中发生的一些不正常事件。(如除0溢出,数组下标越界,所要读取的文件不存在)

异常导致的后果?

JAVA程序的执行过程中如出现异常事件,可以生成一个异常类对象,该异常对象封装了异常事件的信息,并将其被提交给Java运行时系统,这个过程称为抛出异常,不处理的话会直接导致程序直接中断。

如何防止程序中断?

设计良好的程序应该在程序异常发生时提供处理这些异常的方法,使得程序不会因为异常的发生而阻断或产生不可预见的结果。 

二、异常的分类 
异常类型包括来源处理

受查异常

checked Exception

Exception及其子类

(不包括RuntimeException及其子类)

由代码控制能力之外的因素导致的运行时错误必须要处理,否则通不过编译

非受查异常

unchecked Exception

Error和RuntimeException及其子类RuntimeException一般代表编程错误可以不用处理

三、 Java异常处理机制

try-catch-finally

try:监控区域,执行可能产生异常的代码  (比如读文件、连接网络等等,可能会出现文件没有或者连接不上网络)

catch:捕获、处理异常

finally:善后处理,无论是否发生异常,代码总能执行。

try{}语句块中放的是检测的java代码,可能会抛出异常,也可能会正常执行。catch(异常类型){} 块是当JAVA运行时系统接收到try块中所抛出异常对象时,会寻找能处理这一异常catch块来进行处理(可以有多个catch块)。finally{}不管系统有没有抛出异常都会去执行,一般用来释放资源。除了在之前执行了System.exit(0)
import java.util.Scanner;

class Person
{
	String name;
}

public class Test {
	public static void main(String[] args) {
		Person p = null;
		
		int a = 10;
		int b = 0;
		int c = 0;
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入除数:");
		b = sc.nextInt();
		
		try{
			c = a/b;
			//p.name = "ajie";			
		}catch(java.lang.NullPointerException e){
			System.out.println("空指针,检查下是否没有初始化类");
		}catch(java.lang.ArithmeticException e){
			System.out.println("你输入了0,请重新输入");
			b = sc.nextInt();
			c = a/b;
			System.out.println("c="+c);
		}
		
		//finally{//finally可以不要要,因为这不是固定搭配
		//	System.out.println("end");
		//}

		System.out.println("c="+c);
		System.out.println("end");
	}
}

运行结果:

请输入除数:
0
你输入了0,请重新输入
5
c=2
end

异常有很多,那么是不是catch(异常类型) 都需要记住呢,当然不用啦

import java.util.Scanner;

class Person
{
	String name;
}

public class Test {
	public static void main(String[] args) {
		Person p = null;
		
		int a = 10;
		int b = 0;
		int c = 0;
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入除数:");
		b = sc.nextInt();
		
		try{
			c = a/b;
			//p.name = "ajie";			
		}catch(Exception e){
			System.out.println("空指针,检查下是否没有初始化类");
		
			System.out.println("你输入了0,请重新输入");
			b = sc.nextInt();
			c = a/b;
			System.out.println("c="+c);
		}
		
		//finally{//finally可以不要要,因为这不是固定搭配
		//	System.out.println("end");
		//}
		System.out.println("c="+c);
		System.out.println("end");
	}
}

运行结果:

请输入除数:
0
空指针,检查下是否没有初始化类
你输入了0,请重新输入
5
c=2
c=2
end

四、throw和throws throw用于手动抛出异常,作为程序员可以在任意位置手动抛出异常。throws用于在方法上标识要暴露的异常。抛出的异常交由调用者处理。 两者区别  throw用在方法内,后面跟上要抛出的异常类对象。throws修饰在方法上,告诉调用者此方法可能会抛出异常,后面跟上可能要抛出的异常类名。

throw

class Bar
{
	int age;
	
	public Bar(int age){
		this.age = age;
	}
	void check(){
		if(age < 18){
			throw new IllegalArgumentException("年龄太小");
		}
	}
}

public class Test {
	public static void main(String[] args) {
		
		Bar b = new Bar(15);		
		try{
			b.check();
		}catch(IllegalArgumentException e){
			System.out.println(e.getMessage());//年龄太小
			e.printStackTrace();//抛出异常的数据显示出来java.lang.IllegalArgumen....
		}
		System.out.println("end");
	}
}

运行结果:

年龄太小
java.lang.IllegalArgumentException: 年龄太小
    at Bar.check(Test.java:10)
    at Test.main(Test.java:20)
end 

throws 

class Bar
{
	int age;
	
	public Bar(int age){
		this.age = age;
	}
	void check()throws IllegalArgumentException{
		if(age < 18){
			throw new IllegalArgumentException("年龄太小");
		}
	}
}

public class Test {
	public static void main(String[] args) {
		
		Bar b = new Bar(15);		
		try{
			b.check();
		}catch(IllegalArgumentException e){
			System.out.println(e.getMessage());//年龄太小
			e.printStackTrace();//抛出异常的数据显示出来java.lang.IllegalArgumen....
		}
		System.out.println("end");
	}
}

五、常见异常和自定义异常  常见异常

RuntimeException,IOException,SQLException,ClassNotFoundException

自定义异常

JAVA提供的异常体系不可能预见所有希望加以报告的错误

自定义异常类必须从已有的异常类继承。建立新的异常类型最简单的方法就是让编译器产生默认构造方法。对异常来说,最重要的部分就是它的类名。可以为异常类定义一个接受字符串参数的构造方法,字符参数描述异常信息。 
class Bar
{
	int age;
	
	public Bar(int age){
		this.age = age;
	}
	void check()throws AgeLessThanEighteenException{
		if(age < 18){
			throw new AgeLessThanEighteenException("年龄太小");
		}
	}
}

class AgeLessThanEighteenException extends Exception
{
	private String message;
	public AgeLessThanEighteenException(String message)
	{
		this.message = message;
	}
}

public class Test {
	public static void main(String[] args) {
		
		Bar b = new Bar(15);		
		try{
			b.check();
		}catch(AgeLessThanEighteenException e){
			System.out.println(e.getMessage());//年龄太小
			e.printStackTrace();//抛出异常的数据显示出来java.lang.IllegalArgumen....
		}
		System.out.println("end");
	}
}

运行结果:

null
AgeLessThanEighteenException
    at Bar.check(Test.java:10)
    at Test.main(Test.java:29)
end 

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/2990411.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-09-23
下一篇 2022-09-23

发表评论

登录后才能评论

评论列表(0条)

保存