Notas de estudio: "Excepción, manejo de excepciones, clase de excepción personalizada"

  1. Las anomalías
    se pueden dividir aproximadamente en dos categorías. Excepciones en tiempo de ejecución y excepciones definidas por el usuario .
    La primera es la excepción que el compilador no puede detectar, como el acceso fuera de los límites de la tabla de matriz siguiente, la operación de división por 0, etc.
    Generalmente visible: la
    ArithmeticException、NullPointerException、ClassCastException、 NegativeArraySizeException、ArrayIndexOutOfBoundsException、StringIndexOutOfException
    otra es un "error" personalizado para satisfacer las necesidades de usuarios .
    Por ejemplo, una clase de Estudiante limita el rango de edad de los estudiantes a [15,20]. Cuando se llama al método de miembro setAge para establecer la edad, si no cumple con los requisitos (se detectan errores de entrada), se producirá una excepción personalizada arrojado.

  2. Manejo de excepciones
    usando la declaración try-catch

try {
    
    
    int rst = 1/0;
	System.out.println(rst);
} catch (ArithmeticException e) {
    
    
	System.out.println("int类型下除法的分母不能为0!");
}

Reglas y sugerencias:
1. Una declaración de captura solo puede detectar un tipo de excepción . Si pueden aparecer varias excepciones en el bloque de código de prueba, se requieren varias declaraciones de captura.
2. Para evitar la finalización inesperada del programa debido a excepciones, la última captura Parámetro de declaración Use Exception e . La clase de excepción de excepción es la clase principal de todas las clases de excepción.


  1. Definición de clase de excepción personalizada : cree una subclase de excepción de la clase de excepción y agregue un método de construcción.
    Por ejemplo, defina una clase de excepción de nombre ilegal:
class IllegalNameException extends Exception
{
    
    
	public IllegalNameException() {
    
    
		super("姓名出错!");
	}
	public IllegalNameException(String s) {
    
    
		super(s); 
		// 这里的s 是用户检测到错误后,抛出异常时候给出的信息
		// 即 throw new IllegalNameException(s);
	}
}

La combinación de esta clase y método de excepción:

void setName(String s) throws IllegalNameException
{
    
    
	if (s.length()<1 || s.length()>5) {
    
    
		throw new IllegalNameException();
	}
	this.name = s;
}

Nota: cuando la declaración de un método es inusual

El papel de la excepción:

try {
    
    
	student.setName("Adam"); // student是一个Student类的实例
} catch (IllegalNameException e) {
    
    
	System.out.println(e.getMessage()); // 通过getMessage方法的调用,得到自定义的错误信息
}

Pensando:
1. La introducción de excepciones aumenta la solidez y la "tolerancia a fallas" del programa . Los programadores tienen más confianza en el manejo de situaciones complejas.
2. Combinando el mecanismo de captura de excepciones en C ++ y comparando el mecanismo de captura de excepciones en Java, la dificultad que viene a la mente: el problema de anidamiento de try-catch y así sucesivamente.

Ejemplo: Defina una clase de triángulo, incluido un método de construcción y un método para encontrar el área. El método para encontrar el área arrojará una excepción personalizada de triángulo no válido para los datos que no pueden formar un triángulo.

class IllegalTriangleFormException extends Exception
{
    
    
	public IllegalTriangleFormException() {
    
    
		super("三边不能构成三角形");
	}
	public IllegalTriangleFormException(String s) {
    
    
		super(s);
	}
}

class Triangle
{
    
    
	double a,b,c;
	public Triangle(double d1,double d2,double d3) {
    
    
		a=d1;
		b=d2;
		c=d3;
	}
	public double caluArea() throws IllegalTriangleFormException
	{
    
    	
		if(a+b>c && a+c>b && c+b>a)
		{
    
    
			double p = (a+b+c)/2; // 半周长
			double S = Math.sqrt(p*(p-a)*(p-b)*(p-c)); // 海伦公式
			return S;
		}else
		{
    
    
			throw new IllegalTriangleFormException();
		}
	}
}

public class ExpDemo04 {
    
    
	public static void main(String[] args) {
    
    
		Triangle triangle = new Triangle(3, 2, 5);
		
		try {
    
    
			System.out.println(triangle.caluArea());
		} catch (IllegalTriangleFormException e) {
    
    
			System.out.println(e.getMessage());
		}
	}
}

Supongo que te gusta

Origin blog.csdn.net/qq_43341057/article/details/105294702
Recomendado
Clasificación