java——内部类和异常处理

news2025/1/10 10:42:57

文章目录

  • 内部类
    • 成员内部类
    • 局部内部类
    • 匿名内部类
    • 静态内部类
  • 异常处理
    • 异常捕获与处理
    • 多重异常捕获和处理
    • 抛出异常

在这里插入图片描述

内部类

Java内部类(Inner Class)是嵌套在其他类中的类,它可以访问外部类的成员变量和方法,同时也可以被外部类访问。Java内部类主要有四种类型:

  1. 成员内部类(Member Inner Class)
  2. 局部内部类(Local Inner Class)
  3. 匿名内部类(Anonymous Inner Class)
  4. 静态内部类(Static Inner Class)

下面我们将分别对这四种内部类进行详解,并且给出相应的示例代码。

成员内部类

成员内部类是定义在另一个类中的类,它通常用于封装一些业务逻辑,只有在创建了外部类的对象之后才能够创建成员内部类的对象。成员内部类在访问外部类的成员变量和方法时,需要通过外部类的实例来访问。

public class Outer {
    private int outerNum = 10;

    public class Inner {
        public void print() {
            System.out.println("Outer Num: " + outerNum);
        }
    }

    public void test() {
        Inner inner = new Inner();
        inner.print();
    }

    public static void main(String[] args) {
        Outer outer = new Outer();
        outer.test(); // 输出:Outer Num: 10
    }
}

在上面的代码中,Inner类是成员内部类,它访问了外部类的outerNum成员变量。

局部内部类

局部内部类是定义在方法体内部的类,它只在该方法中有效,因此局部内部类不需要访问外部类的成员变量和方法时使用。与成员内部类不同的是,局部内部类可以访问方法中的final类型的局部变量。

public class Outer {
    public void test(final int x) {
        final int y = 10;

        class Inner {
            public void print() {
                System.out.println("x: " + x + ", y: " + y);
            }
        }

        Inner inner = new Inner();
        inner.print(); // 输出:x: 100, y: 10
    }

    public static void main(String[] args) {
        Outer outer = new Outer();
        outer.test(100);
    }
}

在上面的代码中,Inner类是局部内部类,它访问了test方法中的x和y局部变量。

匿名内部类

匿名内部类是没有名称的内部类,它通常用于实现接口或继承抽象类,并且只需要创建一个对象的场景。由于匿名内部类没有名称,因此它无法被其他方法或类所引用,在创建后只能使用一次。

public class Outer {
    public void test() {
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("Thread is running.");
            }
        });

        thread.start();
    }

    public static void main(String[] args) {
        Outer outer = new Outer();
        outer.test(); // 输出:Thread is running.
    }
}

在上面的代码中,我们使用匿名内部类实现了Runnable接口,并创建了一个新的线程。

静态内部类

静态内部类是被声明为static的内部类,它不需要依赖于外部类的实例就可以创建对象。与成员内部类相比,静态内部类只能访问外部类的静态成员变量和方法。

public class Outer {
    private static int outerNum = 10;

    public static class Inner {
        public void print() {
            System.out.println("Outer Num: " + outerNum);
        }
    }

    public static void main(String[] args) {
        Outer.Inner inner = new Outer.Inner();
        inner.print(); // 输出:Outer Num: 10
    }
}

在上面的代码中,Inner类是静态内部类,它访问了外部类的outerNum静态成员变量。

总结一下,Java内部类是嵌套在其他类中的类,它可以访问外部类的成员变量和方法。Java内部类主要有四种类型:成员内部类、局部内部类、匿名内部类和静态内部类。不同类型的内部类适用于不同的场景,能够提高程序的灵活性和可读性。

异常处理

Java异常处理是指在程序运行时可能出现的错误或异常情况进行捕获、处理和抛出。Java语言中的所有异常都继承自Throwable类,其中又分为两种类型:Checked Exception和Unchecked Exception。

  • Checked Exception(受检异常):必须在方法签名中声明或者捕获处理,否则编译不通过,例如IOException、SQLException等。
  • Unchecked Exception(非受检异常):不需要在方法签名中声明或者捕获处理,例如NullPointerException、ArrayIndexOutOfBoundsException等。

下面我们结合示例代码来详解Java异常处理。

异常捕获与处理

Java程序中的异常通常可以通过try-catch-finally语句块进行捕获和处理。try块内包含可能会产生异常的代码,当发生异常时,会跳转到相应的catch块进行处理。

