Java SE:面向对象(下)
1. static关键字
静态区的特点:静态区里面的每一样东西都是唯一有且仅有一个的,如此时str1 = "abc"即此时静态区里面已经创建了字符串abc并将abc地址赋给str1,后面在进行赋值也不会在静态区开辟一串新的"abc"
1.1 static修饰成员
区分:
一个类的成员有static修饰的成员存储在静态区,statci修饰的成员一旦被赋值那么所有通过这个类创建的对象都会有这个成员的值,一旦修改是该类的所有对象的这个成员被修改
栗子:idea中int类型的变量未赋值会默认赋0,double默认0.0,存储地址的变量默认赋空(null)
static修饰的成员变量叫静态变量,通常用类名来赋值如:Student(类名).Teacher(被static修饰的成员变量)
1.2 static修饰方法
静态(static)修饰方法和非静态方法之间存在一些关键的区别,主要表现在以下几个方面:
- 加载和执行时间:静态方法随着类的加载而加载,属于类方法,而非静态方法属于类的实例对象。因此,静态方法在类加载阶段就已加载到内存中,而非静态方法只有在创建类的实例对象时才会加载。这意味着静态方法在类加载阶段就已执行,而非静态方法则是在对象实例化后执行。
- 访问权限:静态方法只能访问静态变量,不能直接访问非静态变量。而非静态方法可以访问静态和非静态变量。
- 调用方式:静态方法可以通过类名直接调用,不需要创建类的实例对象。而非静态方法必须通过类的实例对象才能调用。
- 内部实现:在内部实现上,静态方法只能调用其他静态方法和静态变量,不能使用非静态方法和非静态变量。而非静态方法可以调用静态和非静态方法以及非静态变量。
- 代码块:静态代码块在类加载时主动执行,普通代码块在实例化时主动执行。静态代码块与静态方法的区别在于,静态代码块只能主动执行一次,而静态方法可以被多次调用。
总的来说,使用static修饰的方法属于类本身,而非static修饰的方法属于类的实例对象。因此,静态方法具有更早的加载和执行时间,更严格的访问权限和调用方式,以及特定的内部实现和执行流程。这些区别使得静态方法和非静态方法在设计和使用上有着不同的考虑和应用场景。
2. 继承
2.1 继承的特点
- 继承:把其他已经定义好的类的东西搬到要新定义的类中称之为继承,被继承的类称为父类,继承的类称为子类,继承之后子类可以调用父类的东西
- Java只支持单继承,不支持多继承,但支持多层继承 1. 单继承理解:每个类只能继承一个类(大白话理解:一个儿子只有一个亲爸) 2. 不支持多继承:定义的新类c即继承类a又继承类b,Java中是不允许的,(大白话理解:c类有两个亲爸,这在Java是不允许发生的) 3. 多层继承:c类继承d类,b类继承c类,a类继承b类,这是允许的(因为c继承d,c此时是个新的单独的一个类,只是有d的一些特征,此时符合单继承,再接着b类继承c类,b此时也是个新的单独的类,但是c有d的特征,而b又继承c,故b有c和d的特征,这称之为多层继承,并没有违反单继承的规则,b的继承又可以理解为直接继承于c,间接继承于d)
- Java所有类都直接或简接的继承于Object类,即Object类是所有类的祖宗
2.2 继承的好处
将共性的东西抽取出来,定义为一个类,后面定义其他类时可直接继承进行调用,无需再重复写代码,减少代码冗余,提高开发效率
2.3 eg:
2.4 extends关键字
extends:是继承时需要用到的关键字,
书写格式: public class 继承者的类名 extends 被继承者的类名 { 代码...}
2.5 子类可以继承父类哪些内容
- 非私有(public、proteted关键字修饰)和私有(private修饰)的构造方法都不能被继承 原因:类名是唯一的,即类不能重复定义,而构造方法和类名是保持一致的,故子类若继承了父类的构造方法,就不符合构造方法和类名保持一致的语法规则
- 非私有(public、proteted关键字修饰)和私有(private修饰)的成员都能被继承 原因:每个标准的JavaBean都会有输入输出方法,而每个对象成员变量可以通过输入 输出方法进行输入输出,故成员可以继承下来进行使用
- 非私有(public、proteted关键字修饰)的成员能被继承,私有(private修饰)的成员方法不能被继承 原因:被private关键字修饰的方法只能在本类中使用,故无法继承到别的类中去
面向对象的一些概念不重复赘述,我另一篇学术垃圾里面有,欢迎进来刨垃圾嘿嘿
mhttp://t.csdnimg.cn/PVl1g
2.6 super、this关键字和就近原则
2.6.1 继承中成员变量的访问特点
- 没有任何关键字修饰的变量会先从局部变量开始寻找访问,若有则直接访问,若没有则从本类中成员变量 寻找,若还是没有,则从父类的成员变量中寻找访问,还是没有就会报错,遵循就近原则,离谁近先用谁
- this关键字修饰的,直接跳过局部变量的搜寻,直接从本类的成员变量中开始搜寻
- super关键字修饰的,直接跳到父类的成员变量中搜寻
eg:
2.6.2 继承中成员方法的访问特点
和上面成员变量一样
- 直接调用满足:离谁近先用谁
- this关键字修饰:从本类中成员变量开始寻找,没有就访问父类
- super修饰:直接访问父类的成员
2.7 方法的重写
在继承体系中子类和父类出现一摸一样的方法定义时叫做方法的重写
一般父类的方法不满足子类的需求时会进行方法重写,方法重写前加上@Override注释进行验证重写方法是否有语法错误, 该注释不同于普通的注释,该注释还是写给虚拟机看的
重写的本质
加载进虚方法表的条件
- 不能被static关键字修饰,被static关键字修饰的方法只在static修饰的方法中调用权限不够大,不能被继承下来
- 不能被private关键字修饰,被private修饰的方法只能在本类中使用,权限不够大
方法的访问是先从本类中查找,在查找虚方法表的,故有super修饰就直接从虚表中查询,即直接访问父类的方法
注意:
- 重写的方法必须和父类方法名、形参列表保持一致
- 重写的方法访问权限必须大于或等于父类
- 重写的方法返回值类型必须小于或等于父类
- 只有加载进虚方法表中的方法才能被重写
2.8 继承中的构造方法
- 子类无法继承父类的构造方法
- 子类所有构造方法都默认先访问父类的无参构造方法,再执行自己,若要访问父类的有参构造方法得自己写
书写格式 :在子类的构造方法中添加super(调用带参数构造方法就写参数进括号不带可忽略),若不写super()虚拟机会默认调用父类无参的构造方法
super()必须写在构造方法里的最前面,即有效代码的第一行
3. 多态
3.1 多态特点:
- 多态:一个对象多种形态
- 好处:一个方法可以让多个(不同形态的)对象调用,提高代码复用性,减少代码冗余,提高开发效率
3.2 栗子
后面即使在添加子类也可以直接调用该方法,而不是每添加一个新子类又重写一次
3.3 多态创建对象格式
父类类名 对象名 = new 子类类名
通过以上栗子不难发现多态的使用是有前提的
- 要有继承关系
- 要有重写的方法(比如上面栗子,登录进管理系统后学生、教师都要查询信息但是信 息的具体信息是不同的,教师可能还有管理课程竞赛等内容,那么所用到的方法也是 不同的,所以子类要对应的重写父类的方法)
- 父类引用指向子类的对象
3.4 多态调用成员的特点
3.5 父类类型的对象调用子类的方法
接着上面栗子,只需要将cat强制类型转换即可 ,通过这么一转换即可从子类的表中即上图(堆区new出来的新空间的右表)中开始查询数据,所以可以调用子类的所有方法和成员
注意:转换不能瞎转,new出来的那块空间是什么类型的就只能转该空间的类型,即上面new出来的空间是Cat类的,此时对对象cat转换也只能转成Cat类的,因为转成其他类和上面的空间所记载的数据不同,无法调用,也运行不起来会报错
3.6 instanceof关键字
Java提供了instanceof关键字进行自动转换,即所转的对象满足条件就会进行转换
if里面那串代码意思:如果对象animal是 Cat类型的就会创建一个新的对象c类型为Cat
4. final关键字、权限修饰符、代码块
4.1 final关键字
- final关键字修饰类,则类不能被继承
- final关键字修饰方法,则方法不能被重写
- final修饰变量,则变量具有常量属性,不能被修改
- 修饰数值型的变量如:final int a = 10; 则此时a不能被修改,可以把a看成10,若强行修改a = 20即 10 = 20这合理么?不合理,语法也会报错
- 修饰地址型的变量如:final (类名) a = new 类名(),此时a所存的地址不能不修改,即此时已经固定指向某一块空间了,不能在赋其他空间地址给a,但是a所指的空间里面的内容可以修改
4.2 权限修饰符
- private修饰的成员或方法只能在本类中使用
- 没有修饰符即默认的修饰成员或方法只能在本包中使用
- protected修饰的成员或方法不仅可以在本包中使用,还可以在其他包的子类中使用
- public通用
4.3 代码块
static修饰的代码块,当程序运行时会执行一次,可以利用该特性对某些类的数据进行初始化
5. 抽象类
- 抽象类的作用:可以统一开发时方法的格式,方便开发人员调用方法。 比如:抽象类中定义了一个方法 public void work(); 如果有个类继承了这个抽象类,那么子类要么按照上面的方法格式进行重写方法,要么该子类也定义成抽象类,不然会报错。
- 抽象类不能实例化(不能创建对象)
abstract关键字
抽象一个类或者方法时用到的一个关键字
6. 接口
接口:可以理解为一种规则,规定如何定义一个方法的格式,好处也是方法格式统一,方便开发人员进行调用,
6.1 接口的成分
- 接口可以有成员变量,但Java会默认用public static final关键字修饰,即此时的成员变量是个定值不能被修改
- 接口可以有方法,即此时定义一个方法的格式,后面调用该接口的类都得按照该方法格式进行定义方法,默认用public abstract关键字修饰
- 接口不能含有构造方法
- 接口不能实例化
6.2 接口的关系
- 接口和接口:有单继承或者多继承的关系
- 类和接口:可以有单实现和多实现的关系,即一个类可以有多个接口(若类实现多个接口那么该类要重写接口里面定义的的所有方法,若类实现的接口有父类,那么接口的父类里面的方法一样要重写)
7. 内部类
7.1 成员内部类
成员内部类也是成员,只是封装成类
应用场景:电脑有很多信息,将电脑封装成类,那么当介绍到电脑里面的CPU、显卡等等时,这些零部件也有很多信息,也可以单独的封装成一个类,此时成员内部类的场景就适用了,因为CPU和显卡封装的类是依附于电脑这个类的,所以可以在电脑这个类里面进行定义
创建内部类对象
方式1:
public class Test8 {Computer.Cpu cc = new Computer().new Cpu();//成员内部类是成员//要调用一个类里面的成员,如果该成员不是静态的,无法通过类名直接调用,需要创建对象才可以调用//所以我们要先new电脑这个类出来,然后调用里面的成员,再看成员Cpu也是个类//同样要调用一个类的成员还是要先创建对象,所以要在new一次,即此时在堆区开辟了两块空间//分别存储Computer类和Cpu类//每new一次空间都会返回一个地址,所以cc最终记录第二次new的地址
}public class Computer {String computerName;String computerBrand;public class Cpu {String cpuName;String cpuBrand;}
}
方式2:
外部类定定义个方法,返回内部类的地址即可
public Cpu getCpu() {return new Cpu();}
成员内部类也是个类,所以用不同权限修饰符修饰有什么区别和前面一样,不过多赘述
7.2 静态内部类
静态内部类就是一种特殊的成员内部类,不过是用关键字static修饰,定义了静态内部类后可以直接用类名调用该成员
此时没有开辟两次空间,只在堆区上单独开辟一块Cpu类的空间
Computer.Cpu cc = new Computer.Cpu();
7.3 匿名内部成员类
不用写类名,适用场景:当一个类不需要重复调用可以定义匿名内部成员类简化代码
定义格式:
new 类名或者接口名() {};
栗子
public abstract class Animal {public abstract void eat();public void drink() {System.out.println("喝");}
}public static void main(String[] args) {Animal a = new Animal() {@Overridepublic void eat() {System.out.println("吃");}};a.eat();a.drink();}
相关文章:

