10.异常

Posted wlxslsb

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了10.异常相关的知识,希望对你有一定的参考价值。

一.异常机制
1.定义:程序中的不正常情况,一旦发生程序会终止
2.异常的分类:
最大父类:Throwable
Error:程序本身无法修复。例如:内存溢出,线程死锁
Exception:程序可以预先设定解决方案来解决
运行时异常:代码在编译时不会出错,在运行可能出错
检查时异常:代码在编译时不能通过编译,必须处理

二.处理机制:
1.捕获处理异常:
try:和catch来监控可能产生异常的代码
catch:是捕获try监控代码中产生的异常,并处理。注意:catch必须捕获类型匹配的异常
catch可以写多重catch,更精准的处理异常结果。注意:父类必须写在多重catch的最后一个
finally:终将被执行的代码,不管前面发生什么,都会要被执行,通常将程序中所占用的资源释放代码写在此。
2.抛出异常
throw:是在方法中手动抛出一个异常
throws:是在方法声明时声明有多个异常抛出。谁调用这个方法,谁来处理异常

三.自定义异常:
1.写一个普通类,继承Exception
2.重写getMessage,将异常信息返回出来
3.配合throw关键字来抛出使用

 四.例子

写一段程序,完成输入5个学员的年龄,求平均数

要求:用异常处理,
1如果是输入不匹配异常,我们提醒用户“输入有误”
2如果是其他异常,我们提示用户“系统错误,找管理员”
3.不管程序如何运行,我们都输出“谢谢使用本程序”

 

1.自定义异常,用来限定性别是“男”或者“女”
2.创建一个学员类型,该性别属性封装,在set方法中判断性别是否正常,如果不正常抛出自定义异常
3.测试方法调用,处理异常

 

package com.demo1108;

import java.util.InputMismatchException;
import java.util.Scanner;

/**
 * 异常的案例
 */
public class ExcptionDemo {
	public static void main(String[] args) {
		try{
			Scanner sc = new Scanner(System.in);
			System.out.println("请输入第一个数");
			int num1 = sc.nextInt();
			System.out.println("请输入第二个数");
			int num2 = sc.nextInt();
			int num3 = num1/num2;
			System.out.println(num3);
		}catch (InputMismatchException e) {
			//处理方法。B计划
			System.out.println("A计划失败,执行B");
			e.printStackTrace();
		}catch (ArithmeticException e) {
			System.out.println("A计划失败,执行C");
			e.printStackTrace();
		}catch (Exception e) {
			System.out.println("所有计划都失败,执行自毁程序");
			e.printStackTrace();
		}finally{
			System.out.println("我是终将被执行的代码");
		}
		System.out.println("程序正常结束");
	}
}

  

package com.demo1108;

import java.util.Scanner;

public class MyselfException {
	public static void main(String[] args) {
		Student stu = new Student();
		Scanner sc = new Scanner(System.in);
		while(true){
			System.out.println("请输入性别:");
			try {
				stu.setSex(sc.next());
			} catch (SexException e) {
				System.out.println("输入有误,请重新输入。");
//				e.printStackTrace();
				continue;
			}
			break;
		}
	}
}

class Student{
	private String sex;

	public String getSex() {
		return sex;
	}

	public void setSex(String sex) throws SexException {
		if("男".equals(sex)||"女".equals(sex)){
			this.sex = sex;
		}else{
			throw new SexException();
		}
	}
}

class SexException extends Exception{
	public String getMessage() {
		return "性别只能输入‘男‘或者‘女‘";
	}
}

  

package com.demo1108;

public class ThrowDemo {
	public static void main(String[] args) {
		Teacher t = new Teacher();
		try {
			t.teach();
			System.out.println("你是最棒的");
		} catch (Exception e) {
			e.printStackTrace();
			System.out.println("执行B计划");
		} finally {
			System.out.println("我是谁?");
		}
		System.out.println("程序正常结束");
	}
}
class Teacher{
	public void teach() throws NullPointerException,Exception{
		String weather="高温";
		if("冰冻".equals(weather)){
			throw new Exception("冰冻三尺");
		}
		if("高温".equals(weather)){
			throw new MyException();
		}
		System.out.println("正常上课");
	}
}

class MyException extends Exception{
	@Override
	public String getMessage() {
		return "这是一个自定义异常";
	}
}

  

五.游戏设计文档

设计一款游戏:传奇世界
1.英雄选择:战士,道士,法师,不同的职业有不同的成长属性
2.英雄属性有:
昵称,等级,当前经验值(用来设定判断等级,等级越高普通攻击和血量越高,自己设定),普通攻击力,防御,血量(hp),装备(数组),技能
3.其中装备包括:
头盔,项链,手镯两个,戒子两个,衣服,武器(以出现在装备数组中的顺序为判断依据,比如说,数组中第一个放头盔,依次类推)
4.英雄的攻击和防御值由自身属性加上装备属性叠加得到
5.装备的属性:名字,防御,攻击,血量。注意,装备名字(可以网上查)和属性自己设定
6.技能对象:
属性:名字,使用次数,等级,伤害值
方法:技能释放--就是获取该技能当前等级的伤害值,并输出技能名字,每使用一次累加技能使用次数,达到一定次数技能等级提升,伤害值提升
注意:每个英雄都只有一个技能
战士技能:烈火剑法
道士技能:灵魂火符
法师技能:冰咆哮
技能等级次数和伤害值自己设定
7.英雄方法:
攻击:攻击伤害由攻击(普通攻击+装备攻击)+技能攻击伤害而定
穿戴装备:当击杀怪物后会得到装备,根据装备的特征换到装备栏中相应的位置
选择打怪:选择当前地图的怪物决斗,计算出决斗结果(怪物的血量/(人物伤害-怪物的防御)<>人物血量/(怪物伤害-人物的防御),如果人物获胜,将获得怪物的经验值来升级,还可以获取怪物爆出来的装备。如果人物死亡回新手村满血复活
选择地图:选择4个地图之一
8.怪物设计:
属性有:经验值,名字,血量,攻击力,防御,所带装备数组
方法:
爆出装备--当决斗结果为人物获胜时,将从怪物所带装备数组中随机爆出装备,也有数组保存返回,数组中可以为null

9.地图设计:
总共有4张地图,每张地图上的怪物不一样,自己设定
地图属性:
名字,怪物数组
地图名字:新手村,比奇省,盟重省,祖马庙,地图的难度从左到右依次变难,可以越级选择地图,每个地图都有一个boss,自己设定
地图中包含的怪物:
新手村:鸡,小鹿,稻草人,钉耙猫,半兽人
比奇省:骷髅兵,骷髅战士(boss),骷髅精灵,僵尸,僵尸王(boss)
盟重省:红野猪,黑野猪,白野猪(boss),蜈蚣,钳虫,触龙神(boss)
祖马庙:祖玛战士,祖玛卫士,祖玛弓箭手,祖玛教主(终极boss杀死他通关)

10.系统设计:
属性:当前人物,当前地图
方法:游戏执行流程--显示当前菜单--人物选择功能--循环人物选择功能直到人物死亡回到新手村继续游戏

 





























































以上是关于10.异常的主要内容,如果未能解决你的问题,请参考以下文章

异常和TCP通讯

使用片段中的处理程序时出现非法状态异常

片段中的Android致命异常

在片段中动态添加文本视图

mvn命令异常:An error has occurred in Javadoc report generation: Unable to find javadoc command异常已解决(代码片段

mvn命令异常:An error has occurred in Javadoc report generation: Unable to find javadoc command异常已解决(代码片段