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

实验报告(六)

一.实验目的

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

二.实验要求

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

三.实验内容

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

(1)实验代码:

package 测试;

public class 测试0 {

	public static void main(String[] args) {
		System.out.println("准备出现ArrayIndexOutOfBoundsException异常");
		try {
			int a[]= {1,2,3};
			for(int i=0;i<4;i++) {
				System.out.println(a[i]);
			}
		}catch(Exception e) {
			System.out.println("数组越界: "+e);
		}finally {
			System.out.println("不管是否出现异常,都执行此代码");
		}
		System.out.println("结束");
	}

}

(2)实验运行结果截图:

(3)实验大致思路:

运用try-catch-finally的格式,在try里编写会造成数组越界的语句,用catch捕获异常并输出,再用finally确定证明这个代码确实运行了.

(4)实验中遇到的问题:

一开始不清楚ArrayIndexOutOfBoundsException是什么,查了一下才知道是数组如果索引为负或大于等于数组大小,则该索引为非法索引.搞清楚之后就简单了,直接仿照书上编写,最初是弄了个空数组,再把索引弄成负数,但是我觉得这样没有输出不太好,就直接让索引大于数组了.

2.自定义异常类的使用:

车站检查危险品的设备,如果发现危险品会发出警告。编程模拟设备发现危险品。

技术方案:
编写一个Exgeption的子类DangerException,该子类可以创建异常对象,该异常对象调用toShow()方法输出“危险物品”。编写一个Machine类,该类的方法checkBag(Goods goods)当发现参数goods是危险品时(goods的isDanger属性是true)将抛出DangerException异常。
程序在主类的main()方法中的try-catch语句的try部分让Machine类的实例调用checkBag(Goods goods)的方法,如果发现危险品就在try-catch语句的catch部分处理危险品。

(1)实验代码:

DangerException类:

package 测试;

public class DangerException extends Exception {
    String massage;
    public DangerException(){
        this.massage="危险物品";
    }
    public void toShow(){
        System.err.println(massage);
    }
}

Machine类

package 测试;

public class Machine {
    public void checkBag(Goods goods) throws DangerException{
        if(goods.isDanger){
            DangerException danger=new DangerException();
            throw danger;
        }
        else {
            System.out.println(goods.getGoods()+"不是危险物品");
        }
    }
}

Goods类

package 测试;

public class Goods {
	String goods;
	boolean isDanger;
	public Goods(String goods) {
		this.goods = goods;
	}
	public String getGoods() {
		return goods;
	}
	public void setGoods(String goods) {
		this.goods = goods;
	}
	public boolean isDanger() {
		return isDanger;
	}
	public void setDanger(boolean isDanger) {
		this.isDanger = isDanger;
	}
	
}

实验运行

package 测试;
import java.util.Scanner;
import java.util.ArrayList;
public class 测试0 {

	public static void main(String[] args) {
		System.out.println("请输入检查的物品:");
		ArrayList<String> array=new ArrayList<String>();
		array.add("枪支");
		array.add("zhayao");
		array.add("管制刀具");
		array.add("毒害品");
		array.add("腐蚀性物品");
		array.add("放射性物品");
		
		 Scanner input=new Scanner(System.in);
		 String str=input.next();
		 Goods goods=new Goods(str);
		 goods.setDanger(false);
		 Machine mac=new Machine();
		 
		 for(int i=0;i<array.size();i++) {
			 if(array.get(i).equals(str)) {
				 goods.setDanger(true);
				 break;
			 }
		 }
		 
		 try {
			 mac.checkBag(goods);
		 }catch(DangerException e){
			 e.toShow();
			 System.out.println(goods.getGoods()+"是危险物品");
		 }
		 	 
	}

}

(2)实验运行结果截图:

危险物品

不是危险物品

(3)实验大致思路:

分别定义多个类,用于判断是否为危险物品的Goods类,用于抛出异常的Machine类,还有异常类DangerException类以及用于输入输出的主类 测试0 ,在主类中定义危险物品的"名单",再输入物品然后判断是否在"名单"上,通过改变goods中isDanger的属性来判断是否为危险物品,最后运行try-catch语句调用checkBag(Goods goods)的方法,如果发现危险品就在try-catch语句的catch部分处理危险品.

(4)实验中遇到的问题:

在写代码的时候有些混乱,对于自定义异常还是没能够很好的理解,在处理这些多个类比较容易弄杂,不过知道了一种新的用法ArrayList类,很方便的能增加"危险物品",还有就是之前异常类里输出的我用的是System.out.println,发现输出的是黑色的字,把out改成err就可以了,但是不是很清楚这是怎么回事,这类输出除了out,err应该是还有别的,但是我不知道,要学和要了解的还是太多了

