Java实验报告

班级 计科一班 学号 20188390 姓名 宋志豪

实验四 类的继承

实验目的

理解异常的基本概念;

掌握异常处理方法及熟悉常见异常的捕获方法。

实验要求

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

掌握自定义异常类的方法。

实验内容

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

自定义异常类的使用

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

实验代码:

package 测试;

import java.util.Scanner;
public class Main {
public static void main(String[] args){
char ch[]={'我','她'};
try{
for(int i=0;i<10;i++){
System.out.println("ch[i]="+ch[i]);
}
}
catch (ArrayIndexOutOfBoundsException aE){
aE.printStackTrace();
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 自定义异常;

public class Goods {
String name;
public Goods(String name) {
super();
this.name = name;
}
public Goods() {
super();
} }

名称的定义

package 自定义异常;
public class DangerException extends Exception {
public void toShow(){
System.out.println("危险物品!");
} }

在判断完成后输出危险品!的提示

package 自定义异常;

import java.util.ArrayList;
public class Machine {
ArrayList<String> dangerGoods=new ArrayList<String>();
public Machine() {
super();
dangerGoods.add("汽油");
dangerGoods.add("易燃物");
dangerGoods.add("刀具");
dangerGoods.add("炸弹");
dangerGoods.add("油漆");
dangerGoods.add("天真");
}
public void checkBag(Goods goods) throws DangerException{
try{
if(dangerGoods.indexOf(goods.name)!=-1){
throw new DangerException();
}
}
catch(DangerException dangerE){
dangerE.toShow();
throw dangerE;
}
}
public void printDangerGoods() {
System.out.println("危险品有:");
int i=1;
for(String s:dangerGoods ){
System.out.print(i+++"、");
System.out.println(s);
}
}
public void addDangerGoods(String dangerGoods) {
this.dangerGoods.add(dangerGoods);
System.out.println("加入危险品成功");
}
public void deleteDangerGoods(String dangerGoods){
if(this.dangerGoods.indexOf(dangerGoods)==-1){
System.out.println("不存在这个危险品");
}
else{
this.dangerGoods.remove(dangerGoods);
System.out.println("删除成功");
}
} }

加入初始含有的危险品,以及加入新的危险品和删除危险品的操作。

package 自定义异常;

import java.util.InputMismatchException;
import java.util.Scanner; public class Main {
public static void main(String [] args){
Scanner input =new Scanner(System.in);
System.out.println("输入1检查危险物品,输入2增加危险物品,输入3删除危险物品。");
Machine machine=new Machine();
int number=1;
while(true){
try{
number=input.nextInt();
if(number>3||number<1){
throw new InputMismatchException();
}
System.out.println("请输入物品名称:");
Goods goods=new Goods(input.next());
if(number==1){
try{
machine.checkBag(goods);
System.out.println("不是危险品");
}
catch(DangerException dangerE){
System.out.println("危险品");
}
}
else if(number==2){
machine.addDangerGoods(goods.name);
}
else if(number==3){
machine.deleteDangerGoods(goods.name);
}
}
catch(InputMismatchException inputE){
System.out.println("请输入1-3的数字!");
}
}
} }

实现危险品的判断以及在控制台控制你要进行的操作的选择。

上述各个实现一部分功能,从而实现题目的要求。

实验结果:

本次实验总结

对我来说,这次的实验是一次不小的挑战,还是没能单独完成,借助了网络的力量。

学习总结

(1)包装类

     包装类分为两种类型:

1、对象型(Object的直接子类):Boolean、Character(char);

2、数值型(Number的直接子类): Byte、Double、Short、Long、Integer(int)、Float;

(2)字符串与基本数据类型相互转换

     字符串转换为基本数据类型

1.、String变为int 类型(Integer类):

public static int parseInt(String s) throwsNumberFormatException

2、 String变为double类型(Double类):

public static double parseDouble(String s) throwsNumberFormatException

3、String变为Boolean类型(Boolean类):

public static boolean parseBoolean(String

(3)基本数据类型转换为字符串

 1. 任何数据类型使用了"+"连接空白字符串就变为了字符串类型。
2. 使用String类中提供的valueOf()方法,此方法不产生垃圾。

(4)异常

所有的异常都是从Throwable继承而来的。

1、运行时异常(unchecked exception):继承自java.lang. RuntimeException类

常见的:

ClassCastException(类型转换异常)

IndexOutOfBoundsException(数组越界)

NullPointerException(空指针)

ArrayStoreException(数据存储异常,操作数组时类型不一致)

IO操作的BufferOverflowException异常

网络上搜索到的!!

2、非运行时异常(checked exception):继承自java.lang.Exception类

常见的:

Java.lang.ClassNotFoundException

Java.lang.NoSuchMetodException

java.io.IOException

网络上搜索到的!!

Exception:

定义方法时必须声明所有可能会抛出的exception; 在调用这个方法时,必须捕获它的checked exception,不然就得把它的exception传递下去;exception是从java.lang.Exception类衍生出来的。例如:IOException,SQLException就属于Exception。

处理(用try ..catch..finally)异常类名不会的话可以用API。

而RuntimeExcepetion处理可以随意。其他的Excepetion必须处理。

(5)装箱和拆箱

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

装箱范例:



拆箱范例:



(6)多线程

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

Java中实现多线程有两种方式,一种是继承Thread类,一种是实现Runnable接口,1.5之后还有一个Callable接口

一个类继承Thread类就称这个类为多线程类,在其中必须覆写run()方法。这个方法为线程的主体。

要正确的启动线程,是不能直接调用run()方法,应该调用从Thread类继承而来的start()方法。

虽然调用的是start()方法,但实际调用的是run()方法的主体。

并且只能调用一次start()方法。

Runnable接口中只提供一个run()方法。

第八周课程报告&&实验报告六的更多相关文章

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

    第八周课程总结 一.包装类 介绍 装箱与拆箱 应用 二.异常 基本概念 基本格式 异常类的继承结构 throws关键字 throw关键字 Exception类和RuntimeException类 自定 ...

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

    第八周课程总结 启动多线程售票(上课老师说要加入作业的部分) public class TestDemo { public static void main(StringD args) throws ...

  3. 第八周课程总结-实验报告六(Java异常)

    理解异常的基本概念: 掌握异常处理方法及熟悉常见异常的捕获方法 实验要求 练习捕获异常.声明异常.抛出异常的方法.熟悉try和catch子句的使用. 掌握自定义异常类的方法 实验内容 编写一个类,在其 ...

  4. 第八周课程总结&实验报告六

    实验六 Java异常 实验目的 理解异常的基本概念: 掌握异常处理方法及熟悉常见异常的捕获方法. 实验要求 练习捕获异常.声明异常.抛出异常的方法.熟悉try和catch子句的使用. 掌握自定义异常类 ...

  5. 第八周课程总结&实验报告

    实验六 Java异常 •实验目的 •理解异常的基本概念: •掌握异常处理方法及熟悉常见异常的捕获方法. • 实验要求 •练习捕获异常.声明异常.抛出异常的方法.熟悉try和catch子句的使用. •掌 ...

  6. 第六周课程总结&实验报告(四)

    实验报告(四) 一.实验目的 1.掌握类的继承 2.变量的继承和覆盖,方法的继承,重载和覆盖的实现 二.实验的内容 1.根据下面的要求实现圆类Circle. 圆类Circle的成员变量:radius表 ...

  7. 第三周课程总结&实验报告

    课程总结 在这周对Java进行了更深层次的学习,Java的学习也变得越来越困难而有趣,加入了一些新的构造新的方法,还学习了一些简化代码的方式. 面向对象的基本概念 对于面向对象的程序设计有三个主要特征 ...

  8. 第九周课程总结 & 实验报告(七)

    第九周课程总结 一.多线程 1.线程的状态 2.线程操作的相关方法 二.Java IO 1.操作文件的类---File ()基本介绍 ()使用File类操作文件 .RandomAccessFile类 ...

  9. 第七周课程总结 & 实验报告(五)

    第七周课程总结 一.抽象类与接口的应用 1.实例化 2.实际应用 ---模板设计(抽象类) ---制定标准(接口) 3.设计模式 ---工厂设计 ---代理设计 ---适配器设计 二.抽象类与接口之间 ...

  10. 第三周课程总结&实验报告(一)

    实验报告(一) 1.打印输出所有的"水仙花数",所谓"水仙花数"是指一个3位数,其中各位数字立方和等于该数本身.例如,153是一个"水仙花数" ...

随机推荐

  1. Acwing-278-数字组合(背包)

    链接: https://www.acwing.com/problem/content/280/ 题意: 给定N个正整数A1,A2,-,AN,从中选出若干个数,使它们的和为M,求有多少种选择方案. 思路 ...

  2. Array数组对象方法

    Array 对象方法 方法 描述 concat() 连接两个或更多的数组,并返回结果. copyWithin() 从数组的指定位置拷贝元素到数组的另一个指定位置中. entries() 返回数组的可迭 ...

  3. 在linux 下安装git

    ① 安装 Git Linux 做为服务器端系统,Windows 作为客户端系统,分别安装 Git 服务器端: #yum install -y git 安装完后,查看 Git 版本 [root@loca ...

  4. 51 Nod 1069 Nim游戏

    分析: a1 xor a2 xor a3 ... xor an !=0 则为必胜态 a1 xor a2 xor a3 ... xor an ==0 则为必败态 也就是说只要计算异或值,如果非零则A赢, ...

  5. TTTTTTTTTTT 400D Dima and Bacteria 细菌 最短路

    题意: 题目大意:给出n,m和k,表示有n个细菌,m种仪器和k种细菌,给出k种细菌的数量ci,然后每个细菌按照种类排成一排(所以有第i种细菌的序号从∑(1≤j≤i-1)cj + 1 到∑(1≤j≤i) ...

  6. 学习sklearn聚类使用

    学习利用sklearn的几个聚类方法: 一.几种聚类方法 1.高斯混合聚类(mixture of gaussians) 2.k均值聚类(kmeans) 3.密度聚类,均值漂移(mean shift) ...

  7. python基础之流程控制

    流程控制之----if 流程控制,是指程序在运行时,个别的指令(或者是陈述.子程序)运行或者求值的顺序.人生道路上的岔口有很多,在每个路口都是一个选择,在每个路口加上一个标签,选择哪个就是满足哪个条件 ...

  8. Acwing:102. 最佳牛围栏(前缀和 + 二分)

    农夫约翰的农场由 NN 块田地组成,每块地里都有一定数量的牛,其数量不会少于1头,也不会超过2000头. 约翰希望用围栏将一部分连续的田地围起来,并使得围起来的区域内每块地包含的牛的数量的平均值达到最 ...

  9. LeetCode 198. 打家劫舍(House Robber)LeetCode 213. 打家劫舍 II(House Robber II)

    打家劫舍 题目描述 你是一个专业的小偷,计划偷窃沿街的房屋.每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报 ...

  10. js 函数定义的方式

    js 函数定义的方式 一.总结 一句话总结: 最常见就下面三种 最常见:function func1([参数]){/*函数体*/} 将匿名函数赋值给变量:var func2=function([参数] ...