需求:写一个方法,给20个学生接受考试成绩,
**如果考试成绩的范围在0-100之间则属于正常,否则属于异常/获取0-100之间的分数**
自定义异常块
package com.practice;
public class YiChang extends RuntimeException{
private String message;
public YiChang() {
}
public YiChang(String message) {
this.message = message;
}
@Override
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
学生类
package com.practice;
public class Student {
private int store;
String name;
public Student() {
}
public Student(int store) {
this.store = store;
}
public Student(int store, String name) {
this.store = store;
this.name = name;
}
public int getStore() {
return store;
}
public void setStore(int store) {
this.store = store;
}
@Override
public String toString() {
return "Student{" +
"store=" + store +
", name='" + name + '\'' +
'}';
}
}
main方法
package com.practice;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Demo {
public static void main(String[] args) {
/*需求:写一个方法,给20个学生接受考试成绩,
如果考试成绩的范围在0-100之间则属于正常,否则属于异常*/
//获取0-100之间的分数
List list=new ArrayList();
//创建20个学生,并给学生添加成绩
for (int i = 0; i < 3; i++) {
Student student=new Student();
student.name=""+(i+1);
System.out.println("给第"+student.name+"录入分数");
student.setStore(getScore());
//将学生添加到集合中进行保存
list.add(student);
}
System.out.println(list);
}
public static int getScore(){
Scanner sc=new Scanner(System.in);
int score=sc.nextInt();
try{ if (score < 0 || score > 100) {
throw new YiChang("分数格式错误");
}
} catch(Exception e){
System.out.println("输入错误,请重新输入!!");
score=getScore();//递归思想
}
return score;
}
}
关于运行时期异常和编译期异常的特点
编译期异常的特点:必须处理
运行时期异常的特点:方法声明上抛出异常,方法中无需throw声明,调用者也无需处理,运行时异常一旦产生,必须修改代码!!!
throw 和throws的异同
两者都没有真正的处理异常,throw用来制造异常(即异常一定会有),在方法中制造异常,谁调用这个方法谁就处理异常(用try…catch处理)
throws:抛异常,在方法声明上声明方法可能有异常产生,可以同时抛多个异常(异常不一定会发生)
final finally finalize三者之间的区别和联系
三者之间没有任何关联
final 用来修饰类,方法,变量, 修饰的类不能被继承,修饰的方法不能被重写,修饰的变量变常量
finally在处理异常时一定会执行的代码,用来释放资源。
finalize:object类中国的一个方法名称用来进行垃圾回收。