第八周课程总结&实验报告(六)

实验六                                      Java异常

一、实验目的

  • 理解异常的基本概念;
  • 掌握异常处理方法及熟悉常见异常的捕获方法。

二、实验要求

  • 练习捕获异常、声明异常、抛出异常的方法、熟悉try和catch子句的使用。
  • 掌握自定义异常类的方法。

三、实验内容

1)、编写一个类。

在其main()方法中创建一个一维数组,在try字句中访问数组元素,使其产生ArrayIndexOutOfBoundsException异常。在catch子句里捕获此异常对象,并且打印“数组越界”信息,加一个finally子句,打印一条信息以证明这里确实得到了执行。

实验代码:

package 第八周;

public class Szyj 
{
	public static void main(String[] args) 
	{
		int s[] = { 4, 7, 1, 2, 1, 4, 1, 5, 6 };
		try 
		{
			for (int i = 0; i <= 100; i++)     //  9个数,假设循环100的上限
				System.out.println(s[i]);
			
		} 
		
		catch (ArrayIndexOutOfBoundsException x) 
		{
			x.getStackTrace();
			System.out.println("数组越界");
		} 
		
		finally 
		{
			System.out.println("结      束");
		}
	}
}

实验截图:

错误截图:

  • 原因:finally 虽然只有一个语句,但是两个大括号不能省,这是基本语法,catch也一样。

    正确截图:

总结:

程序的异常处理组合: try-catch 或 try-catch-finally 语句;开始和结束标记“ { ”和“ } ”是 catch 子句语法的一部分,即使该子句只包含一个语句,也不能省略这两个标记;每个 try 块都必须至少有一个 catch 或 finally 子句。

2)、自定义异常类的使用:车站检查危险品的设备,如果发现危险品会发出警告。编程模拟设备发现危险品。


技术方案:

      编写一个Exgeption的子类DangerException,该子类可以创建异常对象,该异常对象调用toShow()方法输出“危险物品”。编写一个Machine类,该类的方法checkBag(Goods goods)当发现参数goods是危险品时(goods的isDanger属性是true)将抛出DangerException异常。

     程序在主类的main()方法中的try-catch语句的try部分让Machine类的实例调用checkBag(Goods goods)的方法,如果发现危险品就在try-catch语句的catch部分处理危险品。

实验代码:

package 自定义异常类;

public class DangerException extends Exception 
{
	String things = "危险物品";

	public DangerException() 
	{
		
	}

	public void toShow() 
	{
		System.out.println(things+"
");
	}
}

package 自定义异常类;

public class Goods 
{
	public String name;
	public boolean flag;
	public String Dangerthings[] = { "小刀", "火药", "汽油", "易燃易爆物品", "枪支" };

	public Goods() 
	{
		
	}

	public void setName(String name) 
	{
		this.name = name;
	}

	public String getName() 
	{
		return this.name;
	}

	public boolean isDanger() 
	{
		for (int i = 0; i < Dangerthings.length; i++) 
		{
			if ((this.name).equals(Dangerthings[i])) 
			{
				this.flag = true;
				break;
			} 
			else 
			{
				this.flag = false;
			}
		}
		return this.flag;
	}

}

package 自定义异常类;

public class Machine {
	Goods goods = new Goods();

	public Machine() {
	}

	public void checkBag(Goods goods) throws DangerException {
		if (goods.isDanger()) {
			DangerException danger = new DangerException();
			throw danger;
		} else {
			System.out.println(goods.getName() + "不是危险物品
");
		}
	}
}
package 自定义异常类;

public class Zhulei 
{
	public static void main(String[] args) 
	{
        Machine machine = new Machine();
        String name[] = {"小刀","手机","汽油","水","耳机","衣服","水果"};
        
        Goods  goods[] = new Goods[name.length];
        for(int i=0;i<name.length;i++) 
        {
            goods[i] = new Goods();
            goods[i].setName(name[i]);
            try 
            {
                machine.checkBag(goods[i]);
            }
            catch(DangerException e)
            {
                System.out.print(name[i]+"是");
                e.toShow();
            }
        }                                     
    }
}

实验截图:

总结:

Java 的异常处理通过 5 个关键字来实现:try、catch、throw、throws 和 finally。try catch 语句用于捕获并处理异常,finally 语句用于在任何情况下(除特殊情况外)都必须执行的代码,throw 语句用于拋出异常,throws 语句用于声明可能会出现的异常。






                                         课程总结





本周新学习了关于出扔下·程序异常的捕获及处理,学习了关键字throw和关键字theows,以及不需要新定义的类Exception,即已经存在的类,可以直接被继承等直接使用,来实现异常处理,以及进程与线程,Java中线程的实现。
异常产生的原因及使用原则:

1、在 Java 中一个异常的产生,主要有如下三种原因:

  • Java 内部错误发生异常,Java 虚拟机产生的异常。
  • 编写的程序代码中的错误所产生的异常,例如空指针异常、数组越界异常等。这种异常称为未检査的异常,一般需要在某些类中集中处理这些异常。
  • 通过 throw 语句手动生成的异常,这种异常称为检査的异常,一般用来告知该方法的调用者一些必要的信息。

2、Java 通过面向对象的方法来处理异常。在一个方法的运行过程中,如果发生了异常,则这个方法会产生代表该异常的一个对象,并把它交给运行时的系统,运行时系统寻找相应的代码来处理这一异常。

3、我们把生成异常对象,并把它提交给运行时系统的过程称为拋出(throw)异常。运行时系统在方法的调用栈中查找,直到找到能够处理该类型异常的对象,这一个过程称为捕获(catch)异常。

4、Exception 类用于用户程序可能出现的异常情况,它是用来创建自定义异常类型类的类。

5、java中 的异常处理机制提供了一种结构性和控制性的方式来处理程序执行期间发生的事件。异常处理的机制如下:

  • 在方法中用 try catch 语句捕获并处理异常,catch 语句可以有多个,用来匹配多个异常。

  • 对于处理不了的异常或者要转型的异常,在方法的声明处通过 throws 语句拋出异常,即由上层的调用方法来处理。

多线程:
    在 Java 中,并发机制非常重要,但并不是所有程序语言都支持线程。在以往的程序中,多以一个任务完成以后再进行下一个任务的模式进行,这样下一个任务的开始必须等待前一个任务的结束。Java 语言提供了并发机制,允许开发人员在程序中执行多个线程,每个线程完成一个功能,并与其他线程并发执行。这种机制被称为多线程。(世间万物都可以同时完成很多工作。例如,人体可以同时进行呼吸、血液循环、思考问题等活动。用户既可以使用计算机听歌,也可以编写文档和发送邮件,而这些活动的完成可以同时进行。这种同时执行多个操作的“思想”在 Java 中被称为并发,而将并发完成的每一件事称为线程。)

线上资源

原文地址:https://www.cnblogs.com/youlanghua/p/11701660.html