一.
数组是对象,其内可以是基本数据类型或者对象的引用(存放的是对象的引用,而不是对象本身)
二.
什么是异常
a.异常是程序运行过程中发生的事件,该事件可以中断程序指令的正常执行流程。
b.Java异常分为两大类:
1.错误(Error)是指JVM系统内部错误、资源耗尽等严重情况
2.违例(Execption)则是指其他因编程错误或偶然的外在因素导致的一般性问题,例如对负数开平方根、
空指针访问、试图读取不存在的文件以及网络连接中断等。
Java中异常的分类:
1.运行时异常(runtime exception,unchecked exception)2.非运行时异常(checked exception)
三.
对于非运行时异常的两种处理方式:
1.继续抛出2.try...catch
四.
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);
}
/**
* 执行return,会执行finally,然后就退出(不会执行后面的那个打印语句)
* 执行System.exit(0),直接退出程序(连finally也不执行)
*/
六、
异常处理机制
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:
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 一个类名