public class ExceptionDemo {
    public static void main(String[] args) {
        try {
            int result = 10 / 0; // 抛出ArithmeticException异常
            System.out.println("Result: " + result);
        } catch (ArithmeticException e) { // 捕获ArithmeticException异常
            System.out.println("Divide by zero.");
            e.printStackTrace(); // 打印异常信息
        } finally {
            System.out.println("Finally block executed.");
        }
    }
}

在上面的代码中,我们进行了除以0的操作,抛出了一个算术异常ArithmeticException,然后使用catch块捕获并打印异常信息。最后执行了finally块中的代码。

多重异常捕获和处理

在一个try语句块中,可以使用多个catch语句分别捕获不同类型的异常,并进行相应的处理。

public class ExceptionDemo {
    public static void main(String[] args) {
        try {
            int[] arr = {1, 2, 3};
            System.out.println(arr[3]); // 抛出ArrayIndexOutOfBoundsException异常
        } catch (ArrayIndexOutOfBoundsException e) { // 捕获数组下标越界异常
            System.out.println("Array index out of bounds.");
        } catch (Exception e) { // 捕获其他异常
            System.out.println("Other exception.");
        }
    }
}

在上面的代码中,我们使用了两个catch块来分别捕获数组下标越界异常和其他异常。

抛出异常

有时候,在方法内部无法解决某些问题时,需要抛出一个异常,告知调用者该方法无法正常运行,并提供异常信息。在Java中,可以使用throw关键字抛出一个异常对象。

public class ExceptionDemo {
    public static void main(String[] args) throws FileNotFoundException {
        loadFile("test.txt");
    }

    public static void loadFile(String fileName) throws FileNotFoundException {
        File file = new File(fileName);
        if (!file.exists()) {
            throw new FileNotFoundException("File does not exist.");
        }
    }
}

在上面的代码中,我们定义了一个loadFile方法,当文件不存在时,抛出一个FileNotFoundException异常。

总结一下,Java异常处理是在程序运行时可能出现的错误或异常情况进行捕获、处理和抛出。Java语言中的所有异常都继承自Throwable类,其中又分为两种类型:Checked Exception和Unchecked Exception。Java程序中的异常通常可以通过try-catch-finally语句块进行捕获和处理,也可以使用throw关键字抛出一个异常对象。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/680472.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

模拟电路系列文章-ADC驱动电路(下)

目录 概要 整体架构流程 技术名词解释 技术细节 1.低阻输出,以减小误差 2.抗混叠 3.电源级保护 小结 概要 提示:这里可以添加技术概要 一个模拟电压信号,在进入ADC 的输入端之前,一般都需要增加一级驱动电路(Driver]。但是&#…

C语言基础:指针的使用

本文结合工作经验,研究C语言中指针的用法。 文章目录 1 指针的概念2 用法与使用场景2.1 函数的指针参数2.1.1 基本概念2.1.2 使用场景1-函数返回多个值2.1.3 使用场景2-减少函数参数 2.2 void*指针2.2.1 基本概念2.2.2 使用场景 2.3 空指针2.4 const指针2.4.1 基本…

三分钟学习一个python小知识5-----------我的对python中pandas的理解, 我列举了关于pandas常用的4个例子来深入理解pandas

这里写目录标题 1、Pandas是什么2、Pandas的常用功能:2.1. 读取和写入数据2.2. 数据清洗和转换2.3. 数据分析和计算2.4. 数据可视化总结 1、Pandas是什么 Pandas是Python中一个非常流行的数据处理和分析库,可以使用它对数据进行读取、清洗、转换、分析和…

【动态规划算法练习】day4

文章目录 一、213. 打家劫舍 II1.题目简介2.解题思路3.代码4.运行结果 二、740. 删除并获得点数1.题目简介2.解题思路3.代码4.运行结果 三、剑指 Offer II 091. 粉刷房子1.题目简介2.解题思路3.代码4.运行结果 总结 一、213. 打家劫舍 II 1.题目简介 213. 打家劫舍 II 你是一…

数字IC工程师的护城河是什么?

每个人都希望能够增加⾃⼰的核心竞争⼒,然后延展职业⽣涯。 可能IC研发工程师基本上都会有个40岁危机? 时代背景是最⼤的变数,它改变了⼈才供需和技术⾛向,⽐如做处理器 core曾经是屠⻰术,⽽现在是⻩⾦时代 处理器 cor…

堆和优先队列

文章目录 堆维护堆的性质建堆堆排序算法 优先队列详解cpp标准库 priority_queue 参考文献 堆 虽然“堆”这个词源自堆排序,但是目前它已经被引申为“垃圾存储机制”,例如在Java和Lisp语言中所定义的。强调一下,我们使用的堆不是垃圾收集存储…

