第八周作业总结&第六次实验报告
实验六 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,就称为同步代码块

还可以同步方法

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

第八周作业总结&第六次实验报告的更多相关文章
- 2017-2018-2 1723《程序设计与数据结构》第八周作业 & 实验二 & 第一周结对编程 总结
作业地址 第八周作业:https://edu.cnblogs.com/campus/besti/CS-IMIS-1723/homework/1847 (作业界面已评分,可随时查看,如果对自己的评分有意 ...
- 2018-2019-1 20189221 《Linux内核原理与分析》第八周作业
2018-2019-1 20189221 <Linux内核原理与分析>第八周作业 实验七 编译链接过程 gcc –e –o hello.cpp hello.c / gcc -x cpp-o ...
- 2017-2018-1 JAVA实验站 第八周作业
2017-2018-1 JAVA实验站 第八周作业 详情请见团队博客
- 2017-2018-1 JaWorld 第八周作业
2017-2018-1 JaWorld 第八周作业 团队分工 成员 分工 陈是奇 统计成员工具选择 马平川 类图 王译潇 编码规范 李昱兴 用例图 林臻 状态图 张师瑜 推进工作进展.写博客 UML ...
- 2017-2018-1 20179205《Linux内核原理与设计》第八周作业
<Linux内核原理与设计>第八周作业 视频学习及操作分析 预处理.编译.链接和目标文件的格式 可执行程序是怎么来的? 以C语言为例,经过编译器预处理.编译成汇编代码.汇编器编译成目标代码 ...
- 2019-2020-1 20199329《Linux内核原理与分析》第八周作业
<Linux内核原理与分析>第八周作业 一.本周内容概述: 理解编译链接的过程和ELF可执行文件格式 编程练习动态链接库的两种使用方式 使用gdb跟踪分析一个execve系统调用内核处理函 ...
- 2020-2021-1 20209307 《Linux内核原理与分析》第八周作业
这个作业属于哪个课程 <2020-2021-1Linux内核原理与分析)> 这个作业要求在哪里 <2020-2021-1Linux内核原理与分析第八周作业> 这个作业的目标 & ...
- 第六周学习总结&第四次实验报告
第六周学习总结&第四次实验报告 学习总结 这周我们简单的学习了一点点关于接口的内容,接口是Java中最重要的概念之一,接口可以理解为一个特殊的类, 里面由全局常量和公共的抽象方法组成,接口摆脱 ...
- 2017-2018-1 我爱学Java 第八周 作业
团队六七周作业 团队分工 UML图 工具选择 小编(金立清)有话说 参考资料 团队分工 返回目录 UML图 用例图 类图 活动图 状态图 返回目录 工具选择 ProcessOn - 免费在线作图,实时 ...
随机推荐
- java面向对象5--内部类
6内部类 内部类是指在一个外部类的内部再定义一个类.类名不需要和文件夹相同. 内部类可以是静态static的,也可用public,default,protected和private修饰.(而外部顶级类 ...
- 【NOIP2017提高组模拟12.10】神炎皇
题目 神炎皇乌利亚很喜欢数对,他想找到神奇的数对. 对于一个整数对(a,b),若满足a+b<=n且a+b是ab的因子,则成为神奇的数对.请问这样的数对共有多少呢? 分析 设\(gcd(a,b)= ...
- 什么是工作流java Activity
见:http://www.it165.net/pro/html/201504/37443.html 一. 什么是工作流 以请假为例,现在大多数公司的请假流程是这样的 员工打电话(或网聊)向上级提出请假 ...
- c++ STL map 用法
map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据 处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时 ...
- 【转】django rest framework ModelSerializer 、serializers小结
转自:https://blog.csdn.net/l_vip/article/details/79156113 引言 serializers是什么?官网是这样的”Serializers allow c ...
- (71)一篇文章带你熟悉HTTP协议
作者:涤生_Woo链接:http://www.jianshu.com/p/6e9e4156ece3來源:简书著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 本篇文章篇幅比较长,先 ...
- 南昌网络赛 H The Nth Item
南昌网络赛The Nth Item 暴力快速幂+unordered_map记忆化 注意:记忆化不能写到快速幂求解函数里,不断调用函数会造成很大的时间浪费 #include<bits/stdc++ ...
- [BZOJ2654]:tree(Kruskal+WQS二分)
题目传送门 题目描述 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有need条白色边的生成树.题目保证有解. 输入格式 开始标号),边权,颜色(0白色1黑色). 输出格式 一行表 ...
- linux文件重定向
1:标准输出:2:错误输出 1,exec启动一个新的shell将STDOUT文件描述符重定向到文件 #!/bin/shecho "test exec..."exec > ou ...
- mysql高水位问题解决办法
数据库中有些表使用delete删除了一些行后,发现空间并未释放产生原因:类比Oracle的高水位线产生原理 delete 不会释放文件高水位 truncate会释放 ,实际是把.ibd文件删掉了,再建 ...