Java出现异常有三种可能
1、Java语法错误(编译时发生的错误)
2、异常(运行时发生的错误)
3、逻辑(逻辑上错误)
异常地抛出
throws:在方法声明时使用,声明可能会抛出的一个或多个异常。
throw:在方法内使用,手动抛出一个异常对象;
package com.yc.test;
import org.apache.log4j.*;
class SnoException extends Exception{//java自带的异常类
private String message;
public SnoException() {
System.out.println("学号应该是yc0000格式");
}
@Override
public String getMessage() {//当没有输入年龄时(不过有一个缺陷,当输入年龄后,他也会输出)
// TODO Auto-generated method stub
return "年龄异常:年龄应该在15~28之间";
}
}
class AgeException extends RuntimeException{
public AgeException() {
System.out.println("年龄应该在15~28之间!");
}
@Override
public String getMessage() {
// TODO Auto-generated method stub
return super.getMessage();
}
}
class Stu{
private String sno;
private int age;
public String getSno() {
return sno;
}
@Override
public String toString() {
return "Stu [sno=" + sno + ", age=" + age + "]";
}
public void setSno(String sno) throws SnoException {
if(!sno.matches("yc[0-9]{4}"))
throw new SnoException();//抛出异常
this.sno = sno;
}
public int getAge() {
return age;
}
public void setAge(int age) throws AgeException{
if(age>28||age<15)
throw new AgeException();//抛出异常
this.age = age;
}
}
public class ExceptionDemo {
public static void main(String []args) {
Stu s1=new Stu();
Logger log=Logger.getLogger(ExceptionDemo.class);//定义日志对象
try{
log.debug("给学生设置学号和年龄.....");
s1.setSno("yc345");
s1.setAge(18);//当没有setAge时不会进入AgeException方法中
}catch(SnoException se) {
log.warn("发生了异常:"+se.getMessage());
}catch(AgeException ae) {
//System.out.println(ae.getMessage());
//log.info("发生了异常:"+ae.getMessage());
}catch(Exception e) {
//System.out.println("发生异常:"+e.getMessage());
log.error("发生了异常:"+e.getMessage());
}
System.out.println(s1);
}
}