JAVA基础(JAVA SE)学习笔记(八)面向对象编程(高级)

 前言 

1. 学习视频:

尚硅谷Java零基础全套视频教程(宋红康2023版,java入门自学必备)_哔哩哔哩_bilibili

2023最新Java学习路线 - 哔哩哔哩

第二阶段:Java面向对象编程

6.面向对象编程(基础)

7.面向对象编程(进阶)

8.面向对象编程(高级)

正文

8.面向对象编程(高级)

8.1 static 修饰成员变量与方法

例如,用户数量total设置为static,每次同类型用户删除、添加都会减少总数量。下面是设置在构造器中,实际开发中应该在删除、添加方法中设置。

        这是因为我们自定义的类是属于引用数据类型的(像数组),可以打印,打印的是初始化的值null。但因为没有地址值,toString()又要打印地址值,所以打印toString()会空指针异常。

        在java中,int[] a; 或 Phone myPhone;  叫做 定义类名、对象名。int[] a = new int[];或Phone myPhone = new Phone(); 叫做对象初始化,等于给对象赋值初始地址值。

        (指针是以地址作为值的变量。当我们Phone myPhone或int[] a实际上是指定了指针变量名和指针变量指向的内存空间上所存放的数据的类型。但是并没有给指针赋地址值。int[] a = null;或Phone myPhone = null;之后,进行了初始化,初始化值为null,所以这个指针变量就是空指针。)

8.2 单例(Singleton)的设计模式

饿汉式:一开始就创建了对象。(随着类的加载立即加载对象)占用时间长。

