Com.Java.Basis 第十三课 《Java中的异常处理》经历前面的十二课的学习:我在思考在Java中报错如何处理

简介: Com.Java.Basis 第十三课 《Java中的异常处理》经历前面的十二课的学习:我在思考在Java中报错如何处理

Com.Java.Basis  第十三课 《Java中的异常处理》经历前面的十二课的学习:我在思考在Java中报错如何处理呢!本博客以Demo为主:来了解java中的异常操作。

在编写java代码的过程中代码报错简称异常

java中的异常指的是什么?


Java 中的异常(Exception)又称为例外,是一个在程序执行期间发生的事件,它中断正在执行的程序的正常指令流。为了能够及时有效地处理程序中的运行错误,必须使用异常类。


异常实例:


为了更好地理解什么是异常,下面来看一段非常简单的 Java 程序。下面的示例代码实现了允许用户输入 1~3 以内的整数,其他情况提示输入错误。


异常产生原因:


在 Java 中一个异常的产生,主要有如下三种原因:


(1)Java 内部错误发生异常,Java 虚拟机产生的异常。


(2)编写的程序代码中的错误所产生的异常,例如空指针异常、数组越界异常等。这种异常称为未检査的异常,一般需要在某些类中集中处理这些异常。


(3)通过 throw 语句手动生成的异常,这种异常称为检査的异常,一般用来告知该方法的调用者一些必要的信息。


异常使用原则:


Java 异常强制用户考虑程序的强健性和安全性。异常处理不应用来控制程序的正常流程,其主要作用是捕获程序在运行时发生的异常并进行相应处理。编写代码处理某个方法可能出现的异常,可遵循如下三个原则:


(1)在当前方法声明中使用 try catch 语句捕获异常。


(2)一个方法被覆盖时,覆盖它的方法必须拋出相同的异常或异常的子类。


(3)如果父类抛出多个异常,则覆盖方法必须拋出那些异常的一个子集,而不能拋出新异常。


以上就是java中的异常指的是什么的详细内容。

案例一

package com.JavaBasicsDemo8;
public class Exception extends Throwable {
    /**
     * //java.lang.ArithmaticException算数异常,被除数不能为0
     * Exception in thread "main" java.lang.ArithmeticException: / by zero
     *  at com.JavaBasicsDemo8.Exception.main(Exception.java:6)
     * @param args
     */
    public static void main(String[] args) {
        int rest=4/0;
        System.out.println(rest);
    }
}

案例二

package com.JavaBasicsDemo8;
/**
 * NumberFormatException 字符转换数字异常
 * public static void main(String[] args) {
 *    System.out.println("异常之前");
 *    String str ="ert";
 *    System.out.println(str+"年龄是:");
 *    int age=Integer.parseInt("20L");
 *    System.out.println(age);
 *    System.out.println("异常之后");
 *        }
 */
public class Exception1 {
    public static void main(String[] args) {
        System.out.println("异常之前");
        String str ="ert";
        System.out.println(str+"年龄是:");
        int age=Integer.parseInt("20L");
        System.out.println(age);
        System.out.println("异常之后");
    }
}

案例三

package com.JavaBasicsDemo8;
public class Exception2 {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println("程序开始了");
        int[] arr = new int[3];
        System.out.println(arr[3]);
        System.out.println("程序in the end ");
    }
}

案例四

package com.JavaBasicsDemo8;
public class Exception3 {
    public static void main(String[] args) {
        System.out.println("程序开始了");
        Integer i =new Integer ("abd");
        System.out.println("程序截止了");
        System.out.println("eeeeee");
    }
}

案例五

package com.JavaBasicsDemo8;
import sun.rmi.transport.proxy.RMISocketInfo;
/**
 * Exception in thread "main" java.lang.NumberFormatException: For input string: "20l"
 *  at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
 *  at java.lang.Integer.parseInt(Integer.java:580)
 *  at java.lang.Integer.parseInt(Integer.java:615)
 *  at com.JavaBasicsDemo8.Exception4.main(Exception4.java:12)
 */
/**
 * try-catch
 */
public class Exception4 {
    public static void main(String[] args) {
        String str="lili";
        System.out.println(str+"年龄:");
        int age=Integer.parseInt("20l");
        System.out.println(age);
        System.out.println("program");
    }
}

案例六

package com.JavaBasicsDemo8;
public class ExceptionDemo1 {
    public static void main(String[] args) {
        System.out.println("程序开始了");
        try {
            //Integer i =new Integer ("abd");
            int a=1/0;
            int [] arr =new  int[3];
            System.out.println(arr[3]);
            System.out.println(arr[1]);
            System.out.println("程序in the end");
        }catch(ArrayIndexOutOfBoundsException  e) {
            System.out.println("数组下标越界");
            //打印异常信息
            e.printStackTrace();
        }catch(ArithmeticException e ) {
            System.out.println("除数不为零");
            e.printStackTrace();
        }
        System.out.println("程序结束了");
    }
}

案例七

