Manejo de excepciones
El esquema de procesamiento predeterminado de la máquina virtual Java finalizará el programa cuando ocurra una excepción en el programa, y una excepción en una cierta parte del proyecto real no debería afectar la ejecución del programa posterior, por lo que debe manejar la excepción usted mismo.
1. Clase de excepción de Java
1. La diferencia entre la excepción en tiempo de compilación y la excepción en tiempo de ejecución
2. Métodos de miembros desechables
Método de miembro de la clase de ancestro anormal Throwable
public class ThrowableTest {
public static void main(String[] args) {
System.out.println("开始");
method();
System.out.println("结束");
}
private static void method() {
try {
int a[]={
1,2};
System.out.println(a[3]);
}catch (ArrayIndexOutOfBoundsException e){
// System.out.println(e.getMessage());//3
// System.out.println(e.toString());//java.lang.ArrayIndexOutOfBoundsException: 3
e.printStackTrace();
/*
java.lang.ArrayIndexOutOfBoundsException: 3
at _3Exception.ThrowableTest.method(ThrowableTest.java:25)
at _3Exception.ThrowableTest.main(ThrowableTest.java:18)
*/
}
}
}
2. Manejo de excepciones
Si hay un problema con el programa, debemos solucionarlo nosotros mismos. Hay dos soluciones:
- trata de atraparlo
- lanza
1. Prueba ... captura de manejo de excepciones
formato:
try{
可能出现异常的代码;
}catch(异常类名 变量名){
异常处理代码;
}finally{
必须执行的代码;
}
public class ExceptionTest1 {
public static void main(String[] args) {
try {
int a[]={
1,2};
System.out.println(a[2]);
}catch (ArrayIndexOutOfBoundsException e){
System.out.println("越界");
e.printStackTrace();
}
System.out.println("结束");
}
}
2. Tiros de manejo de excepciones
Aunque podemos manejar excepciones a través de try ... catch ..., no tenemos la autoridad para manejar excepciones en todos los casos. Es decir, a veces no podemos manejar las excepciones que pueden ocurrir. ¿Qué debemos hacer? ¿en este momento?
En respuesta a esta situación, java proporciona soluciones throws
public class ThrowsTest {
public static void main(String[] args) {
System.out.println("开始");
method1();//运行时异常如果需要程序继续执行还需要try catch
try {
method2();
} catch (ParseException e) {
e.printStackTrace();
}
System.out.println("结束");
}
//运行时异常
public static void method1() throws ArrayIndexOutOfBoundsException{
int a[] = {
1, 2};
System.out.println(a[2]);
}
//编译时异常
public static void method2() throws ParseException {
String s="2048-08-01";
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
Date d=sdf.parse(s);//此处有编译异常
System.out.println(d);
}
}
- Tenga en cuenta que
no existe un procesamiento sustantivo para lanzar excepciones. El procesamiento real aún está por intentar capturar el procesamiento.
Tres. Excepción personalizada
1. Pasos
- Personalice una clase de excepción personalizada, debe heredar la clase de excepción
- Use throws para declarar la excepción en el encabezado del método donde puede ocurrir una excepción
- Use throw para lanzar el objeto de excepción personalizado donde ocurre una excepción en el cuerpo del método
2. Uso de lanzamientos y lanzamientos
Java proporciona una solución de procesamiento de lanzamientos. En qué función aparece la instrucción que puede causar una excepción, la excepción debe declararse mediante throws en el encabezado de la función, y la excepción se lanzará mediante throw en el caso de un problema.
formato:
返回值类型 方法名称 throws 异常类名{
if(发生异常)
throw 异常类对象;
}
3. La diferencia entre lanzamientos y lanzamientos
4. Caso
- Clase de excepción personalizada
Llame al constructor de la clase principal Exception a través de super
//异常类,固定格式
public class ScoreException extends Exception {
//继承Exception类,编译异常
ScoreException(){
}
ScoreException(String message){
super(message);//传给祖先类
}
}
- Posibles anomalías
//会产生异常的地方
public class Teacher {
public static void checkScore(int score) throws ScoreException {
if (score <0 ||score>100){
throw new ScoreException(score+":成绩不符合规范");//抛出异常对象
}else {
System.out.println("成绩符合规范");
}
}
}
- prueba
//测试
public class TeacherTest {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("输入分数:");
int s=in.nextInt();
Teacher t = new Teacher();
try {
t.checkScore(s);//编译异常,需要用try catch抓起来
} catch (ScoreException e) {
e.printStackTrace();
}
}
}