12.--基本异常处理

来源:互联网 发布:mac视网膜高清壁纸 编辑:程序博客网 时间:2024/05/22 23:28

1、二维数组的创建
   a、静态初始化
   b、动态初始化
   c、默认初始化
  2、二维数组的赋值
   a、二维数组的第一个方括号,标记第一维(即最外层)数组的元素。
   b、二维数组的第二个方括号,标记第二维(即内层)数组的元素。
  3、二维数组的访问
   a、数组array[x][y]表示指定的是第x行第y列的值。  、
   b、数组名后直接加上length(如array.length),所指的是有几行(Row)
   c、指定索引后加上length(如array[0].length),指的是该行所拥有的元素,也就是列(Column)数目。 
  4、异常机制
   a、异常及错误:
    Throwable
     Error
      AWTError
      IOError
      LinkageError
      ThreadDeath
     Exception
      SQLException
      IOException 
      RuntimeException
       IndexOutOfBoundsException
       NullPointerException
       ClassCastException
   b、Throwable:
   有两个重要的子类:Exception(异常)和 Error(错误),二者都是 Java 异常处理的重要子类,各自都包含大量子类。
   
   c、Error:
   系统或虚拟机的异常,无法捕获。如:OutOfMemoryError
   
   d、Exception:
   程序本身可以处理的异常。
   
   RuntimeException:JVM 常用操作引发的异常,如:NullPointerException

   e、Checked:
   在编译期间就可以发现的异常,必须在运行之前就进行处理的异常。
   除了RuntimeException及其子类以外,
   其他的Exception类及其子类都属于可查异常。
   这种异常的特点是Java编译器会检查它,也就是说,
   当程序中可能出现这类异常,要么用try-catch语句捕获它,
   要么用throws子句声明抛出它,否则编译不会通过。
   
   f、Unchecked:
   包括运行时异常(RuntimeException与其子类)和错误(Error)。

   g、运行时异常:
   运行时异常的特点是Java编译器不会检查它,
   也就是说,当程序中可能出现这类异常,
   即使没有用try-catch语句捕获它,
   也没有用throws子句声明抛出它,也会编译通过。

   h、编译异常:
   是RuntimeException以外的异常,
   类型上都属于Exception类及其子类。
   从程序语法角度讲是必须进行处理的异常,
   如果不处理,程序就不能编译通过。
   如IOException、SQLException等以及用户自定义的Exception异常,
   一般情况下不自定义检查异常。
   
  6、异常处理:
   a、抛出异常:
   一个方法出现错误引发异常时,
   方法创建异常对象并交付运行时系统,
   异常对象中包含了异常类型和异常出现时的程序状态等异常信息。
   运行时系统负责寻找处置异常的代码并执行。

   throws:如果一个方法可能会出现异常,但没有能力处理这种异常,
   可以在方法声明处用throws子句来声明抛出异常。多个异常可使用逗号分割
   throw:异常必须在方法内抛出。

   b、捕获异常:
   try...catch...finally...
   Java规定:对于可查异常必须捕捉、或者声明抛出。允许忽略不可查的RuntimeException和Error。

   try 块:用于捕获异常。其后可接零个或多个catch块,如果没有catch块,则必须跟一个finally块。
   catch 块:用于处理try捕获到的异常。
   finally 块:无论是否捕获或处理异常,finally块里的语句都会被执行。
   当在try块或catch块中遇到return语句时,finally语句块将在方法返回之前被执行。

   在以下4种特殊情况下,finally块不会被执行:
   1)在finally语句块中发生了异常。
   2)在前面的代码中用了System.exit()退出程序。
   3)程序所在的线程死亡。
   4)关闭CPU。

   getCause():返回抛出异常的原因。如果 cause 不存在或未知,则返回 null。

   getMeage():返回异常的消息信息。

   printStackTrace():对象的堆栈跟踪输出至错误输出流,作为字段 System.err 的值。
   

   ClassCastException    类型转换异常类

   ArrayStoreException  数组中包含不兼容的值抛出的异常

   SQLException   操作数据库异常类

   NoSuchFieldException   字段未找到异常

   NoSuchMethodException   方法未找到抛出的异常

   NumberFormatException    字符串转换为数字抛出的异常

   StringIndexOutOfBoundsException 字符串索引超出范围抛出的异常

   IllegalAccessException  不允许访问某类异常

   InstantiationException  当应用程序试图使用Class类中的newInstance()方法创建一个类的实例,而指定的类对象无法被实例化时,抛出该异常
  

代码体现:

一个游戏:

1. 要举办一次活动,计划邀请300人,实际上场地只能够容纳100人,多余的人不能进入场地。

2.举行抽奖活动,100个人选一个。如果人数不够一百,照常进行。抽到的号码没有对应的人,表示没人中奖。

3.要随机一下,抽奖中奖的是男是女。

public class Aexception extends RuntimeException{public void overNum(){System.out.println("人数超过了!!!");}}


 

import java.util.ArrayList;public class People {ArrayList<People> list = new ArrayList<People>();int number;public void peopleNum() throws Aexception{RandomNumber randomNumber =new RandomNumber();randomNumber.randomanpeopleNum();for (int i = 0; i < randomNumber.getPeopleNumber(); i++) {list.add(new People(i+1));}if (list.size() > 100) {throw new Aexception();}}public void peopleRemove(ArrayList<People> list){for (int i = 0; i < list.size()-100; i++) {list.remove(i+100);}}public People(int number){this.number = number;}public People(){}public int getNumber() {return number;}public void setNumber(int number) {this.number = number;}}


 

public class RandomNumber {private int peopleNumber;public void randomanpeopleNum(){peopleNumber = (int)(Math.random()*300);}public int getPeopleNumber() {return peopleNumber;}public void setPeopleNumber(int peopleNumber) {this.peopleNumber = peopleNumber;}}
public class ExceptionDealTest {/** * @param args */public static void main(String[] args) {People people = new People();try {people.peopleNum();} catch (Aexception e) {e.overNum();while (people.list.size() > 100) {people.peopleRemove(people.list);}}//}catch (Exception e) {//e.getStackZdTrace();//}//选择中奖的人,并输出随机性别Random random = new Random();int sex = random.nextInt(2);String sexString = "";switch (sex) {case 0:sexString = "女";break;case 1:sexString = "男";break;default:break;}int temp = random.nextInt(100);if (temp > people.list.size()) {System.out.println("没人能中奖!!!");}else {System.out.println("中奖是:"+ people.list.get(temp).getNumber()+ " 性别:" +sexString);}}}



 

 

 

0 0