Java SE:面向对象(下)
1. static关键字 静态区的特点:静态区里面的每一样东西都是唯一有且仅有一个的,如此时str1 "abc"即此时静态区里面已经创建了字符串abc并将abc地址赋给str1,后面在进行赋值也不会在静态区开辟一串新的"abc" 1.1 static修…...

搭建开源数据库中间件MyCat2-配置mysql数据库双主双从
mycat2官网:MyCat2 前言:mycat2下载地址无法访问,不知道是不是被DNS污染了,还是需要搭梯子访问,所以我只能找到1.21的版本进行安装。搭建mycat2的前提是搭建数据库主从复制。 架构:双主双从 配置…...

Oracle 19c rac集群管理 -------- 集群启停操作过程
Oracle rac集群启停操作过程 首先查看数据库的集群的db_unique_name SQL> show parameter nameNAME TYPE VALUE ------------------------------------ ----------- --------------------------- cdb_cluster_name …...

【Java】HttpServlet类中前后端交互三种方式(query string、form表单、JSON字符串)
在前后端的交互中,前端通过以下三种方式来与后端进行交互🌟 ✅query string ✅form表单 ✅JSON字符串 下面我们将书写这三种方式的后端代码并进行讲解 1、Query String QueryString即在url中写入键值对,一般用doGet方法进行交互 代码如下 …...

