java内部类和异常类1

news2025/5/18 15:38:28

文章目录

  • 一、Java内部类
  • 二、Java匿名类
  • 总结

一、Java内部类

成员变量和方法,实际上,类还有一种成员:内部类。在一个类中定义另一个类,我们把这样的类称作内部类,包含内部类的类称作内部类的外嵌类。

内部类和外嵌类之间的关系:
1)内部类的外嵌类的成员变量在内部类中仍然有效,内部类中的方法也可以调用外嵌类中的方法。

2)内部类的类体中不可以声明类变量和类方法,外嵌类的类体中可以用内部类声明对象作为外嵌类的成员。

3)内部类仅供它的外嵌类使用,其他类不可以用某个类的内部类声明对象。

因为内部类的外嵌类的成员变量在内部类中有效,所以使得内部类和外嵌类的交互十分方便。

例如:

class RedCowForm {
    static String formName;
    RedCow cow; //内部类声明对象
    RedCowForm() {
    }
    RedCowForm(String s){
        cow = new RedCow(88,66,2000);
        formName = s;
    }
    public void showCowMess() {
        cow.speak();
    }
    class RedCow{ //内部类的声明
        String cowName = "小牛";
        int height,weight,price;
        RedCow(int h,int w,int p) {
            height = h;
            weight = w;
            price = p;
        }
        void speak() {
            System.out.println("我是"+cowName+",身高"+height+"cm,体重"+weight+"kg,生活在"+formName);
        }
    }
}
public class Main {
    public static void main(String[] args) {
        RedCowForm form = new RedCowForm("dotcpp农场");
        form.showCowMess();
        form.cow.speak();
    }
}

在这里插入图片描述
注意:Java编译器生成的内部类的字节码文件的名字和平常的类的名字不同,内部类对应的字节码文件的名字格式是“外嵌类名$内部类名”。例如:上面例子中内部类的字节码文件的名字应该是RedCowForm$RedCow.class。

内部类可以被修饰为static内部类,static内部类是外嵌类中的一种静态数据类型,程序可以在其他类中使用static内部类来创建对象,但是,static内部类不能操作外嵌类中的实例成员变量。

二、Java匿名类

使用匿名内部类我们必须要继承一个父类或者实现一个接口。

需要注意的是:

1)匿名内部类中是不能定义构造函数的。

2)匿名内部类中不能存在任何的静态成员变量和静态方法。

3)匿名内部类为局部内部类,所以局部内部类的所有限制同样对匿名内部类生效。

class outerClass {
    // 定义一个匿名类
    object1 = new Type(parameterList) {
        // 匿名类代码
    };
}

注意:因为匿名类是表达式形式定义的,所以末尾以分号;来结束。

  1. 匿名类继承一个父类

例如:

class Dotcpp {
    public void display() {
        System.out.println("在Dotcpp类内部");
    }
}
class AnonymousDemo {
    public void createClass() {
        //创建的匿名类继承了Dotcpp类
        Dotcpp d1 = new Dotcpp() {
            public void display() {
                System.out.println("在匿名类内部");
            }
        };
        d1.display();
    }
}
class Main {
    public static void main(String[] args) {
        AnonymousDemo an = new AnonymousDemo();
        an.createClass();
    }
}

在这里插入图片描述2. 匿名类实现一个接口

例如:

interface Dotcpp {
    public void display();
}
class AnonymousDemo {
    public void createClass() {
        //创建的匿名类实现了Dotcpp接口
        Dotcpp d1 = new Dotcpp() {
            public void display() {
                System.out.println("在匿名类内部");
            }
        };
        d1.display();
    }
}
class Main {
    public static void main(String[] args) {
        AnonymousDemo an = new AnonymousDemo();
        an.createClass();
    }
}

在这里插入图片描述学习来自“https://www.dotcpp.com/course/801”

总结

从前车马很慢,一生只能爱一个人。-木心

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

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

相关文章

编辑距离00

题目链接 爬楼梯 题目描述 注意点 word1 和 word2 由小写英文字母组成返回将 word1 转换成 word2 所使用的最少操作数 解答思路 本题本质上的操作只有三种:在单词 A 中插入一个字符;在单词 B 中插入一个字符;修改单词 A 的一个字符&…

OpenGL之元素缓冲对象

文章目录 EBO(元素缓冲对象)创建元素缓冲对象创建两个相邻不同颜色的三角形 EBO(元素缓冲对象) 素缓冲对象(Element Buffer Object,EBO),也叫索引缓冲对象(Index Buffer Object,IBO)。要解释元素缓冲对象的工作方式最好还是举个例子&#xf…

【Python redis】零基础也能轻松掌握的学习路线与参考资料

Python redis是一种非常流行的缓存数据库,对于Python Web应用程序开发非常有用,能快速地处理大量的数据请求。Python redis的学习路线需要对Python语言有深刻的理解,并了解使用redis的API。在掌握了Python redis的基本知识后,就可…

这个 希尔排序详解过程 我能吹一辈子!!!

文章目录 希尔排序概念希尔排序算法思路希尔排序实现 希尔排序概念 希尔排序(Shellsort)也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序。希尔(Donald Shell)于1959…

关系数据库设计理论