(5)写博客中遇到的问题

写的差不多的时候提交就出现了这个问题,不过也不好改代码还有截图了,就直接把代码里的zhayao替换成拼音了(我人傻了,还有这种情况)

第八周课程总结

本周主要学习了异常类还有多线程

这周学习的内容:

1.异常的定义

异常是导致程序中断运行的一种指令流,如果不对异常进行正确的处理,则可能导致程序的中断执行,造成不必要的损失,所以在程序的设计中必须要考虑各种异常的发生,并正确的做好相应的处理,这样才能保证程序正常的执行

2.异常处理格式

try{
     //有可能出现异常的语句
 }catch(异常类  异常对象){
     //编写异常处理语句
 }[catch(异常类  异常对象){
     //编写异常处理语句
 }...]
 [finally{
    一定会运行到的代码;
 }]
   

3.异常类的继承结构

在整个java的异常结构中,实际上有以下两个最常用的类:Exception、Error,这两个类全都是Throwable的子类

  • Exception:一般表示的是程序中出现的问题,可以直接使用try…catch处理。
  • Error:一般指的是JVM错误,程序中无法处理

4.Java的异常处理机制

在整个java的异常处理中,实际上也是按照面向对象的方式进行处理,处理的步骤如下:

  • 一旦产生异常,则首先会产生一个异常类的实例化对象;
  • 在try语句中对此异常对象进行捕捉;
  • 产生的异常对象与catch语句中的各个异常类型进行匹配,如果匹配成功,则执行catch语句中的代码。

5.throws关键字和 throw关键字

在定义一个方法的时候可以使用throws关键字声明,使用throws声明的方法表示此方法不处理异常,而交给方法的调用处进行处理 。
throws使用格式

public 返回值类型 方法名称(参数列表…) throws 异常类{}

与throws不同的是,可以直接使用throw抛出一个异常。抛出的时候直接抛出异常类的实例化对象即可。

抛出异常

public class ThrowDemo01 {
	public static void main(String args[]){
		try{
			throw new Exception("自己抛出的异常!") ;
		// 抛出异常的实例化对象
		}catch(Exception e){							// 捕获异常
			System.out.println(e);
		}
	}
}

6.自定义异常类

在Java中已经提供了大量的异常类,但是这些异常类有些时候也很难满足开发者的要求,所以此时用户可以根据自己的需要定义自己的异常类,定义异常类,只需要继承Exception类即可。

class MyException extends Exception{	// 自定义异常类,继承Exception类
	public MyException(String msg){	// 构造方法接收异常信息
		super(msg) ;			// 调用父类中的构造方法
	}
}
public class DefaultException {
	public static void main(String args[]) {
		try{
			throw new MyException("自定义异常。") ;	// 抛出异常
		}catch(Exception e){			// 异常处理
			System.out.println(e) ;
		}
	}
}

7.进程与线程

  • 进程是程序的一次动态执行过程,它经历了从代码加载、执行到执行完毕的一个完整过程,这个过程也是进程本身从产生、发展到最终消亡的过程。
  • 多线程是实现并发机制的一种有效手段。进程和线程一样,都是实现并发的一个基本单位。

8.Java中线程的实现

在Java中要想实现多线程代码有两种手段:

  • 一种是继承Thread类
  • 另一种就是实现Runnable接口

(1).继承Thread类:
Thread类是在java.lang包中定义的,一个类只要继承了Thread类,此类就称为多线程操作类。在Thread子类之中,必须明确的覆写Thread类中的run()方法,此方法为线程的主体。
多线程的定义语法:

class 类名称 extends Thread{		// 继承Thread类	
		属性… ; 			// 类中定义属性	
		方法… ; 			// 类中定义方法	
		 // 覆写Thread类中的run()方法,此方法是线程的主体
		public void run(){			
			线程主体;
		}
	}

(2).实现Runnable接口

在Java中也可以通过实现Runnable接口的方式实现多线程,Runnable接口中只定义了一个抽象方法:

public void run() ;

通过Runnable接口实现多线程:

class 类名称 implements Runnable{	// 实现Runnable接口
		属性… ; 			// 类中定义属性	
		方法… ; 			// 类中定义方法	
		public void run(){            	// 覆写Runnable接口里的run()方法		线程主体 ; 
		}
	}

Thread类和Runnable接口的区别:

**实际上Thread类和Runnable接口之间在使用上也是有所区别的,如果一个类继承Thread类,则不适合于多个线程共享资源,而实现了Runnable接口,则可以方便的实现资源的共享。 **

posted on 2019-10-18 09:45  噫~  阅读(398)  评论(1编辑  收藏  举报

导航