首页 > 编程语言 >Java异常2

Java异常2

时间:2023-06-29 21:46:09浏览次数:54  
标签:arr Java System catch println 异常 public out

Java异常2

如果try没有遇到问题,怎么执行?

会把try里面所有代码执行完毕,不会执行catch()里面的内容.

public class Main7 {
    public static void main(String[] args) {
        int arr[] = {1, 2, 3, 4, 5, 6};
        try {
            System.out.println(arr[0]);
            System.out.println(2 / 1);


        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("数组越界");
        }

        System.out.println("看看我执行了吗!!");
    }
}

如果try遇到多个问题,怎么执行?

我们要写多个catch与其对应

也就是说在try里面如果发生异常,下面的代码就会被打断,然后执行对应的catch操作,(catch运行完这个语句就结束了)如果我们没有进行这个对应的catch操作,JDK就会自己默认处理.

import java.net.PortUnreachableException;

public class Main6 {
    public static void main(String[] args) {
        int arr[] = {1, 2, 3, 4, 5, 6};
        try {
            System.out.println(arr[100]);
            System.out.println(2 / 0);
            String s = null;
            System.out.println(s.equals("abc"));
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("数组越界");
        } catch (ArithmeticException e) {
            System.out.println("不能除以0");
        } catch (NullPointerException e) {
            System.out.println("空指针异常");
        }
        System.out.println("看看我执行了吗!!");
    }
}

细节:

如果我们要捕获多个异常,这些异常存在父子关系的话,那么父类一定要写在下面.

image-20230629201051805

在JDK7之后,我们可以在catch中捕获多个异常,中间使用|来进行隔开,表示如果出现了A异常或者B异常的话,采用同一种处理方案.

如果try中遇到的异常没有被捕获?

相当于try...catch代码没起作用,最后还是采用虚拟机默认进行处理.

public class Main7 {
    public static void main(String[] args) {
        int arr[] = {1, 2, 3, 4, 5, 6};
        try {
            System.out.println(2 / 0);


        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("数组越界");
        }

        System.out.println("看看我执行了吗!!");
    }
}

如果try中遇到了问题,try下面的代码还会执行吗?

下面的代码就不会执行了,直接跳转到对应的catch当中,执行catch里面的语句体,但是如果没有对应的catch与其匹配,那么还是会交给虚拟机默认处理.

public class Main7 {
    public static void main(String[] args) {
        int arr[] = {1, 2, 3, 4, 5, 6};
        try {
            System.out.println(arr[100]);
            System.out.println("你好,嘿嘿嘿,看看我执行了吗!!");
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("数组越界");
        }

        System.out.println("看看我执行了吗!!");
    }
}

public class Main7 {
    public static void main(String[] args) {
        int arr[] = {1, 2, 3, 4, 5, 6};
        try {
            System.out.println(2/0);
            System.out.println("你好,嘿嘿嘿,看看我执行了吗!!");
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("数组越界");
        }

        System.out.println("看看我执行了吗!!");
    }
}

image-20230629203150575

异常中的常见方法

Throwable 的成员方法

image-20230629203412759

按CRTL+L+T可以快速生成异常处理

其中 public void printfStackTrace() 比较常用.细节:仅仅是打印信息,不会停止虚拟机.(以红色字体进行打印.包含的信息最多.)

public class Main7 {
    public static void main(String[] args) {
        int arr[] = {1, 2, 3, 4, 5, 6};
        try {
            System.out.println(arr[100]);
        } catch (ArrayIndexOutOfBoundsException e) {
            String str = e.getMessage();//返回详细的字符串信息
            System.out.println(str);
            String s = e.toString();//返回简短的字符串信息
            System.out.println(s);


        }

        System.out.println("看看我执行了吗!!");
    }
}

public class Main7 {
    public static void main(String[] args) {
        int arr[] = {1, 2, 3, 4, 5, 6};
        try {
            System.out.println(arr[100]);
        } catch (ArrayIndexOutOfBoundsException e) {
            e.printStackTrace();//把错误信息输出到控制台
        }
        System.out.println("看看我执行了吗!!");
    }
}

image-20230629204508128

错误输出:信息为红色,可能不符合程序的从上向下运行.

image-20230629204209903

抛出异常

image-20230629205411563

手动创建一个异常对象,并且把这个异常交给方法的调用者处理

此时方法就会结束,下面的代码就不会执行了.

就是自己在方法内进行异常处理,并且抛出,并且返回到调用处.

import java.util.Random;

