(1)任何一种程序设计语言设计的程序在运行时都可能出现错误。
(2)捕获错误最理想的是在编译期间,但有的错误只有在运行时才会发生。
(3)对于这些错误,一般有两种解决方法:
那么什么是编译,什么是运行呢?
编译 :又分为编译和链接两个过程。编译是将源文件转换为机器可识别的二进制文件。链接是将这些二进制文件组合成系统可以执行的可执行文件。
运行 :将编译出来的可执行程序放在系统中进行运行。
Java异常 :在java语言中,将程序执行中发生的不正常情况称为异常。
java中的异常用于处理非预期的情况,如文件没找到、网络错误、非法的参数等。
说明 :
try{
//需要判断是否出现异常的语句
}catch(Exception e){
//捕获异常
}finally{
//无论是否出现异常,都会运行这里的代码
}
注意:如果有多个catch,在捕获到前面的异常后,后面的就不会再捕获了。
package myjava;
public class Test3 {
public static void main(String[] args) {
B b = new B();
try {
b.test();
}catch(Exception e){
e.printStackTrace();
}
}
}
class B{
int i;
public void test() throws Exception{
B b = null;
System.out.println(b.i);
}
}
输出:
注意:当父类方法抛出异常,子类方法继承父类对该方法进行重写时,也需要抛出异常,同时抛出的异常范围不能比父类的大。
package myjava;
public class Test3 {
public static void main(String[] args) {
B b = new B();
try {
b.test(200);
}catch(Exception e){
e.printStackTrace();
}
}
}
class B{
int age;
public void test(int age) throws Exception{
if (age>=0 && age <= 100) {
System.out.println("合法");
}else {
throw new Exception("年龄不合法");
}
}
}
输出:
创建用户自定义异常类:用户自定义的异常类必须继承现有的异常类
package myjava;
public class Test3 {
public static void main(String[] args) {
B b = new B();
try {
b.regist(-1);
}catch(Exception e){
e.printStackTrace();
}
}
}
class B{
public void regist(int num) throws Exception{
if (num<0) {
throw new MyException("人数不能为负值",3);
}else {
System.out.println("登记人数"+num);
}
}
}
class MyException extends Exception{
private int idnumber;
public MyException(String message,int id) {
super(message);
this.idnumber = id;
}
public int getId() {
return idnumber;
}
}
输出:
然后就可以抛出异常:
package myjava;
public class Test3 {
public static void main(String[] args) {
B b = new B();
try {
b.message();
}catch(Exception e){
e.printStackTrace();
}
}
}
class B{
public void regist(int num) throws Exception{
if (num<0) {
throw new MyException("人数不能为负值",3);
}else {
System.out.println("登记人数"+num);
}
}
public void message() throws Exception {
try {
regist(-1);
}catch (MyException e){
System.out.println("登记失败,出错种类"+e.getId());
}
System.out.println("本次登记结束");
}
}
class MyException extends Exception{
private int idnumber;
public MyException(String message,int id) {
super(message);
this.idnumber = id;
}
public int getId() {
return idnumber;
}
}
输出: