别样JAVA学习(六)继承下(2.5)异常上

1,、异常-概述

异常:就是程序在运行时出现不正常情况。

异常由来:问题也是现实生活中一个具体的事物,

也可以通过java的类的形式进行描述,并封装成对象。

其实就是java对不正常情况进行描述后的对象体现,通过JVM异常处理机制。

对于问题的划分:两种:一种是严重的问题,一种非严重的问题。

对于严重的,java通过Error类进行描述。

对于Error一般不编写针对性的代码对其进行处理。

例:

class ExceptionDemo
{
	public static void main(String[] args)
	{
		byte[] arr=new byte[1024*1024*190];
	}
}

对于非严重的,java通过Exception类进行描述。

对于Exception可以使用针对性的处理方式进行处理。

例:

无论Error或者Exception都具有一些共性内容,

比如:不正常情况的信息,引发原因等。

Throwable(可抛,是所有异常的超类)

|--Error

|--Exception

Error类中的子类共性:末尾以Error结尾

Exception类中的子类共性:末尾以Exception结尾,疾病

2、异常-处理

java提供了特有的语句进行处理,针对Exception

try

{

需要被检测的代码;

}

catch(异常类  变量)

{

处理异常的代码:(处理方式)

}

finally

{

一定会执行的语句;

}

对捕获到的异常对象进行常见方法操作。

e.getMessage();

e.toString();异常名称:异常信息

e.printStackTrace();

		catch(Exception e)
		{
			System.out.println(e);
			System.out.println(e.getMessage());
			System.out.println(e.toString());

			e.printStackTrace();//异常名称:异常信息,异常出现的位置。
			//其实jvm默认的异常处理机制,就是在调用printStackTrace(),打印异常的堆栈跟踪信息。
		}

3、异常-声明

throws Exception//在功能上通过throws的关键字声明了该功能有可能会出现问题。

class Demo
{
	int div(int a,int b)throws Exception<span style="font-family:Microsoft YaHei;">//声明可能会出现问题</span>
	{
		return a/b;
	}
}
class ExceptionDemo1
{
	public static void main(String[] args)
	{
		Demo d=new Demo();
		int x=d.div(4,1);
		System.out.println(x);

		System.out.println("over");
	}
}

就是告诉你上面这个Demo类中的div方法可能会出现问题,要用try-catch()

4、多异常处理

对多异常处理,

1,声明异常时,声明更为具体的异常,这样处理的可以更具体。

函数发生异常,就立即结束。

2,对方声明几个异常,就对应有几个catch块。不要定义多余的catch块。

如果多个catch块中的异常出现继承关系,父类异常块在最下面。

建立在进行catch处理时,catch中一定要定义具体处理方式。

不要简单定义一句e.printStackTrace(),也不要简单就书写一条输出语句。

5、自定义异常

你们有发现,JAVA体系当中分为两大派,异常和错误。

异常有很多小弟,这些小弟的出现,是因为java将常见的问题进行封装。

比如算术异常,脚标异常进行封装。那么就有一个小问题,

因为项目中会出现特有的问题,而这些问题并未被java所描述并封装对象。

所以对于这些特有的问题可以按照java对问题封装的思想。

将特有的问题,进行自定义的异常封装。

需求:在本程序中,对于除数是-1,也视为是错误的是无法进行运算的。

          那么就需要对这个问题进行自定义的描述。手动抛出。

当在函数内部出现了throw抛出异常对象,那么就必须要给对应的处理动作。

要么在内部try catch处理。

要么在函数上声明让调用者处理。

一般情况,在函数内出现异常,函数上需要声明。

结果:

发现打印的结果中只有异常的名称,却没有异常的信息。

因为自定义的异常并未定义信息

如何定义异常信息呢?将以上文件修改

class FuShuException extends Exception
{
	private String msg;
	FuShuException(String msg)
	{
		this.msg=msg;
	}
	public String getMessage()
	{
		return msg;
	}
}

class Demo
{
	int div(int a,int b)throws FuShuException
	{
		if(b<0)
			throw new FuShuException("出现了除数是负数的情况/by fushu");//手动通过throw关键字抛出一个自定义异常对象。
		return a/b;
	}
}

结果:

toString()调用getMessage()

简化:

class FuShuException extends Exception
{
	FuShuException(String msg)
	{
 		super(msg);
	}
}

因为父类中已经把异常信息的操作都完成了,

所以子类只要在构造时,通过super语句将异常信息传递给父类,

那么就可以直接通过getMessage方法获取自定义异常信息。

抛出错误值:

class FuShuException extends Exception
{
	private int value;
	FuShuException(String msg,int value)
	{
		super(msg);
		this.value=value;
	}
	public int getValue()           //多定义了个getValue方法
	{
		return value;
	}
}
class Demo
{
	 int div(int a,int b)throws FuShuException
	 {
		if(b<0)
		        throw new FuShuException("出现了除数是负数的情况/by fushu",b);//手动通过throw关键字抛出一个自定义异常对象。
		return a/b;
 	 }
}
class ExceptionDemo3
{
	 public static void main(String[] args)
	 {
		Demo d=new Demo();
		try
		{
 			int x=d.div(4,-3);
			System.out.println("x="+x);
		}
 		catch(FuShuException e)
		{
			System.out.println(e.toString());
			//System.out.println("出现负数");
			System.out.println("错误的负数是:"+e.getValue());//获取gerValue方法返回的值
		}
	}
}

自定义异常总结:

必须是自定义类继承Exception或Error或Throwable。

继承Exception原因:

异常体系有一个特点,异常类和异常对象都被抛出。

它们都具备可抛性,这个可抛性是Throwable这个体系中独有特点。

