- 实验目的
【目的要求】
了解异常处理的概念和机制
熟悉异常类的层次结构
掌握try-catch-finally语句捕获和处理异常
【注意事项】
注意电源插座的用电安全;
遵守计算机的使用注意事项;
防范病毒。
- 实验环境
【使用工具】
电脑
window系统
JDK环境
eclipse开发环境
- 实验内容
【相关知识】
1.内部类
Java支持在一个类中声明另一个类,这样的类称作内部类,而包含内部类的类称为内部类的外嵌类。内部类的外嵌类的成员变量在内部类中仍然有效,内部类中的方法也可以调用外嵌类中的方法。内部类的类体中不可以声明类变量和类方法。内部类仅供它的外嵌类使用其他类不可以用某个类的内部类声明对象。
2.异常
Java使用 try-catch语句来处理异常,将可能出现的异常操作放在 try-catch语句的try部分,一旦try部分抛出异常对象,比如调用某个抛出异常的方法抛出了异常对象,那么,try部分将立刻结束执行,而转向执行相应的 catch部分。
【主要内容】
手机专卖店为了促销自己的产品,决定发行内部购物券,但其他商场不能发行该购物券。编写一个 Mobile Shop类(模拟手机专卖店),该类中有一个名字为 InnerPurchase Money的内
- 10000元的内部购物券相当于销售了3部手机,价值20000的内部购物券相当于销售了6部手机
- SaleMobile类,类中main主方法,创建MobileShop对象,并对成员mobileAmount赋值30,并调用对象的内部类对象的buyMobile()方法,输出相关信息。
- MobileShop类,在其中定义内部类innerPurchaseMoney,内部类的成员变量有moneyValue保存内部劵价值的值,构造方法innerPurchaseMoney(int m)中的m变量是用来赋值给moneyValue;这个内部类中实现buyMobile()方法,参考代码如下:
- buyMobile(){
if(moneyValue>=20000){
mobileAmount= mobileAmount-6;
System. out. print1n(“用价值“+ moneyvalue+“的内部购物券买了6部手机“);
}
else if(moneyValue<20000&&moneyValue>=10000){
mobileAmount= mobileAmount-3;
System.out. print1n(“用价值“+ monera1ue+“的内部购物券买了3部手机“);}
}
- moblieAmount;以及这个变量的set和get方法;
- InnerPurchaseMoney对象PurchaseMoney1和PurchaseMoney2;构造函数中初始化这两个内部类对象,分别让他们一个为价值20000元的内部购物劵,一个价值10000元的内部购物券家教
class MobileShop{
InnerPurchaseMoney purchaseMoney1;
InnerPurchaseMoney purchaseMoney2;
private int mobileAmount;//手机数量
MobileShop(){
purchaseMoney1=new InnerPurchaseMoney(20000);
purchaseMoney2=new InnerPurchaseMoney(10000);
}
void setMobileAmount(int m){
mobileAmount=m;
}
int getMobileAmount(){
return mobileAmount;
}
class InnerPurchaseMoney{
int moneyValue;
InnerPurchaseMoney(int m){
moneyValue=m;
}
void buyMobile(){
if (moneyValue >= 20000) {
mobileAmount=mobileAmount-6;
System.out.println("用价值"+moneyValue+"的内部购物券买了6部手机");
}
else if(moneyValue<20000&&moneyValue>=10000){
mobileAmount=mobileAmount-3;
System.out.println("用价值"+moneyValue+"的内部购物券买了3部手机");
}
}
}
}
//测试类
public class Main {
public static void main(String[] args) {
MobileShop shop=new MobileShop();
shop.setMobileAmount(30);
System.out.println("手机专卖店目前有"+shop.getMobileAmount()+"部手机");
shop.purchaseMoney1.buyMobile();
shop.purchaseMoney2.buyMobile();
System.out.println("手机专卖店目前有"+shop.getMobileAmount()+"部手机");
}
}
车站检查危险品的设备,如果发现危险品会发出警告。编程模拟设备发现危险品。
- Goods类,包括成员变量:isDanger、name,以及它们的get和set方法
- Exception的子类 DangerException,该子类可以创建异常对象,该异常对象调用toShow()方法输出“属于危险品”。
- Machine类,该类的方法 checkBag( Goods goods)当发现参数 goods是危险品时,( goods的isDanger属性是true)将抛出DangerException异常.
- main()方法中的 try-catch语句的try部分让 Machine类的实例调用checkBag( Goods goods)方法,如果发现危险品就在try-catch语句的 catch部分处理危险品。
public class DangerException extends Throwable {
String message;
public DangerException(){
message="危险品!";
}
public void toShow(){
System.out.print(message+"");
}
}
public class Machine {
public void checkBag(Goods goods) throws DangerException{
if(goods.isDanger){
DangerException danger=new DangerException();
throw danger;
}
else {
System.out.print(goods.getName()+"不是危险品!");
}
}
}
public class Goods {
public boolean isDanger;
String name;
public void setDanger(boolean boo)
{
isDanger=boo;
}
public void setName(String s){
name=s;
}
public String getName(){
return name;
}
}
//测试类
public class Demo {
public static void main(String[] args) {
Machine machine=new Machine();
String name[]={"苹果","炸药","西服","硫酸","手表","硫黄"};
Goods []goods=new Goods[name.length];//检查6件物品
for(int i=0;i<name.length;i++){
goods[i]=new Goods();
if(i%2==0){
goods[i].setDanger(false);
goods[i].setName(name[i]);
}
else {
goods[i].setDanger(true);
goods[i].setName(name[i]);
}
}
for(int i=0;i< goods.length;i++){
try{
machine.checkBag((goods[i]));
System.out.println(goods[i].getName()+"检查通过");
}
catch (DangerException e){
e.toShow();
System.out.println(goods[i].getName()+"被禁止!");
}
}
}
}