【深蓝学院】移动机器人运动规划--第2章 基于搜索的路径规划--笔记
0. Outline 1. Graph Search Basis Configuration Space等概念 机器人配置: 指机器人位置和所有点的表示。 DOF: 指用于表示机器人配置所需的最小的实数坐标的数量n。 C-space: 包含机器人n维所有配置的空间。 在C-space中机器人的pose是一个点。 机器人在C-space中被表示为一…...

安装向量数据库milvus可视化工具attu
使用docker安装的命令和简单就一个命令: docker run -p 8000:3000 -e MILVUS_URL{milvus server IP}:19530 zilliz/attu:v2.3.5sunyuhuasunyuhua-HKF-WXX:~/dockercom/milvus$ docker run -p 8000:3000 -e MILVUS_URL127.0.0.1:19530 zilliz/attu:latest yarn run…...

STM32标准库开发——串口发送/单字节接收
USART基本结构 串口发送信息 启动串口一的时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);初始化对应串口一的时钟,引脚,将TX引脚设置为复用推挽输出。 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); GPIO_InitTypeDef GPIO_In…...

jdk17新特性——文本块(即多行的字符串)增强
目录 一、文本块(即多行的字符串)概述二、文本块(即多行的字符串)示例2.1、jdk17之前 多行字符串处理方式2.2、jdk17及以后版本 多行字符串处理方式2.3、注意事项 三、文本块(即多行的字符串)转义字符示例3.1、jdk17及以后版本 多行字符串的转义字符处理方式示例一3.2、jdk17及…...

阿里云ECS使用docker搭建mysql服务
目录 1.确保正确安装好docker 2.安装mysql镜像 3.创建容器(设置端口映射、目录映射) 1.确保正确安装好docker 安装教程: 阿里云ECS(CentOS镜像)安装docker-CSDN博客https://blog.csdn.net/qq_62262918/article/details/135686614?spm10…...

Windows给docker设置阿里源
windows环境搭建专栏🔗点击跳转 Windows系统的docker设置阿里源 文章目录 Windows系统的docker设置阿里源1.获得镜像加速器2.配置docker 由于我们生活在中国大陆,所以外网的访问总是那么慢又困难,用docker拉取几兆的小镜象还能忍受ÿ…...

安裝火狐和穀歌流覽器插件FoxyProxy管理海外動態IP代理
代理生態系統擁有大量有用的實用程式,使海外代理IP代理設置的使用變得簡單起來。其中一種類型叫做代理管理工具,像FoxyProxy就是該工具集比較受歡迎的。 本文將全面解析FoxyProxy擴展的功能和特性、Foxyproxy怎麼下載、以及如何在穀歌流覽器和火狐流覽器…...
C++重新入门-函数重载
1.函数重载的定义 C函数重载(Function Overloading)是指在同一作用域内,可以定义多个函数,它们具有相同的名称但参数列表不同的特性。通过函数重载,可以使用相同的函数名来实现不同的操作,提高了代码的可读…...

