zoukankan      html  css  js  c++  java
  • 第八周作业总结&第六次实验报告

    实验六 Java异常

    实验目的

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

    实验要求

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

    实验内容

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

    实验过程

    package shiyan6;
    
    public class Set {
    	public static void main(String args[]) {
    		int a[] = new int[4];
    		try {
    			System.out.println(a[5]);
    		}catch(ArrayIndexOutOfBoundsException e) {
    			System.out.println("出现数组越界异常");
    		}finally {
    			System.out.println("一定会执行的代码");
    		}
    	}
    
    }
    
    

    实验结果

    自定义异常类的使用

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

    技术方案:

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

    实验过程

    package shiyan6;
    
    
    @SuppressWarnings("serial")
    public class DangerException extends Exception {
    
    	public DangerException() {
    		
    	}
    	public void toShow(String name) {
    		System.out.println(name + "是危险品");
    		
    	}
    
    }
    
    package shiyan6;
    
    import java.util.ArrayList;
    
    
    public class Machine {
    	
    		ArrayList<String> dangergoods=new ArrayList<String>();
    		public Machine() {
    			dangergoods.add("汽油");
    			dangergoods.add("抢");
    			dangergoods.add("刀");
    			dangergoods.add("钢管");
    			dangergoods.add("火药");
    			dangergoods.add("炸弹");
    			
    		}
    		public void Adddangergoods(String str) {
    			dangergoods.add(str);
    			System.out.println(str + "加入危险品成功");
    			System.out.println("当前危险品有"+ dangergoods);
    		}
    		public void Movedangergoods(String str) {
    			if(dangergoods.contains(str)) {
    			dangergoods.remove(str);
    			System.out.println("删除危险品" + str + "成功");
    			System.out.println("当前危险品有"+ dangergoods);
    			}
    			else {
    				System.out.println("没有这个危险品");
    			}
    		}
    		
    		public void checkBag(Goods goods)throws DangerException{
    			try {
    				if(dangergoods.contains(goods.getName())){
    					throw new DangerException();
    				}
    			}catch(DangerException e) {
    				e.toShow(goods.getName());
    			}
    			if(dangergoods.contains(goods.getName()) != true) {
    				System.out.println(goods.getName() + "不是危险品");
    			}
    	
    		}
    	
    
    }
    
    package shiyan6;
    
    
    public class Goods {
    	
    
    	private String name;
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	public Goods(String name) {
    		this.name = name;
    	}
    	public Goods() {
    
    	}
    		
    	
    
    }
    
    package shiyan6;
    import java.util.*;
    public class Test {
    
    	public static void main(String[] args) {
    		Goods name = new Goods();
    		Machine machine = new Machine();
    		Scanner in = new Scanner(System.in);
    		Scanner gs = new Scanner(System.in);
    		while(true) {
    			System.out.println("输入C检查是否为危险品,A增加危险品,R删除危险品,E退出程序.。。。。");
    			
    			String d = in.nextLine();
    			switch(d) {
    			case "C":{
    				System.out.println("请输入要检查的物品。。。。。。");
    				String c = gs.nextLine();
    				name.setName(c);
    				try {
    					machine.checkBag(name);
    				} catch (DangerException e) {
    					System.err.println(name.getName());
    					
    				}
    				
    				break;
    			}
    			case "A":{
    				System.out.println("请输入要增加的危险品。。。。。");
    				String str = gs.nextLine();
    				machine.Adddangergoods(str);
    				
    				break;
    			}
    			case "R":{
    				System.out.println("请输入要删除的危险品。。。。。");
    				String str = gs.nextLine();
    				machine.Movedangergoods(str);
    				
    				break;
    			}
    			case "E":{
    				System.exit(0);
    				
    				break;
    			}
    			default:{
    				System.out.println("输入错误,请重新输入!!!!!");
    				
    				break;
    			}
    			}
    			if(d == "E") {
    				
    				break;
    			}
    		
    	}
    		in.close();
    		gs.close();
    	}
    }
    
    

    实验结果

    实验总结

    这次实验前面没有什么问题,后面那个有一点小问题,可能是对类与对象的综合应用,做的有点少了,但是问题不大,琢磨一会就搞出来了,但是后面从键盘输入的时候会出现一种问题,就是中文字符中间会莫名其妙的出现他的拼音像这样

    后面试了一下,是输入的时候没有把光标移到下面来

    第八周总结

    本周主要讲了throw关键字,自定义异常,包装类,多线程,同步与死锁
    throw关键字直接抛出一个异常,抛出时直接抛出异常类的实例化对象即可。

    自定义异常类

    只需继承Exception或RuntimeException即可

    包装类

    java中提倡的一种思想,一切皆对象,但是Java中又分为引用数据类型,和基本数据类型,包装类就是把基本数据类型变成对象。

    Character属于Object的直接子类
    Boolean属于Object的直接子类
    其余属于Number的子类。

    装箱和拆箱

    将一个基本数据类型变成包装类为装箱,将一个包装类变成基本数据类型为拆箱。

    多线程

    多线程是实现并发机制的一种有效手段。

    Java中实现多线程有两种方式,一种是继承Thread类,一种是实现Runnable接口,1.5之后还有一个Callable接口
    一个类继承Thread类就称这个类为多线程类,在其中必须覆写run()方法。这个方法为线程的主体。

    要正确的启动线程,是不能直接调用run()方法,应该调用从Thread类继承而来的start()方法。
    虽然调用的是start()方法,但实际调用的是run()方法的主体。
    并且只能调用一次start()方法。
    Runnable接口中只提供一个run()方法

    启用多线程还是要用Thread类
    通过public Thread(Runnable target)和 public Tread(Runnable target,String name),这两个构造方法可以接受Runnable的子类实例对象。
    Runnable可实现资源共享,而Thread则不行。
    实现Runnable接口是有一些优势
    1.适合多个相同程序代码的线程去处理同一资源的情况
    2.可以避免由于Java的单继承局限
    3.增强了程序的健壮性,代码能够被多个线程共享,代码与数据是独立的

    同步

    同步代码块,用{}括起来的,再加上synchronized,就称为同步代码块

    还可以同步方法

    死锁

    所谓死锁就是两个线程都在等彼此先完成,造成了程序的停滞状体

  • 相关阅读:
    Andorid手机振动器(Vibrator)的使用
    Log.i()的用法
    刀哥多线程现操作gcd-10-delay
    刀哥多线程全局队列gcd-09-global_queue
    刀哥多线程Barrier异步gcd-08-barrier_async
    刀哥多线程同步任务作用gcd-07-sync_task
    刀哥多线程之主队列gcd-06-main_queue
    刀哥多线程之并发队列gcd-05-dispatch_queue_concurrent
    刀哥多线程串行队列gcd-04-dispatch_queue_serial
    刀哥多线程之03GCD 常用代码
  • 原文地址:https://www.cnblogs.com/xiao--liang/p/11694245.html
Copyright © 2011-2022 走看看