只有这个体系中的类和对象才可以被throws和throw

throws和throw的区别:

throws使用在函数上,

throw使用在函数内;

throws后面跟异常类。可以跟多个,用逗号隔开.

throw后面跟异常对象。

时间: 2024-10-24 22:36:38

别样JAVA学习(六)继承下(2.5)异常上的相关文章

Java学习总结(三)——面向对象(上)

Java学习总结(三) -面向对象(上) 一.面向对象的概念及思考方式 面向对象的理解:是一种编程思想,他将对象作为解决问题的基本元素,利用对象与对象之间的相互作用来设计程序. 2.面向对象的思考方式:(1)首先确定问题域中的对象 (2)确定对象的特征与功能 (3)了解对象与对象之间的关系 例:设计一个五子棋游戏的对象:·黑白双方对象     ·绘制棋盘     ·输赢规则 二.类与对象 1.对象:用来描述客观事物的一个实体,由一组属性和行为构成. 2.类:(1)是一个模板,他描述一类对象的行为

别样JAVA学习(六)继承下(2.1)Object类equals()

上一节继承下(一)我们进行抽象类.接口以及多态的学习, 接下来大家我们讲点特殊的东西就是object类, 我们一直在说继承,子继承了父,父还有没有父类呢, 为什么这么思考,大家想构造函数的第一行是不是都有 一个隐式的super()语句,它们是不是也都会去访问自己的 父类呢?其实是的,这个父类叫什么呢? 叫做Object类,传说JAVA对象中的上帝,哈哈. 1.定义 所有对象的超类,所有对象的直接后者间接父类. 肯定是所有对象都具备的功能. 随便定义一个类 class Demo{}除了隐式的构造方

别样JAVA学习(五)继承上

上章我们进行了面向对象的学习, 发现如果定义的几个类中的属性和方法重复, 代码是不是会显得很冗余啊?,有没有一种思想可以简化呢? 有!下面我们来看继承就能解决这个问题 1.继承-概述 继承: 1,提高了代码的复用性 2,让类与类之间产生了关系,也就是多态的特性 注意:千万不要为了获取其它类的功能,简化代码而继承 必须是类与类之间有所属关系才可以继承. Java语言中:java只支持单继承,不支持多继承 因为多继承容易带来安全隐患:当多个父类中定义了相同功能 且功能内容不同时,子类对象不确定运行哪

Java学习笔记---继承和super的用法

自从换了个视频教学,感觉比原来那个好多了,就是学校网速太渣,好多视频看一会卡半天,只能先看看已经下载的了. 不过也好,虽然不能从开始开始重新开,但是已经看过一次,在看一次也是好的,就当巩固学习了. 继承的关键字:extends 格式如下: class 子类名 extends父类名{ ... } 例如 学生是继承人类这一父类的. class student extends person{ ... } 如果一个类的声明没有使用关键字extends,则这个类默认是继承Object类的.Object是所

黑马程序员——java学习5(107-126)——内部类,异常,包

1.内部类 1.1何时: 事物的内部还有事物,就用内部类(人体和心脏举例) 方法: (1)内部类可以直接访问外部类中的成员,包括私有. 之所以可以直接访问外部类中的成员,是因为内部类中持有了一个外部类的引用,格式:外部类名.this (2)外部类要访问内部类,必须建立内部类对象 格式: (1)当内部类定义在外部类的成员位置上,且非私有,可以在外部其他类中,可以直接创建内部类对象 Outer.Inner out=new Outer().new Inner(); (2)当内部类在成员位置上时,就可以

别样JAVA学习(六)继承下(2.2)Object类toString()

接下来说完equals以后,我们学习接下来的toString(), Java又认为所有对象不光具有比较性, 还能使对象变成字符串被打印. 出现 以前前面显示的是数组,现在显示的是这个对象所属的类, 紧跟着是这个对象的哈希值,也就是所有的对象都有哈希值(内存地址). 接下来,修改ObjectDemoToString class类 class ObjectDemoToString { public static void main(String[] args) { Demo d1=new Demo(

别样JAVA学习(六)继承下(2.3)异常下

1.RuntimeException Exception中有一个特殊的子类异常RuntimeException执行时异常. 假设在函数内容抛出该异常,函数上能够不用声明.编译一样通过. 假设在函数上声明了该异常,调用者能够不用进行处理.编译一样通过. 之所以不用在函数上声明,是由于不须要让调用者处理. 当该异常发生,希望程序停止. 由于在执行时,出现了无法继续运算的情况, 希望停止程序后.对代码进行修正. 例: class Person { public void checkName(Strin

别样JAVA学习(六)继承下(2.6)异常下

1.RuntimeException Exception中有一个特殊的子类异常RuntimeException运行时异常, 如果在函数内容抛出该异常,函数上可以不用声明,编译一样通过: 如果在函数上声明了该异常,调用者可以不用进行处理,编译一样通过. 之所以不用在函数上声明,是因为不需要让调用者处理. 当该异常发生,希望程序停止.因为在运行时,出现了无法继续运算的情况, 希望停止程序后,对代码进行修正. 例: class Person { public void checkName(String

别样JAVA学习(六)继承下(1.2)接口

接口 1.概念 初期理解,可以认为是一个特殊的抽象类 当抽象类中的方法都是抽象的,那么该类 可以通过接口的形式来表示. class用于定义类 interface用于定义接口. 2.接口定义 1,接口中常见定义:常量,抽象方法. 2,接口中的成员都有固定修饰符(默认,可不写). 常量:public static final 方法:public abstract 记住:接口中的成员都是public的. 接口:是不可以创建对象的,因为有抽象方法. 需要被子类实现,子类对接口中的抽象方法全都覆 盖后,子