niushop靶场漏洞查找-文件上传漏洞等(超详细)
实战漏洞-niushop 一.端口扫描 http://www.xxx.com/index.php?s/admin/login 这里查询到后面的url有且仅有一个,目测估计是后台 访问url 发现确实是后台 二、找漏洞 Sql注入漏洞1: 点击进去 修改id www.xxx.com/index.php?s/goods/goodslist&…...

Bit Extraction and Bootstrapping for BGV/BFV
参考文献: [GHS12] Gentry C, Halevi S, Smart N P. Better bootstrapping in fully homomorphic encryption[C]//International Workshop on Public Key Cryptography. Berlin, Heidelberg: Springer Berlin Heidelberg, 2012: 1-16.[AP13] Alperin-Sheriff J, Pe…...

七八分钟快速用k8s部署springboot前后端分离项目
前置依赖 k8s集群,如果没有安装,请先安装 kubectl ,客户端部署需要依赖 应用镜像构建 应用镜像构建不用自己去执行,相关镜像已经推送到docker hub 仓库,如果要了解过程和细节,可以看一下,否…...
中移(苏州)软件技术有限公司面试问题与解答(2)—— Linux内核内存初始化的完整流程1
接前一篇文章:中移(苏州)软件技术有限公司面试问题与解答(1)—— 可信计算国密标准 本文参考以下文章: 启动期间的内存管理之初始化过程概述----Linux内存管理(九) Linux初始化 特此致谢! 本…...

蓝桥杯、编程考级、NOC、全国青少年信息素养大赛—scratch列表考点
1、小小情报员(202309scratch四级24题) 1.准备工作 (1)选择背景 Colorful City; (2)保留角色小猫,选择角色Ballerina。 2.功能实现 (1)角色小猫初始位置…...
1.23 力扣图论
841. 钥匙和房间 有 n 个房间,房间按从 0 到 n - 1 编号。最初,除 0 号房间外的其余所有房间都被锁住。你的目标是进入所有的房间。然而,你不能在没有获得钥匙的时候进入锁住的房间。 当你进入一个房间,你可能会在里面找到一套不…...

Vue学习笔记9--vuex(专门在Vue中实现集中式状态(数据)管理的一个Vue插件)
一、vuex是什么? 概念:专门在Vue中实现集中式状态(数据)管理的一个Vue插件,对vue应用中多个组件的共享状态进行集中式的管理(读/写),也是一种组件间通信的方式,且适用于…...

Operation
contents 服务器一、相关概念1.1 云服务器与实例1.2 关于域名解析延时与80端口1.3 关于备案1.4 关于SSL证书1.5 关于SSL证书的签发1.6 关于SSL证书的部署1.7 关于LNMP和LAMP1.8 关于bt面板 二、单服务器单一级域名多网站2.1 创建多个二级域名2.2 解析二级域名绑定到服务器上2.3…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...
TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战
“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...
大数据学习(132)-HIve数据分析
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言Ǵ…...

OPENCV形态学基础之二腐蚀
一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...
rnn判断string中第一次出现a的下标
# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...
go 里面的指针
指针 在 Go 中,指针(pointer)是一个变量的内存地址,就像 C 语言那样: a : 10 p : &a // p 是一个指向 a 的指针 fmt.Println(*p) // 输出 10,通过指针解引用• &a 表示获取变量 a 的地址 p 表示…...
用鸿蒙HarmonyOS5实现中国象棋小游戏的过程
下面是一个基于鸿蒙OS (HarmonyOS) 的中国象棋小游戏的实现代码。这个实现使用Java语言和鸿蒙的Ability框架。 1. 项目结构 /src/main/java/com/example/chinesechess/├── MainAbilitySlice.java // 主界面逻辑├── ChessView.java // 游戏视图和逻辑├──…...