懒汉式:需要的时候才创建对象。(随着类的加载,在调用get方法时,加载对象,加载延迟

8.3 main()方法的理解

8.4 类的成员变量之四:代码块 { }

代码块:写在类的内部,有一对大括号,可以用或不用static修饰。一个类可以写多个代码块,但是按照声明先后顺序执行。所以一般只写一个静态代码块、一个非静态代码块。

举例:代码块可用可不用(可以放在构造器,或者显式赋值(给属性赋值),或者非静态代码块)

举例:代码块有必要使用(多行代码才能实现一个功能,且放在构造器不合适,所以用静态代码块来实现与类的创建一同加载的功能。)

8.5 实例变量赋值位置与赋值顺序

有父子继承关系的代码块和构造器的执行顺序:由父及子,静态先行。每代一样,先普后构。(先普通代码块,后构造器)

8.6 final 关键字的使用

final的理解:最终的。final可以用来修饰的结构:类、方法、变量。

具体说明:

8.7 abstract(抽象概念) 关键字的修饰类、方法

抽象类不能构建对象,但还是有构造方法(有/无参数构造器)。抽象方法必须包含在抽象类中,才能保证这个抽象方法不会被调用。抽象方法可以由抽象类的子类实现这个抽象方法的具体方法体。

5.1 abstract不能修饰变量、代码块、构造器。

8.8 模板方法设计模式与抽象的应用举例

8.9 interface(接口关键字)的使用

举例:

匿名实现类:不声明一个有名字类去实现一个接口的抽象方法。

                            (就是不“class 类名 implements 接口名{ 抽象方法 }”)。

(直接利用接口的多态性,接口名 变量名 = new 接口名(){ 重写抽象方法 }”

                                等于把“new 接口名(){ 重写抽象方法 }”看作

                                重写过抽象方法的“new 实现类对象”

                               

我们经常选择3.创建接口匿名实现类的对象 和 4.创建接口匿名实现类的匿名对象这样的写法。

练习:

8.10 JDK8 和 JDK9 中接口的新特性

在定义接口的时候,一般不会使用JDK8中声明的静态方法、默认方法。更多的是,以后用Java核心API的时候,里面会写这样的方法。我们要知道怎么调用。

JDK9新特性:接口内部 定义私有方法。(可以把一些默认方法中的相似代码抽取出来,组成私有方法,仅供内部调用。)

8.11 类的成员之五:内部类

成员内部类:像成员变量、成员方法一样定义在一个类内部的类。(加static就是静态成员内部类。)

成员内部类,如果想要通过外部类访问内部类,需要通过外部类对象去创建内部类对象,格式:

        外部类名.内部类名 变量名 = new 外部类名().new 内部类名();

静态成员内部类,可以在不创建外部类对象的情况下被实例化,格式:

        外部类名.内部类名 变量名 = new 外部类名().内部类名();

成员内部类可以在外部类内被成员方法调用,成员内部类也可以使用外部类的成员变量、方法。

静态内部类只能访问外部类的静态成员,可以定义内部类的静态成员。非静态内部类不能定义静态成员。

局部内部类(方法内部类)是定义在方法中的类。只能在当前方法中被使用。

匿名内部类:

        方法的参数被定义为一个接口类型,就需要先定义一个类来实现接口,然后根据该类来进行对象实例化。除此之外,还可以定义匿名内部类来实现接口。可以看作:不定义接口实现类的名称,直接新建一个接口实例对象且不命名,这个对象就是接口的子类实例,子类是匿名的,需要实例化的内容写在{ }内。

举例:

8.12 枚举类的使用(自定义、enum)

8.12.1 定义

8.12.2 JDK5.0 之前定义枚举类

成员:成员变量、成员方法(get获取、set设置、其他行为方法)、构造器。

实例变量用 private final 修饰,表示私有化(禁止外界直接访问,只能被该类的其他成员访问)且在类内一旦赋值,不可更改。

类内创建枚举类实例,用public static final 修饰,

public 允许外部直接访问该变量。

static 使外部可以使用类名.变量(对象)名的方式访问该变量(对象)。

final 禁止外部对该变量进行修改。

成员变量和实例对象变量的名称都是final修饰,建议都大写。

8.12.3 JDK5.0 中定义枚举类使用enum关键字

JDK5.0中使用enum关键字定义的枚举类,定义成员对象的关键字(public static final)可省略、new的步骤可简写;构造器的关键字(private)可省略。且枚举类有一个默认的父类java.lang.Enum类。具体4个步骤:

8.12.4 enum中的常用方法

8.12.5 使用枚举类实现接口:

在枚举类中重写接口中的抽象方法即可。

每一个对象都重写接口中的方法:

举例二:使用枚举定义员工工作状态,enum(有默认构造器、默认toString方法,和默认常用方法。)因此在写好员工类之后,只需要写这一行来定义员工状态。

8.13 注解

8.13.1 注解的概念

8.13.2 三个常用注解:

划去的用法,过时了

8.13.3 自定义注解 

public @interface 注解名{   参数类型 参数值(); 参数类型 参数值();  ...  参数类型 参数值();    }

使用

8.13.4 元注解与自定义注解应用举例

元注解:对现有的注解进行解释说明的注解。

8.14 Junit单元测试的使用

操作流程:

或 用到的时候爆红了,直接联网下载到本地

或 有的项目已经有了这个依赖包,直接添加到其他模块使用

包含单元测试方法的类必须是public的。

在使用了@Test的方法中可以在控制台输入数值:

自定义测试模板:

8.15 包装类

8.15.1 包装类的理解

8.15.2 基本数据类型与包装类的转换

8.15.3 基本数据类型、包装类 与 String类的转换

实际应用例子:

特殊例子:

8.15.4 包装类的缓存对象

==可以比较引用类型的,但是两个类型要么相同,要么是父子类的关系,Double和Integer是并列的两个类,只有共同父类Number,不能比较。

Integer和double比较的时候,自动拆箱,拆成int类型。1000和1000数字值比较,结果相等。

(因为拆箱(直接拆)比装箱(要新建引用类型对象)成本低,所以Java规定,这时优先拆箱。)

Java三元表达式返回值类型要相同,还有字符强转的功能,返回值类型为两个返回值中类型精度更高的那个类型。

IDEA的使用(二)快捷键 (IntelliJ IDEA 2022.1.3版本)

IDEA的使用(三)Debug(断点调试)(IntelliJ IDEA 2022.1.3版本)

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

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

相关文章

题目 1056: 二级C语言-温度转换(python详解)——练气四层初期

✨博主:命运之光 🦄专栏:算法修炼之练气篇(C\C版) 🍓专栏:算法修炼之筑基篇(C\C版) 🍒专栏:算法修炼之练气篇(Python版) ✨…

单目3D目标检测 方法综述——直接回归方法、基于深度信息方法、基于点云信息方法

本文综合整理单目3D目标检测的方法模型,包括:基于几何约束的直接回归方法,基于深度信息的方法,基于点云信息的方法。万字长文,慢慢阅读~ 直接回归方法 涉及到模型包括:MonoCon、MonoDLE、MonoFlex、CUPNet…

buuctf_练[MRCTF2020]Ezaudit

[MRCTF2020]Ezaudit 掌握知识 ​ 网站源码泄露,代码审计,SQL注入的万能密码使用,mt_rand函数的伪随机数漏洞搭配php_mt_seed工具使用,随机数特征序列的生成 解题思路 打开题目链接,又发现是一个不错的网站界面&…

Linux shell编程学习笔记16:bash中的关联数组

上一节我们探讨了普通的数组,即使用数字下标来索引数组中不同的元素的数组,也可以称之为索引数组。 相比纯粹的数字,字符串不仅能表明含义,也更便于记忆使用,于是就有了关联数组。 一、关联数组概述 bash 从4.0开始支…

竞赛 深度学习图像修复算法 - opencv python 机器视觉

文章目录 0 前言2 什么是图像内容填充修复3 原理分析3.1 第一步:将图像理解为一个概率分布的样本3.2 补全图像 3.3 快速生成假图像3.4 生成对抗网络(Generative Adversarial Net, GAN) 的架构3.5 使用G(z)生成伪图像 4 在Tensorflow上构建DCGANs最后 0 前言 &#…

基于 nodejs+vue旅游推荐系统 mysql

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性:…

vscode markdown 使用技巧 -- 如何快速打出一个Tab 或多个空格

背景描述: 我在使用VSCode,这玩意很好用,但是,有一个缺点是,我想使用Tab来做一些对齐,但是我发现在VSCode中,无论是Tab还是多个空格,最终显示出来的都是一个空格 使用代码可以实现打…

【VUE】ElementPlus之动态主题色调切换(Vue3 + Element Plus+Scss + Pinia)

前言 关于ElementPlus的基础主题色自定义可以参阅《【VUE】ElementPlus之自定义主题样式和命名空间》 有了上面基础的了解,我们知道ElementPlus的主题色调是基于CSS3变量特性进行全局控制的, 那么接下来我们也基于CSS3变量来实现主题色调的动态切换效果&…

Linux - firewall-cmd 命令添加端口规则不生效排查

文章目录 linux 防火墙 firewall-cmd 命令详解问题排查 linux 防火墙 firewall-cmd 命令详解 基本语法 firewall-cmd --zonezone-name --add-serviceservice-name --permanent命令参数 --zone:指定要添加服务的区域名称。 --add-service:指定要添加的…

Apache ActiveMQ RCE漏洞复现(CNVD-2023-69477)

0x01 产品简介 ActiveMQ是一个开源的消息代理和集成模式服务器,它支持Java消息服务(JMS) API。它是Apache Software Foundation下的一个项目,用于实现消息中间件,帮助不同的应用程序或系统之间进行通信。 0x02 漏洞概述 Apache ActiveMQ 中存…

【概率论教程01】对贝叶斯定理的追忆

一、说明 贝叶斯定理,是一个需要反复体悟的道理,不是说公式解释清除就算Grasp,而是需要反复在实际项目中发挥,才能算掌握了。而实际应用中,并不是简单给出条件就可以套用,而是隐藏在迷雾一样的事实中&#…

基于Springboot自习预约管理系统

功能介绍: 基于Springboot自习预约管理系统。该系统为后台管理系统,无前台。主要角色有:管理员和学生。 主要功能: 学生信息管理:学号、姓名、专业、班级、年级、联系方式 教室信息管理:教室、教室号、楼…

利用Linux socat快速搭建TCP服务器

某些场合,需要在Linux上快速搭建一个TCP的服务器,接收客户端的连接,返回一些数据。 一般用于测试或者负载不大,安全性要求不高的场合,达到快速搭建的目的。 本文以客户端通过服务器的3334端口,获取服务器…

BIOS MBR UEFI GPT详解

先来看下名词 启动方式: Legacy:传统的。指的就是BIOS。 BIOS:Basic Input Output System,中文名称"基本输入输出系统"。 UEFI:Unified Extensible Firmware Interface,中文名称"统一的…

常见面试题-MySQL专栏(一)

为什么 mysql 删了行记录,反而磁盘空间没有减少? 答: 在 mysql 中,当使用 delete 删除数据时,mysql 会将删除的数据标记为已删除,但是并不去磁盘上真正进行删除,而是在需要使用这片存储空间时&…

【哈士奇赠书活动 - 44期】- 〖从零基础到精通Flutter开发〗

文章目录 ⭐️ 赠书 - 《从零基础到精通Flutter开发》⭐️ 内容简介⭐️ 作者简介⭐️ 编辑推荐⭐️ 赠书活动 → 获奖名单 ⭐️ 赠书 - 《从零基础到精通Flutter开发》 ⭐️ 内容简介 本书由浅入深地带领读者进入Flutter开发的世界,从Flutter的起源讲起&#xff0c…

【RV1106/RV1103】RV1103增加RTL8723BS

文章目录 Kernel 部分支持配置 menuconfigWiFi 功能支持Bluetooth 功能支持 原SDK的Busybox配置BT 部分文件系统部分蓝牙测试dbus 安装测试遇到的问题让hci0出来 使用hcitool来操作 Kernel 部分支持 配置 menuconfig WiFi 功能支持 Bluetooth 功能支持 正基和海华的模块都使用…

Hafnium安全分区管理器和示例参考软件栈

安全之安全(security)博客目录导读 目录 一、安全分区管理器 1、术语 2、对旧平台的支持 二、示例参考软件栈 一、安全分区管理器 安全分区管理器的三种实现在TF-A代码库并存: 1.基于FF-A规范的S-EL2 SPMC(SPM Core),使能安全…

搜维尔科技:Geomagic Touch X力反馈设备【开箱图真机测试】

将力反馈性能提升到一个新的水平,可提供更精确的定位输入和高保真力反馈输出。对于3D建模和设计、手术培训、虚拟装配等要求精确度较高的多种操作,TouchX是一个易于使用、经济实惠的选择。 Touch X 的功能 屡获殊荣的 Touch X 力反馈设备提供了经济实惠…

【OpenCV实现平滑图像处理】

文章目录 概要2D 卷积(图像过滤)模糊图像(平滑图像)中值模糊双边过滤小结 概要 在图像处理中,低通滤波器是一种常用的技术,用于平滑、模糊或降低图像的噪音。这种滤波器通过去除图像中高频部分&#xff08…