异常(Exception)
1.错误与异常
1.错误
错误是指程序遇到非常严重的不正常状态,不能简单恢复执行,一般是在运行时遇到的硬件或操作系统的错误,如内存溢出,操作系统出错,虚拟机出错等,错误对于程序是致命的。
Error类 是错误类 该类由Java虚拟机生成并抛给系统,如内存溢出错误,栈溢出错误,动态链接错误等。
2.异常
异常通常指非致命性错误,一般指在运行程序时硬件和操作系统是正常的,而程序遇到了运行错,如除法运算时除数为零 ,操作数超出数据范围
Exception类是异常类,是Java应用程序捕获和处理的对象。
2.异常处理
捕获异常处理方式是通过try-catch-finally来捕获和处理异常的。
语法格式如下
try{
//将可能出现异常的代码放这里
}catch(要捕获的异常类型 e){
//如果try中的代码抛出异常了,此处catch捕获时 异常类型与try中抛出的异常类型一致时或者是try中抛出异常的基类时,就会被捕获到
}finally{
//此处代码一定会被执行
}
注意:catch和finally可以只有一项或者两项都有但是必须有一项
异常处理程序举例:
3.抛出异常
抛出异常需要借助两个关键字throw 与throws
1.throw
throw 异常对象;
异常对象是程序是创建的指定异常类对象。
public void set (int age){
if(age>0&&age<160)
this.age=age;
else
throw new Exception("IllegalAgeData");//抛出异常
}
2.throws
用于抛出方法体中的异常
语法格式:修饰符 返回类型 方法名(参数列表)throws 异常类1,异常类2.....
{
...
}
public void set (int age)throws Exception{
if(age>0&&age<160)
this.age=age;
else
throw new Exception("年龄无效"+age);
}
4.自定义异常类
自定义用户密码异常类
以自定义登录为例:
public class Login { private String UserName; private String Password; public Login(String userName, String password) { UserName = userName; Password = password; } public String getUserName() { return UserName; } public void setUserName(String userName) { UserName = userName; } public String getPassword() { return Password; } public void setPassword(String password) { Password = password; } public void Logininfo(String UserName, String Password){ if(!this.UserName.equals(UserName)){ throw new UsernameException("用户名错误。。。。。"); } if(!this.Password.equals(Password)){ throw new PasswordException("密码错误。。。。。"); } else{ System.out.println("登录成功!。。。。。。"); } } }
public class UsernameException extends RuntimeException{
public UsernameException(String s) {
super(s);
}
public UsernameException(){
this("");
}
}//自定义密码异常类
public class PasswordException extends RuntimeException{
//需要继承RuntimeException或Exception
public PasswordException(String s) {
super(s);
}
public PasswordException(){
this("");
}
}//自定义用户名异常类