package com.JavaBasicsDemo8;
public class ExceptionDemo2 {
    public static void main(String[] args) {
        System.out.println("程序开始了");
        try {
            Integer i =new Integer ("abd");
            int a=1/0;
            int [] arr =new  int[3];
            System.out.println(arr[3]);
            System.out.println(arr[1]);
            System.out.println("程序in the end");
        }catch(ArrayIndexOutOfBoundsException  e) {
            System.out.println("数组下标越界");
            //打印异常信息
            e.printStackTrace();
        }catch(ArithmeticException r ) {
            System.out.println("除数不为零");
        }catch(NumberFormatException c) {
            System.out.println("数字转款异常");
            c.printStackTrace();
        }finally{
            System.out.println("程序结束了,可以下班了吧");
            System.out.println("GootByate");
        }
    }
}

案例八

package com.JavaBasicsDemo8;
public class ExceptionDemo3 {
    public static void main(String[] args) {
        System.out.println("程序开始了");
        try {
            Integer i =new Integer ("abd");
            int a=1/0;
            int [] arr =new  int[3];
            System.out.println(arr[3]);
            System.out.println(arr[1]);
            System.out.println("程序in the end");
        }catch(ArrayIndexOutOfBoundsException  e) {
            System.out.println("数组下标越界");
            //打印异常信息
            e.printStackTrace();
        }catch(ArithmeticException r ) {
            System.out.println("除数不为零");
        }catch(NumberFormatException c) {
            System.out.println("数字转款异常");
            c.printStackTrace();
            System.out.println(c.getMessage());
        }finally{
            System.out.println("程序结束了");
        }
    }
}

案例九

package com.JavaBasicsDemo8;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class ExceptionDemo4 {
    public static void main(String[] args) {
        System.out.println("程序开始");
        method();
        try {
            method1();
        }catch(ArrayIndexOutOfBoundsException  e) {
            e.printStackTrace();
        }
        System.out.println("程序结束了哦哦哦");
    }
    public static void method() {
        String s ="2021-05-01";
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-mm-dd");
        try {
            Date date = sdf.parse(s);
        }catch(ParseException r) {
            r.printStackTrace();
        }
    }
    //谁调用就跟谁
    public static void method1() throws ArrayIndexOutOfBoundsException{
        int [] arr =new int [3];
        System.out.println(arr[3]);
    }
}

案例十

package com.JavaBasicsDemo8;
public class ExceptionDemo5 {
    public static void main(String[] args) {
        try {
            pop();
        }catch (NegativeArraySizeException e){
            System.out.println("pop()方法抛出异常");
        }
    }
    private static void pop() throws NegativeArraySizeException{
        int arr[]=new int[-4];
    }
}

案例十一

package com.MyException;
public class Tran {
    static int avg(int number1,int number2) throws MyException{
        if(number1<0||number2<0){
            throw new MyException("不能为负数");
        }
        if (number1 > 100||number2>100) {
            throw new MyException("数值大了");
        }
        return (number1+number2)/2;
    }
    public static void main(String[] args) {
        try {
            int result =avg(102,23);
            System.out.println(result);
        }catch (MyException e) {
            System.out.println(e);
        }
    }
}

案例十二

package com.MyException;
public class Student {
    public void checkAge(int age )  throws AgeException {
        if(age<0||age>200) {
            //报异常
            throw new AgeException("你的年龄在1到200中间");
        }
    }
    public void checkname(int  name)  throws NameException {
        name=1;       //报异常
        throw new NameException("你的名字只能为小于五个字");
    }
    public void checknum(String num)  throws  NumException {
        num="a-z,A-Z";
        //报异常
        throw new NumException("你输入的数字不能为");
    }
    public void checknum(int num) {
        // TODO Auto-generated method stub
    }
}
package com.MyException;
public class AgeException  extends  Exception {
    public AgeException() {
        super();
        // TODO Auto-generated constructor stub
    }
    public AgeException(String string) {
        super();
        // TODO Auto-generated constructor stub
    }
}

package com.MyException;
/**
 * 自定义异常
 */
public class MyException  extends Exception{
    public MyException(String ErrorMessage){
        super(ErrorMessage);
    }
}

package com.MyException;
    public class NameException extends  Exception{
        public NameException() {
            super();
        }
        public NameException(String  wert) {
            super(wert);
            // TODO Auto-generated constructor stub
        }
}

package com.MyException;
public class NumException   extends  Exception {
    public NumException() {
        super();
    }
    public NumException(String numrt) {
        super(numrt);
        // TODO Auto-generated constructor stub
    }
}

package com.MyException;
import java.util.Scanner;
public class StudentTest {
    public static void main(String[] args) throws NameException, AgeException {
        //
        Scanner scanner =new Scanner(System.in);
        System.out.println("请输入你的年龄");
        int age =scanner.nextInt();
        //创建对象
        Student stu =new  Student();
        try {
            stu.checkAge(age);
        }catch(AgeException e){
            e.printStackTrace();
        }finally {
            System.out.println("qqqqqqqqqqqqqqqqqqq");
        }
        Scanner n =new Scanner(System.in);
        System.out.println("请输入你的名字");
        int name =scanner.nextInt();
        //创建对象2
        Student stu2=new  Student();
        try {
            stu2.checkname(name);
        }catch(NameException  f){
            f.printStackTrace();
        }
    }
}