关系数据库设计理论 目录 关系数据库设计理论是什么函数依赖完全函数依赖(Full Functional Dependency)部分函数依赖(Partial Functional Dependency)传递函数依赖(Transitive Functional Dependency) 异常插入异常(Insertion Anomaly)更新异常(Update Anomaly)删除异常(Deleti…

Mit6.006-problemSession04

4-1 序列旋转 下面是一个序列AVL树T。执行操作T.delete_at(8),该操作期间,每次旋转操作执行完后,画出该树。 4-2 Fick Nury Fick Nury领导n名超级英雄组成了精英团队——复仇者联盟。他听说:超人Sanos正在一个遥远星球上制造麻烦…

【JVM】7. 方法区

文章目录 7. 方法区7.1. 栈、堆、方法区的交互关系7.2. 方法区的理解7.2.1. 方法区在哪里?7.2.2. 方法区的基本理解7.2.3. HotSpot中方法区的演进 7.3. 设置方法区大小与OOM7.3.1. 设置方法区内存的大小7.3.2. 如何解决这些OOM 7.4. 方法区的内部结构7.4.1. 方法区&…

《汇编语言》- 读书笔记 - 第3章-寄存器(内存访问)

《汇编语言》- 读书笔记 - 第3章-寄存器(内存访问) 3.1 内存中字的存储问题 3.1 3.2 DS 和 [address]问题 3.2 3.3 字的传送问题 3.3问题 3.4 3.4 mov、add、sub 指令3.5 数据段问题 3.53.1~3.5 小结检测点 3.1 3.6 栈3.7 CPU 提供的栈机制问题 3.6 3.8 …

【数据结构】顺序表---C语言版(数据结构开篇小菜,全网最详细!小白看一遍就学会!!!)

文章目录 🍔一、前言🍟1. 什么是数据结构 🍔二、顺序表的概念----线性表🍟1. 什么是线性表🍟2. 顺序表与数组的区别 🍔三、顺序表详解💧 静态顺序表💧 动态顺序表🍎创建动…

C语言_VS系列编译器写C语言或C++代码产生的一些错误与警告的解决方法(VS2010/VS2019)

本次来分享在用VS系列编译(VS2010/VS2019)写C语言或C代码时会遇到的一些警告和错误,提供博主的一些解决方法,若有更好的解决方法,大家也可以在评论区发表自己的意见噢,话不多说,开始上菜: 此博主在CSDN发布…

【面试题】Redis缓存设计

文章目录 Redis缓存出现的问题🙎‍♂️面试官:什么是缓存雪崩?🙎‍♂️面试官:怎样解决缓存雪崩?🙎‍♂️面试官:什么是缓存击穿?🙎‍♂️面试官:…

Nacos集群和持久化配置

1.Nacos集群 1.1.架构说明 官方文档 集群部署架构图 因此开源的时候推荐用户把所有服务列表放到一个vip下面,然后挂到一个域名下面 http://ip1:port/openAPI直连ip模式,机器挂则需要修改ip才可以使用 http://VIP:port/openAPI挂载VIP模式,直…

【TOOLS: Linux与windows及linux与linux之间文件传输常用方法及命令】

文章目录 1.1.1 Windows和VirtualBox(Ubuntu)之间文件穿传输方法1.1.2 SCP 文件传输方法1.1.3 FTP 文件传输方法 1.1.1 Windows和VirtualBox(Ubuntu)之间文件穿传输方法 1)设置 virtualbox 中的共享文件夹,用户可以在windows某个盘下创建自己的共享文件…

chatgpt赋能Python-python_6_66_666

Python 666666:学习Python的不同层次 Python是一种高级编程语言,被广泛用于机器学习、人工智能、web开发等领域。它简单易学,具有良好的可读性和可扩展性,因此受到众多程序员的喜爱。 在学习Python的过程中,我们可以…

python面向对象知识点

因为我之前学过Java,所以下文中的python面向对象知识点会和Java面向对象知识点比较记忆; python类的定义 python类的定义个其函数的定义格式相同,为此先复习函数定义格式: def add(num1, num2){return num1 num2 } 类定义格式…

自动构建之Makefile

链接: 自动构建之CMake Makefile Makefile是用于自动化构建软件项目的工具,Makefile的优点是简单、直接,可以直接使用make工具进行构建。但是,Makefile通常需要手动编写和维护,可能会导致跨平台和跨编译器的兼容性问题。 Makef…

【SVN内网穿透】远程访问Linux SVN服务

文章目录 前言1. Ubuntu安装SVN服务2. 修改配置文件2.1 修改svnserve.conf文件2.2 修改passwd文件2.3 修改authz文件 3. 启动svn服务4. 内网穿透4.1 安装cpolar内网穿透4.2 创建隧道映射本地端口 5. 测试公网访问6. 配置固定公网TCP端口地址6.1 保留一个固定的公网TCP端口地址6…

.Net Core 数据校验框架使用

为了提高响应速度和界面可用性,一般在客户端都会对用户填写的数据进行校验,这样不需要把数据发送到服务端,用户就知道数据填写错误。但是也不能完全依赖客户端的校验,不仅因为恶意用户可以绕过客户端校验直接向服务器发送请求&…

YOLOv5区域检测+声音警报

YOLOv5区域检测声音警报 1. 相关配置2. 检测区域设置3. 画检测区域线(不想显示也可以不画)4. 报警模块5. 代码修改5.1 主代码5.2 细节修改(可忽略) 6. 实验效果 本篇博文工程源码下载 链接1:https://github.com/up-up-…

图片模块封装

图片模块封装 一.如何更换图片框架二.Glide配置1.依赖: 三.策略模式构建者模式图片框架搭建1.ImageOptions图片参数设置2.IImageLoader接口以及实现子类3.图片加载策略4.ImageLoader5.ImageLoaderManager6.使用:四.Bitmap三级缓存二次采样五.长图大图处理 一.如何更…