public class Main4 {
    public static void main(String[] args) {
//        int a[] = {1, 2, 3, 4, 5, 6};
        int a[] = null;
//      int a[]={};
        int ans = 0;
        try {
            ans = getmax(a);
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("数组越界");
        } catch (NullPointerException e) {
            System.out.println("空指针异常");
        }
        System.out.println(ans);
        //但是这个方法可能会出现异常.
    }

    public static int getmax(int[] arr)/* throws NullPointerException,ArrayIndexOutOfBoundsException*/ {//运行时异常throws可以不写
        if (arr == null) {
            throw new NullPointerException();
        }
        if (arr.length == 0) {
            throw new ArrayIndexOutOfBoundsException();

        }
        int max = arr[0];
        for (int i = 1; i < arr.length; i++) {
            if (arr[i] > max) {
                max = arr[i];
            }
        }
        return max;
    }
}

小结

image-20230629210952057

标签:arr,Java,System,catch,println,异常,public,out
From: https://www.cnblogs.com/harper886/p/17515252.html

相关文章

  • 【SpringBoot】redis keys命令被禁用,spring缓存 @CacheEvict报异常
     背景项目使用springboot整合redis做缓存,代码中使用spring的缓存注解配置缓存策略。在jarvis上部署时接入了公司分布式redis平台代替本地的redis。结果测试的时候,新增一条记录时报了错,提示  ERRunknowncommand'keys' 。经排查发现问题原因:新增记录的函数上有@C......
  • java反序列化漏洞原理
    1.首先是序列化的过程序列化:ObjectOutputStream类-->writeObject()将对象进行序列化,把字节序列写到一个目标输出流中.ser2.反序列化反序列化:ObjectInputStream类-->readObject()从一个源输入流中读取字节序列,再把它们反序列化为一个对象 如果序列化字节序列内容......
  • Java基础-Day06
    Java基础-Day06多维数组如何理解二维数组?数组属于引用数据类型数组的元素也可以是引用数据类型一个一维数组A的元素如果还是一个一维数组类型的,则次数组称为二维数组二维数组的属性:int[][]arr3=newint[][]{{1,2,3,4},{4,5,6,7,8},{9,10}};Syste......
  • 亚马逊国际获得AMAZON商品详情API接口采集sku商品规格信息列表Java调用演示案例
    ​亚马逊商品详情API接口的作用是获取Lazada电商平台上的某一商品的详情信息,包括商品的名称、销售价格、库存数量、图片、商品描述、品牌、产地、售后保障等信息。开发者可以使用该API接口获取到商品的原始数据,进行分析、筛选等操作。通过该接口获取到的商品详情数据可以结合其......
  • Java连接MQ集群
    Java代码创建仲裁队列点击查看代码@BeanpublicQueuequorumQueue(){returnQueueBuilder.durable("cluster.quorum.queue").quorum().build();}......
  • Java获取数据库的列名、列数、标题、类型等信息, ResultSetMetaData
    importjava.sql.*;publicclassjdbcTest{publicstaticvoidmain(String[]args)throwsClassNotFoundException,SQLException{//1、加载驱动Class.forName("com.mysql.jdbc.Driver");//2、用户信息和urlStringurl="......
  • firefox threejs 显示异常排查处理
    firefox版本:114.0.2threejs:0.135.0异常描述火狐浏览器下threejs3D页面展示的CSS3DSprite中的有borderborder-radius的div边框显示异常显示情况如下正常情况下的显示是这样的:<div></div>div{ position:fixed; cursor:default; width:auto!importan......
  • 如何获得 java项目下面所有的文件名
     要获取Java项目中所有的文件名,可以通过以下步骤实现:使用递归遍历获取项目中所有的文件://获得所有的文件名publicclassgetfilename{//这是一个main方法,是程序的入口:publicstaticvoidmain(String[]args){List<String>fileNames=newArrayList<>(......
  • 如何获得 java项目下面所有的文件名
     要获取Java项目中所有的文件名,可以通过以下步骤实现:使用递归遍历获取项目中所有的文件://获得所有的文件名publicclassgetfilename{//这是一个main方法,是程序的入口:publicstaticvoidmain(String[]args){List<String>fileNames=newArrayList<>(......
  • 利用JAVA的AOP运行时注解实现请求VO的复杂组装
    背景上一篇介绍了关于JAVA的AOP编译时注解的开发经验,因此,这里则接着来讲讲AOP运行时注解,摘取的是利用运行时注解实现微服务对请求对象(VO)中的指定字段特殊处理的统一封装,典型场景就是SpringCloudGateway对用户请求经过鉴权、过滤、路由等处理之后,将必要信息添加到消息头中,转发到相......