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

随机推荐

  • ahc适合什么年龄段?

    ahc适合18岁-30年龄段。1、玻尿酸B5眼霜:这款眼霜真的是很有名了,价格真的超级亲民,而且质感非常水润,主要的功能是补水,非常适合年龄在20左右的学生党妹子。再强调一遍它的价格对学生党真的超级友好了。2、AHC神仙水:也是适合20

  • 什么的石头?

    圆形的石头。形容词(英文 :adjective,简称adj. )是词类的一种,主要用来描写或修饰名词或代词,表示人或事物的性质、 状态、特征或属性,常用作定语,也可作表语或补语。语法是语法规律,任何人在使用语言时,不管他是否学过语法,但都

    2023-02-03
    100
  • 形容童年的词语,越多越好。

    自由、烂漫、活泼、天真、纯真。一、自由不受拘束;不受限制:~发言。引证解释:清 蒲松龄 《聊斋志异·巩仙》:“不如秀才家得自由也。”二、烂漫形容坦率自然,毫不做作:天真~。引证解释:冰心 《六一姐》:“童稚烂漫流动的心,在无数的

    2023-02-03
    100
  • 什么是猫眼效应?

    猫因有一双深不可测、变化无穷和充满灵气的眼睛而成为人类的宠物。宝石作为自然界中的石之精品,其中有相当一部分品种当以一定切磨方式切割并在光照下,呈现与猫的眼睛十分相似的景象,宝石学中把这种现象冠以“猫眼效应”。 猫眼效应(Chatoyancy

  • 《风语者》免费在线观看完整版高清,求百度网盘资源

    《风语者》百度网盘高清资源免费在线观看:链接: https:pan.baidu.coms1CcVi3HyNDWxqgTA_e7KY5A?pwd=35ih 提取码: 35ih《风语者》导演: 吴宇森编剧: 约翰·赖斯、乔·巴特尔主演

    2023-02-03
    100
  • 行政能力测试都考什么

    行政职业能力测验主要测查与公务员职业密切相关的、适合通过客观化纸笔测验方式进行考查的基本素质和能力要素,主要包括言语理解与表达、数量关系、判断推理、资料分析和常识判断等内容。扩展资料行政能力测试为行政职业能力测试的简称,即通常所说的“行测

    2023-02-03
    100
  • 什么是原始森林

    原始森林又称原生林,是指一个森林已经达到非常长久的年龄而没有遭到显著的干扰,从而表现出独特的生态特征,并可能被归类为顶极群落。原生特性包括多样化的树有关的结构,提供多样化的野生动物栖息地,增加了森林生态系统的生物多样性,多样化的树结构的概

    2023-02-03
    100
  • 225是多少码的鞋子

    鞋上的225,表示鞋子内长是22.5厘米的,鞋子是36码的。鞋子尺寸对照表:拓展资料:鞋码通常也称鞋号,是用来衡量人类脚的形状以便配鞋的标准单位系统。由于不同类型的的鞋d大写也会有所不同,所以在买鞋的时候最好去店里试穿一下。225是35

    2023-02-03
    100
  • 影印版和正版的区别

    影印版和正版的区别在于版权不同、印刷质量不同和工艺不同:1、版权不同影印版是对原版的完全复制,并不具备版权,是获得原版的授权后印刷的,出版方为原来的出版社;正版是正确的使用版权,版权是属于版权所有人的,只要符合版权所有人提出的条件即可使

发表评论

登录后才能评论

评论列表(0条)

    保存