设计模式之访问者模式笔记

设计模式之访问者模式笔记 说明Iterator(访问者)目录访问者模式示例类图抽象访问者角色类抽象元素角色类宠物猫类宠物狗类自己类其他人类家类测试类 说明 记录下学习设计模式-访问者模式的写法。JDK使用版本为1.8版本。 Iterator(访问者) 意图:表示一个作用于某对象结构中的…

平面设计师实习报告范文十篇

平面设计师实习报告范文1 经过了四年的系统性理论学习,使我对平面设计有了基本掌握,对于平面设计这个专业也有了一个系统的了解和掌握。我们即将离开大学校园,作为平面设计专业的毕业生,心中想得更多的是如何去做好一个平面设计师…

ETCD集群运维

ETCD集群运维 ETCD扩容节点ETCD参数调优时间参数快照磁盘网络 监控维护压缩历史版本消除碎片化存储配额快照备份 灾难恢复快照恢复 etcd gateway作用什么时候不应该使用网关启动方式 gRPC代理可扩展的watch API租约请求缓存启动gRPC代理 ETCD扩容节点 节点1:10.1.1…

管理类联考——逻辑——知识篇——论证推理——一、削弱——haimian

削弱 考点分析 削弱 年度 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023题量223262132 主要问法 以下哪项如果为真,则能最严重地削弱(反驳)上述结论?以下哪项如果为真,则最能削弱(反驳&#xff09…

文心一言 VS 讯飞星火 VS chatgpt (46)-- 算法导论6.1 4题

四、假设一个最大堆的所有元素都不相同,那么该堆的最小元素应该位于哪里? 文心一言: 最大堆的最小元素位于堆的根结点。由于最大堆的性质,根结点是堆中所有元素的最大值,因此它也是堆中所有元素的最小值。 讯飞星火&#xff1a…

工具及方法 - 如何进行任务管理

如何做好你该做的事,这是你的一生之敌。 没有一步到位的工具和一劳永逸的方法,只有不断变化的需求和自己用起来顺手的感觉。 对于GTD工具,在手机上安装过番茄工作法的工具,在电脑的Excel上也做过任务列表,在免费的项目…

解决 kali换源之后签名无效

报错问题: apt-get update 报错 更新扩展知识:kali更新源 终端输入 vi /etc/apt/sources.list #中科大 deb http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib deb-src http://mirrors.ustc.edu.cn/kali kali-rolling main …

计算机视觉中,有哪些基于控制点对的图像变换?

这里探讨的所有图像变换(二维)都是基于控制点对的,它们的主要区别在于: 1、它们是如何通过两张图像的控制点对产生变换场(变换矩阵或者变换公式中的参数)的 2、控制点之间的对应关系严格程度 这里说的变换…

远心镜头案例锦集

远心镜头(Telecentric lens) 定义:远心镜头是一类将其入瞳或出瞳放置于无穷远的光学系统。是为纠正传统镜头视差而设计,它可以在一定的物距范围内,使得到的图像放大倍率不会变化,即这种镜头拍出来的图像没…

人工智能(4):模型评估

模型评估是模型开发过程不可或缺的一部分。它有助于发现表达数据的最佳模型和所选模型将来工作的性能如何。 按照数据集的目标值不同,可以把模型评估分为分类模型评估和回归模型评估。 1 分类模型评估 准确率 预测正确的数占样本总数的比例。 其他评价指标…

嵌入式C开发 VS 嵌入式CPP开发!

目录 ​答主:听心跳的声音 答主:pansz 答主:candy 这是知乎嵌入式领域的一个热门话题,原文链接: https://www.zhihu.com/question/374663834 几个高赞回答: ​答主:听心跳的声音 单片机的主…

多项式回归的原理及实现、多重回归的原理

1.多项式回归的原理及实现 笔记来源于《白话机器学习的数学》 1.1 多项式回归的原理 预测一个变量 x x x与一个变量 y y y的关系 例如:广告费 x x x与点击量 y y y 用曲线拟合数据 求导过程类比本人之前的博客进行推导,相关笔记:最小二乘法的…

Nginx基于授权的访问控制步骤

目录 一、安装httpd-tools 二、生成用户密码认证文件 三、修改主配置文件相对应的目录,添加认证配置置顶 四、 重启服务 五、 访问网址 一、安装httpd-tools 二、生成用户密码认证文件 三、修改主配置文件相对应的目录,添加认证配置置顶 Vim /usr/loc…

【雕爷学编程】Arduino动手做(124)---24位WS2812环形灯板

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的&am…