异常
java内的异常的超类是 throwable 类,其子类为 Exception 和 error
java 中的异常 == 出现错误,在程勋中出现了异常,java 运行机制规定必须解决异常 (捕获) 或必须 声明异常(抛给上一级处理)
java 中的异常又分为编译时异常和运行时异常;
- 编译时异常(RuntimeException):由于代码内部出现语法错误
- 运行时异常(Exception):由于用户在使用过程中传递了非法参数
-
捕获
关键字: try-catch-finally
将可能出现异常的代码块放在 try 语句中,在 catch 语句中声明异常类型,若有多个 catch 语句,则异常类从小到大排序;最终在 finally 中的语句是经过异常处理后一定会执行的
#### 形象例子
买到过期的食品,需要处理之后,才能食用(夸张一点为了举栗子,勿抬杠 /手动滑稽 )
public class Demo04 {
public static void main(String[] args){
Person a = new Person();
try {
a.setAge(-10);
} catch (Exception e) {
e.printStackTrace();
}finally {
a.show();
}
}
}
class Person{
int age;
public void setAge(int age) throws Exception{
if(age<0||age>100) {
throw new Exception("年龄不合法");
}
this.age = age;
}
public int getAge() {
return this.age;
}
public void show() {
System.out.println("年龄为:"+this.age);
}
}
-
声明:
关键字:throws , throw
throw 用来抛异常,抛出异常后,程序提前结束,异常后的代码不执行
throws 后可加入多个异常,各异常之间用 " , " 连接
在出现异常的代码语句中向上一级抛出;若中途没有捕获代码,则最终抛给 JVM 处理;
若抛给上一级,尽量抛给上一级能解决的异常问题,若不能解决,则考虑异常转换
形象例子:
店铺店主因为有其他事,再三天内不能开店,张贴告示通知消费者
public class Demo04 {
public static void main(String[] args)throws Exception {
Person a = new Person();
a.setAge(-10);
//程序发生异常,提前结束,未执行 a.show() 方法
a.show();
}
}
class Person{
int age;
public void setAge(int age) throws Exception{
if(age<0||age>100) {
throw new Exception("年龄不合法");
}
this.age = age;
}
public int getAge() {
return this.age;
}
public void show() {
System.out.println("年龄为:"+this.age);
}
}
-
自定义异常
java 的异常机制不能解决实际项目中的一部分异常,所以需要我们自己编写符合实际需求的异常类
自定义异常类通常继承异常类,具体继承那个类需按照实际需求,视情况而定
public class Demo04 {
public static void main(String[] args) throws DemoException{
Person a = new Person();
a.setAge(-10);
}
}
class Person{
int age;
public void setAge(int age) throws DemoException{
if(age<0||age>100) {
throw new DemoException("年龄不合法");
}
this.age = age;
}
public int getAge() {
return this.age;
}
public void show() {
System.out.println("年龄为:"+this.age);
}
}
class DemoException extends Exception{
public DemoException() {}
public DemoException(String s) {
super(s);
}
}