一.
数组是对象,其内可以是基本数据类型或者对象的引用(存放的是对象的引用,而不是对象本身)
二.
什么是异常
a.异常是程序运行过程中发生的事件,该事件可以中断程序指令的正常执行流程。
b.Java异常分为两大类:
1.错误(Error)是指JVM系统内部错误、资源耗尽等严重情况
2.违例(Execption)则是指其他因编程错误或偶然的外在因素导致的一般性问题,例如对负数开平方根、
空指针访问、试图读取不存在的文件以及网络连接中断等。
Java中异常的分类:
1.运行时异常(runtime exception,unchecked exception)三.
对于非运行时异常的两种处理方式:
1.继续抛出四.
catch处理异常的先后顺序(小的一定放在大的前面)
五.
关于在try中是return和System.exit(0)的情况
public static void main(String[] args) { String str=""; try { str = "hello world"; //return; System.exit(0); } catch (Exception e) { System.out.println("catch executed"); }finally{ System.out.println("finally executed"); } System.out.println(str); }
*/
六、
异常处理机制
a.Java异常处理宗旨:
1.返回到一个安全和已知的状态
2.能够让用户执行其他的命令
3.如果可能,则保存所有的工作
4.如果有必要,可以退出以避免造成进一步的危害
b.处理机制
1.Java程序执行过程中如出现异常,系统会监测到并自动生成一个相对应的异常类对象,然后再将它交给运行时系统
2.运行时系统再寻找相应的代码来处理这一异常。如果Java运行时系统找不到可以处理异常的代码,则
运行时系统将终止,相应的Java程序也将退出
3.程序员通常对错误(Error)无能为力,因而一般只处理违例(Execption)
c.自定义异常的使用
//用户自定义类必须继承Exception类 public class MyException extends Exception { private static final long serialVersionUID = -6378078717298014790L; private int idnumber; public MyException(String message, int id) { // 调用父类(Exception)的构造器...这下是关键 super(message); this.idnumber = id; } public int getId() { return idnumber; } }
//使用Debug调试程序的运行过程......一个很好学习异常的例子! public class TestCustomizingException { public void regist(int num) throws MyException { if(num<0){ throw new MyException("人数为负值,不合理",3); } System.out.println("登记人数:"+num); } public void managet(){ try { regist(-100); } catch (MyException e) { System.out.println("登记失败,出错种类: "+e.getId()); } System.out.println("本次登记操作结束"); } public static void main(String[] args) { new TestCustomizingException().managet(); } }
throw:
throw则是指抛出的一个具体的异常类型
import java.util.Scanner; //用户自定义异常的使用 public class TestThrowException { public static void main(String[] args) { TestThrowException t = new TestThrowException(); System.out.print("请输入您的年龄:"); System.out.println("您的年龄:" + t.inputAge()); } public int inputAge() { int result = -1; Scanner scan = new Scanner(System.in); // 当输入的数不符合的时候,系统进入死循环 while (true) { try { result = Integer.parseInt(scan.next()); if (result < 0 || result > 130) { // 自定义异常类的使用 Exception me = new Exception("年龄超出合理范围!"); throw me; } break;// 执行到break就可以退出死循环 } catch (Exception e1) { System.out.print(e1.getMessage() + "请重新输入:"); } } return result; } }
throws是用来声明一个方法可能抛出的所有异常信息
import java.io.FileInputStream; import java.io.IOException; //抛出异常,让调用者去处理 public class TestThrowsException { public static void main(String[] args) { TestThrowsException t = new TestThrowsException(); try { t.redFile(); } catch (IOException e) { System.out.println(e); } } // 此方法不处理异常,抛出异常,让调用它的方法去处理异常 public void redFile() throws IOException { FileInputStream in = new FileInputStream("myfile.txt"); int b; b = in.read(); while (b != -1) { System.out.print((char) b); b = in.read(); } in.close(); } }
七、
断言(Assert)---知道有这个东西
a.从JDK1.4版本开始,Java语言中引入了断言机制---允许Java开发者在代码中加入一些检查语句,主要
用于程序调试目的:
1.断言机制在用户定义的boolean表达式(判定条件)结果为false时抛出一个Error对象,其类型为AssertionError
2.当我们需要在约定的条件不成立时中断当前操作的话,可以使用断言
3.作为Error的一种,断言失败也不需捕获处理或者声明抛出,一旦出现了则终止程序、不必进行补救和恢复。
b.启用和禁用断言
1.开启断言功能:
Java运行时环境默认设置为关闭断言功能,因此在使用断言以前,需要在运行Java程序时开启断言功能。
java -ea 一个类名
java -enableassertions 一个类名
2.关闭断言功能:
java -da 一个类名
java -disableassertions 一个类名