package com.MyException;
public class Tran {
    static int avg(int number1,int number2) throws MyException{
        if(number1<0||number2<0){
            throw new MyException("不能为负数");
        }
        if (number1 > 100||number2>100) {
            throw new MyException("数值大了");
        }
        return (number1+number2)/2;
    }
    public static void main(String[] args) {
        try {
            int result =avg(102,23);
            System.out.println(result);
        }catch (MyException e) {
            System.out.println(e);
        }
    }
}

Java的异常有很多我不可能将所有的异常跟你总结起来:像这类情况还是要看自己的积累

相关文章
|
16天前
|
Java 开发者
Java中的异常处理:从基础到高级
在Java编程的世界里,异常处理是一块基石,它确保了程序的健壮性和稳定性。本文将带你从异常的基础概念出发,逐步深入到高级处理技巧,通过实例展示如何在Java中有效管理和处理异常。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的见解和技巧。
|
15天前
|
Java 程序员
Java编程中的异常处理:从基础到高级
在Java的世界中,异常处理是代码健壮性的守护神。本文将带你从异常的基本概念出发,逐步深入到高级用法,探索如何优雅地处理程序中的错误和异常情况。通过实际案例,我们将一起学习如何编写更可靠、更易于维护的Java代码。准备好了吗?让我们一起踏上这段旅程,解锁Java异常处理的秘密!
|
12天前
|
Java
Java 异常处理:11 个异常处理最佳实践
本文深入探讨了Java异常处理的最佳实践,包括早抛出晚捕获、只捕获可处理异常、不忽略异常、抛出具体异常、正确包装异常、记录或抛出异常但不同时执行、不在finally中抛出异常、避免用异常控制流程、使用模板方法减少重复代码、抛出与方法相关的异常及异常处理后清理资源等内容,旨在提升代码质量和可维护性。
|
15天前
|
安全 Java 数据库连接
Java中的异常处理:理解与实践
在Java的世界里,异常处理是维护代码健壮性的守门人。本文将带你深入理解Java的异常机制,通过直观的例子展示如何优雅地处理错误和异常。我们将从基本的try-catch结构出发,探索更复杂的finally块、自定义异常类以及throw关键字的使用。文章旨在通过深入浅出的方式,帮助你构建一个更加稳定和可靠的应用程序。
28 5
|
13天前
|
Java 程序员
深入理解Java异常处理机制
Java的异常处理是编程中的一块基石,它不仅保障了代码的健壮性,还提升了程序的可读性和可维护性。本文将深入浅出地探讨Java异常处理的核心概念、分类、处理策略以及最佳实践,旨在帮助读者建立正确的异常处理观念,提升编程效率和质量。
|
14天前
|
Java 开发者 UED
深入探索Java中的异常处理机制##
本文将带你深入了解Java语言中的异常处理机制,包括异常的分类、异常的捕获与处理、自定义异常的创建以及最佳实践。通过具体实例和代码演示,帮助你更好地理解和运用Java中的异常处理,提高程序的健壮性和可维护性。 ##
39 2
|
14天前
|
Java 开发者
Java中的异常处理机制深度剖析####
本文深入探讨了Java语言中异常处理的重要性、核心机制及其在实际编程中的应用策略,旨在帮助开发者更有效地编写健壮的代码。通过实例分析,揭示了try-catch-finally结构的最佳实践,以及如何利用自定义异常提升程序的可读性和维护性。此外,还简要介绍了Java 7引入的多异常捕获特性,为读者提供了一个全面而实用的异常处理指南。 ####
38 2
|
14天前
|
Java 开发者
Java 中的异常处理:不仅仅是 try-catch
在Java的世界里,异常处理是代码的守护神,它保护着程序不会因为意外错误而崩溃。但异常处理远不止try-catch那么简单。本文将深入探讨Java的异常处理机制,从基本的try-catch到更复杂的自定义异常和finally块的使用,带你理解如何在Java中优雅地处理错误。
44 1
|
17天前
|
Java 程序员 UED
深入理解Java中的异常处理机制
本文旨在揭示Java异常处理的奥秘,从基础概念到高级应用,逐步引导读者掌握如何优雅地管理程序中的错误。我们将探讨异常类型、捕获流程,以及如何在代码中有效利用try-catch语句。通过实例分析,我们将展示异常处理在提升代码质量方面的关键作用。
28 3
|
17天前
|
Java 数据库连接 开发者
Java中的异常处理机制:深入解析与最佳实践####
本文旨在为Java开发者提供一份关于异常处理机制的全面指南,从基础概念到高级技巧,涵盖try-catch结构、自定义异常、异常链分析以及最佳实践策略。不同于传统的摘要概述,本文将以一个实际项目案例为线索,逐步揭示如何高效地管理运行时错误,提升代码的健壮性和可维护性。通过对比常见误区与优化方案,读者将获得编写更加健壮Java应用程序的实用知识。 --- ####