当前位置: 首页 > news >正文

Java题集练习3

Java题集练习3

1 什么时候用instanceof

instanceOf关键字主要用于判断一个对象是否为某个类的子类或是接口的实例,通常用于类型转换和运行时类型判断的场景,比如继承和多态中。比如,创建一个Animal类及其子类Cat和Cat子类Hat,可以使用instanceOf判断:

public static void main(String[] args) {Cat cat = new Cat();Hat hat = new Hat();boolean b1 = hat instanceof Animal;System.out.println(b1);//trueboolean b2 = cat instanceof Animal;System.out.println(b2);//trueboolean b3 = cat instanceof Hat;System.out.println(b3);//false}

b1判断的是Hat类对象是否是Animal的子类,由于Hat是Cat的子类,Cat是Animal类的子类,所以Hat是Animal的子类

b2不难看出,Cat类是Animal类的直属子类

由于Cat是Hat的父类,所以它不属于Hat类的子类,由此得到b3的结果

2 动态绑定和静态绑定

首先,我们要对程序绑定有一个初步的概念:

绑定指的是一个方法的调用与方法所在的类(方法主体)关联起来。对java来说,绑定分为静态绑定和动态绑定;或者叫做前期绑定和后期绑定.

静态绑定:
    在程序执行前方法已经被绑定(也就是说在编译过程中就已经知道这个方法到底是哪个类中的方法),此时由 编译器或其它连接程序实现。例如:Java。
    针对java简单的可以理解为程序编译期的绑定;这里特别说明一点,java当中的方法只有final,static,private和构造方法是前期绑定

动态绑定:
后期绑定: 在运行时根据具体对象的类型进行绑定。
    若一种语言实现了后期绑定,同时必须提供一些机制,可在运行期间判断对象的类型,并分别调用适当的方法。也就是说, 编译器此时依然不知道对象的类型,但方法调用机制能自己去调查,找到正确的方法主体。不同的语言对后期绑定的实现方法是有所区别的。但我们至少可以这样认为:它们都要在对象中安插某些特殊类型的信息。
动态绑定的过程:

  • 虚拟机提取对象的实际类型的方法表;

  • 虚拟机搜索方法签名;

  • 调用方法。

为什么说java中final,static,private和构造方法是前期绑定呢?

我们知道,final修饰的类不能被继承,static修饰的方法不可以被子类重写,但可以被子类隐藏,也就是说,如果子类中重写了static方法,则会调用子类的方法,如果没有重写,则会调用父类中的方法;唯一的不同点就是,如果子类向上转型为父类的对象时,无论子类中是否定义了这个static方法,都会去调用父类中的static方法,所以说static方法是可以被隐藏而不是被覆盖;而private修饰的属性都不能被继承,构造方法也同样是不能被继承的,虽然子类通过super()调用父类的构造方法,但是在重写父类的其他方法时是不用这样做的,所以编译时自然会知道这个构造方法属于哪个类。

3 多态内存

在Java中,多态是面向对象编程的一个重要特性,它允许子类对象被当作父类对象来使用。多态的实现涉及到方法的重写和动态绑定(详见静态绑定和动态绑定)。理解多态的内存模型有助于更好地掌握Java的内部工作机制。

针对对象的内存分配,有以下两个概念:

  • 在创建对象时,实际创建的对象被分配在堆内存中

  • 创建对象实例的引用被分配在栈内存中

4 为什么要有多态,多态解决了什么问题

我们知道,多态是一种抽象的行为,它允许程序员面向抽象变成而不是面对具体的实现类编程,他可以增强代码的扩展性

例如,小明很喜欢吃苹果,但我们既可以说他喜欢吃苹果,也可以说他喜欢吃水果;如果他某天突然开始变得喜欢吃香蕉,如果说的是他喜欢吃水果就不需要修改;但如果是喜欢吃苹果就需要改成喜欢吃香蕉;这展现了多态的灵活性。

再比如,我想定义一个Person类内有一个方法work()打印“工作”,他的子类就可以重写这个work()方法让他打印“上学”,这样一来,就可以在创建的对象都是Person类的时候,通过new不同的实现类来体现不同的工作情况,这就是多态。

5 接口和抽象类的异同

相同点:

  • 都不能被实例化(创建对象)

  • 他们的子类必须实现他们类中所有的抽象方法,才可以被实例化,否则子类仍然为抽象类

不同点:

  • 关键字不同:
    • 抽象类子类使用继承extends关键字来继承抽象类
    • 接口实现类使用关键字implements实现接口
  • 抽象类中可以有构造方法,而接口中不允许有构造方法
  • 抽象类中既可以有普通方法也可以有抽象方法,接口中只能有抽象方法
  • 方法的权限修饰符不同:
    • 抽象方法可以用除了private以外的修饰符
    • 接口中的方法只能用public修饰
  • 抽象类中定义的变量可以是普通变量,接口中只能定义静态的常量
  • 抽象类可以继承单个类和实现多个接口,而接口可以实现多继承接口
  • 速度:抽象类的速度要比接口快,接口需要时间寻找在类中实现的方法

注意:

1.如果一个类里存在抽象方法,那么他一定是抽象类

2.抽象方法要被实现,不能是静态的,也不可以是私有的

3.接口内含有未被实现的方法,也叫抽象方法,但未使用abstract关键字

6 什么时候使用接口,什么时候使用抽象类

接口的使用场合

  • 类之间需要特定接口协调,不在乎其如何实现

  • 可以作为实现特定功能的标识存在,也可以作为无接口方法的标识

  • 用来将一组类视为单一的类,调用者只能通过接口来访问这些类

  • 需要实现特定的多项功能,这些功能间也许毫无联系

抽象类的使用场合

如果既需要统一的接口,还需要实例变量或缺省方法的情况下,可以使用抽象类

7 什么是面向接口编程

面向接口编程,就是在不使用继承的情况下,只使用接口的实现类来处理所需要的问题的逻辑,当需求变化时,只需要编写该需求的实现类即可处理需求,不需要改写大量的代码,减少对系统的影响

8 关键字:4种权限修饰符,static,abstract ,final能否修饰的内容:类,属性,方法,构造方法(表格形式呈现)


属性方法构造方法
4种权限修饰符
static
abstract
final

相关文章:

Java题集练习3

Java题集练习3 1 什么时候用instanceof instanceOf关键字主要用于判断一个对象是否为某个类的子类或是接口的实例,通常用于类型转换和运行时类型判断的场景,比如继承和多态中。比如,创建一个Animal类及其子类Cat和Cat子类Hat,可…...

【部署篇】Haproxy-01安装部署(源码方式安装)

‌一、HAProxy概述‌ HAProxy是一款免费、快速且可靠的代理软件,提供高可用性、负载均衡,支持TCP和HTTP应用代理,HAProxy凭借其卓越的性能和灵活性,成为众多知名网站和系统的首选代理软件。‌ ‌核心特点‌: ‌高性能…...

开拓鸿蒙测试新境界,龙测科技引领自动化测试未来

在当今科技舞台上,鸿蒙 OS 以非凡先进性强势登场,打破传统操作系统格局,为软件测试领域带来全新机遇与艰巨挑战。 一、鸿蒙 OS 的辉煌崛起 (一)壮丽发展历程与卓越市场地位 鸿蒙 OS 的发展如波澜壮阔的史诗。2023 年…...

Java项目-基于springboot框架的自习室预订系统项目实战(附源码+文档)

作者:计算机学长阿伟 开发技术:SpringBoot、SSM、Vue、MySQL、ElementUI等,“文末源码”。 开发运行环境 开发语言:Java数据库:MySQL技术:SpringBoot、Vue、Mybaits Plus、ELementUI工具:IDEA/…...

调整数组奇偶数顺序

今天给大家分享一道题目,要求我们输入一个数组,将全部奇数放在偶数前面(无需比较大小),下面是我写的代码 这个方法比使用三个数组进行数据传输要节省不少程序运行时间,缺点是使用了较多的while循环&#xf…...

Electron调用nodejs的cpp .node扩展【非安全】

Electron调用nodejs的cpp .node扩展【非安全】 环境: electron: 30.1.1 nodejs: 20.14.0前言 Electron中可以非常容易的调用nodejs的js代码,但是对于cpp .node扩展需要一定的配置才能调用,下面介绍一种最简单的cpp扩展的调用方法&#xff…...

一文了解AOSP是什么?

一文了解AOSP是什么? AOSP基本信息 基本定义 AOSP是Android Open Source Project的缩写,这是一个由Google维护的完全免费和开放的操作系统开发项目。它是Android系统的核心基础,提供了构建移动操作系统所需的基本组件。 主要特点 完全开源…...

ffmpeg视频边缘模糊,打造梦幻般的视觉效果!

在视频编辑的世界里,细节决定成败。边缘模糊效果是一种强大的工具,可以让你的作品瞬间提升质感。通过简单的命令,你可以轻松实现视频边缘的柔和化处理,创造出梦幻般的视觉效果。 想象一下,当你将一段普通的视频应用边…...

[Wireshark] 使用Wireshark抓包https数据包并显示为明文、配置SSLKEYLOGFILE变量(附下载链接)

前言 wireshark安装包 链接:https://pan.quark.cn/s/febb28f57c01 提取码:fUCQ 链接失效(可能会被官方和谐)可评论或私信我重发 chrome与firefox在访问https网站的时候会将密钥写入这个环境变量SSLKEYLOGFILE中,在wir…...

大话红黑树之(1)入门介绍

红黑树简介 红黑树(Red-Black Tree)是一种自平衡的二叉搜索树,其关键特性是通过颜色标记(红色和黑色)来保证树的平衡性,从而在最坏情况下依然可以保持较高的查找、插入和删除操作的效率。红黑树通常用于需…...

ESC/POS图片打印指令

一:实践前的理论部分 蓝牙/热敏打印机如何打印图片。 票据打印机的指令和条码打印机的指令对于打印图片的格式要求基本都相似 看看ESC/POS指令的文档 是的看不懂。。。干脆直接试试好了,从如何打印一个像素的小黑点开始。 注意到x的最小单位是字节数…...

Unity之如何在Linux上部署Dedicated Server专用服务器

文章目录 前言构建为专用服务器启动时获取参数在 DigitalOcean 上准备 Linux 服务器最后,让我们开始吧。前言 我们在使用Mirror,Fishnet或者Unity Netcode开发多人游戏时,一般有三种链接模式,分别是:Host,Server,Client。 Host:代表既是客户端又是服务器 Server:代表…...

十、Linux 故障排除专业案例分享

Linux 故障排除专业案例分享 在 Linux 操作系统漫长的使用历程当中,不可避免地会遭遇到各种各样不同类型的故障。本文将会深入而全面地阐述一些较为常见的 Linux 故障以及与之相对应的解决方案。其目的在于,当用户在实际使用过程中面临类似问题的时候&a…...

智慧楼宇平台,构筑未来智慧城市的基石

随着城市化进程的加速,城市面临着前所未有的挑战。人口密度的增加、资源的紧张、环境的恶化以及对高效能源管理的需求,都在推动着我们寻找更加智能、可持续的城市解决方案。智慧楼宇作为智慧城市建设的重要组成部分,正逐渐成为推动城市可持续…...

JVM 实战篇(一万字)

此笔记来至于 黑马程序员 内存调优 内存溢出和内存泄漏 内存泄漏(memory leak):在Java中如果不再使用一个对象,但是该对象依然在 GC ROOT 的引用链上,这个对象就不会被垃圾回收器回收,这种情况就称之为内…...

线程同步之双摄

如何实现两个摄像头进行同步,并利用同步的信号做一些事情, 比如stereo camera 做深度,如果是自己整的两个camera,同步就需要自己做, 那么这时候可以利用线程同步手写一个,下面给一个示例代码: …...

使用 PyTorch 构建 LSTM 股票价格预测模型

目录 引言准备工作1. 训练模型(train.py)2. 模型定义(model.py)3. 测试模型和可视化(test.py)使用说明模型调整结论 引言 在金融领域,股票价格预测是一个重要且具有挑战性的任务。随着深度学习…...

【C++篇】C++类与对象深度解析(五):友元机制、内部类与匿名对象的讲解

文章目录 前言 💬 欢迎讨论:如果你在学习过程中有任何问题或想法,欢迎在评论区留言,我们一起交流学习。你的支持是我继续创作的动力! 👍 点赞、收藏与分享:觉得这篇文章对你有帮助&#xff01…...

模型训练进度条的代码

这个内容难在什么地方呢&#xff1f; 我想要跳转到另一个页面的时候 如何保存当前的训练状态&#xff0c;本来还想着加一个页面去管理进度的。然后想到了localstorage&#xff0c;将一些信息存储到浏览器中去。 进度条展示 <el-form-item label"训练进度" v-show…...

直观理解反向传播 | Chapter 3 | Deep Learning | 3Blue1Brown

目录 前言1. 简介2. 回顾3. 直观的演绎示例4. 随机梯度下降相关资料结语 前言 3Blue1Brown 视频笔记&#xff0c;仅供自己参考 这个章节主要来直观地理解反向传播算法到底在做什么 官网&#xff1a;https://www.3blue1brown.com 视频&#xff1a;https://www.bilibili.com/vide…...

MongoDB学习和应用(高效的非关系型数据库)

一丶 MongoDB简介 对于社交类软件的功能&#xff0c;我们需要对它的功能特点进行分析&#xff1a; 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具&#xff1a; mysql&#xff1a;关系型数据库&am…...

多场景 OkHttpClient 管理器 - Android 网络通信解决方案

下面是一个完整的 Android 实现&#xff0c;展示如何创建和管理多个 OkHttpClient 实例&#xff0c;分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

Cesium1.95中高性能加载1500个点

一、基本方式&#xff1a; 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

MySQL中【正则表达式】用法

MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现&#xff08;两者等价&#xff09;&#xff0c;用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例&#xff1a; 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

[Java恶补day16] 238.除自身以外数组的乘积

给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O(n) 时间复杂度…...

css3笔记 (1) 自用

outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size&#xff1a;0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格&#xff…...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计&#xff0c;提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合&#xff1a;各模块职责清晰&#xff0c;便于独立开发…...

Vite中定义@软链接

在webpack中可以直接通过符号表示src路径&#xff0c;但是vite中默认不可以。 如何实现&#xff1a; vite中提供了resolve.alias&#xff1a;通过别名在指向一个具体的路径 在vite.config.js中 import { join } from pathexport default defineConfig({plugins: [vue()],//…...

AI语音助手的Python实现

引言 语音助手(如小爱同学、Siri)通过语音识别、自然语言处理(NLP)和语音合成技术,为用户提供直观、高效的交互体验。随着人工智能的普及,Python开发者可以利用开源库和AI模型,快速构建自定义语音助手。本文由浅入深,详细介绍如何使用Python开发AI语音助手,涵盖基础功…...

提升移动端网页调试效率:WebDebugX 与常见工具组合实践

在日常移动端开发中&#xff0c;网页调试始终是一个高频但又极具挑战的环节。尤其在面对 iOS 与 Android 的混合技术栈、各种设备差异化行为时&#xff0c;开发者迫切需要一套高效、可靠且跨平台的调试方案。过去&#xff0c;我们或多或少使用过 Chrome DevTools、Remote Debug…...