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

news2024/11/16 19:45:31

 前言 

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.coloradmin.cn/o/1130923.html

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

相关文章

C++标准模板(STL)- 类型支持 (类型特性,is_void,is_null_pointer,is_integral)

类型特性 类型特性定义一个编译时基于模板的结构&#xff0c;以查询或修改类型的属性。 试图特化定义于 <type_traits> 头文件的模板导致未定义行为&#xff0c;除了 std::common_type 可依照其所描述特化。 定义于<type_traits>头文件的模板可以用不完整类型实…

【小呆的概率论学习笔记】抽样调查之用抽样样本估计母体数字特征

文章目录 1. 随机变量的数字特征1.1 随机变量的均值&#xff08;期望&#xff09;1.2 随机变量的方差1.3 随机变量的协方差 2. 抽样调查3. 用抽样样本估计母体数字特征3.1 估计母体样本均值3.2 抽样样本均值的方差3.2 估计母体样本方差 1. 随机变量的数字特征 随机变量本质上是…

手把手教你在项目中引入Excel报表组件

摘要&#xff1a;本文由葡萄城技术团队原创并首发。转载请注明出处&#xff1a;葡萄城官网&#xff0c;葡萄城为开发者提供专业的开发工具、解决方案和服务&#xff0c;赋能开发者。 前言 GrapeCity Documents for Excel&#xff08;以下简称GcExcel&#xff09;是葡萄城公司的…

《VS2013+ Qt5.6 创建Qt对话框(*.ui 文件, *.h, *.cpp )》

标题&#xff1a;如何在Visual Studio 2013中创建Qt对话框项目 简介 在本篇博客中&#xff0c;我们将介绍如何使用Visual Studio 2013和Qt 5.6创建一个Qt对话框项目&#xff0c;包括创建.ui文件、.h文件和.cpp文件&#xff0c;以及构建一个基本的用户界面和业务逻辑。&#x…

自建的离散傅里叶变换matlab程序实现及其与matlab自带函数比较举例

自建的离散傅里叶变换matlab程序实现及其与matlab自带函数比较举例 在matlab中有自带的离散傅里叶变换程序&#xff0c;即fft程序&#xff0c;但该程序是封装的&#xff0c;无法看到源码。为了比较清楚的了解matlab自带的实现过程&#xff0c;本文通过自建程序实现matlab程序&…

DenseNet 和 FractalNet学习笔记

文章目录 网络结构模型细节下采样增长率 代码实现FractalNet 模型(2016) 网络结构 假设输入为一个图片X0&#xff0c;经过一个L层的神经网络&#xff0c;第l层的特征输出记作Xl&#xff0c;那么残差连接的公式如下所示&#xff1a; x l H l ( X l − 1 ) X l − 1 x_lH_l(X…

【光电子技术+光纤通信】博资考

光电子技术与光纤通信基础总结 几何光学波动光学光电子器件激光器光调制器光探测器光纤 几何光学 折射率是比值定义式&#xff0c;定义为入射介质光速比上折射介质光速&#xff0c;它与optical density意义相似&#xff0c;可以表示传播介质对于光传播的阻碍程度&#xff0c;因…

Postman的简单使用

Postman简介 官网 Postman是Google公司开发的一款功能强大的网页调试与发送HTTP请求&#xff0c;并能运行测试用例的Chrome插件 使用Postman进行简单接口测试 新建测试 → 选择请求方式 → 请求URL&#xff0c;下面用百度作为例子&#xff1a; 参考文档 [1] Postman使用教程…

AIR101 LuatOS LVGL 显示多个标签例程

屏幕资料 AIR101与屏幕连接 PC端仿真环境合宙官方PC端版本环境搭建教程 PC电脑仿真 -- sys库是标配 _G.sys require("sys") sys.taskInit(function()local cnt0lvgl.init(480,320)--lvgl初始化local cont lvgl.cont_create(nil, nil);-- lvgl.cont_set_fit(cont, …

cocosCreator 之 dispatchEvent事件分发

版本&#xff1a; 3.8.0 语言&#xff1a; TypeScript 环境&#xff1a; Mac Node事件派发 cocosCreator支持使用Node节点进行事件派发(dispatchEvent)&#xff0c;事件派发系统是按照 Web 的事件冒泡及捕获标准 实现的。 事件派发主要通过冒泡的方式逐渐向父节点传递。 在派…

整数智能·迪拜GITEX 2023 |探索未来科技,感受创新脉搏

第43届GITEX GLOBAL在迪拜世界贸易中心盛大开幕&#xff0c;聚集来自全球各地的6000多家参展企业&#xff0c;包含大量来自于人工智能、区块链、网络安全、可持续技术等领域的科技巨头和革命性初创企业&#xff0c;展示全球科技最新趋势和创新机遇。GITEX GLOBAL始办于1981年&a…

OpenText 安全取证软件——降低成本和风险的同时,简化电子取证流程

OpenText 安全取证软件&#xff0c;行业标准的数字调查解决方案&#xff0c;适用于各种规模和各种行业的组织 降低成本和复杂性 • 远程调查比轮流调查过程更有效 对结果持有信心 • 磁盘级可见性可以完成相关端点数据的搜索和收集 谨慎调查 • 完整的网络调查&#xf…

Linux常用文件和目录管理

本文旨在对y总的Linux基础课做学习记录&#xff0c;方便日后复习 参考视频&#xff1a;Linux基础课 参考教程&#xff1a;Linux教程 0 绝对路径和相对路径 Linux 的目录结构为树状结构 绝对路径&#xff1a;由根目录 / 写起&#xff0c;例如&#xff1a; /usr/share/doc相对…

华为云2023年双十一服务器优惠价格表及活动大全

2023华为云双11优惠活动「云上优选 特惠来袭」&#xff0c;阿腾云atengyun.com整理云服务器优惠价格表&#xff0c;华为云L实例-2核2G3M一年优惠价89元、L实例-2核2G4M价格108元一年、L实例-2核4G5M优惠价198元一年&#xff0c;三年1000元、HECS云服务器-1核2G1M带宽39元一年、…

【C++】继承和多态

继承和多态 一、继承1. 继承概念2. 继承定义&#xff08;1&#xff09;继承的格式定义&#xff08;2&#xff09;继承父类成员访问方式的变化 3. 父类和子类对象赋值转换4. 继承中的作用域5. 子类的默认成员函数6. 继承与友元7. 继承与静态成员8. 复杂的菱形继承及菱形虚拟继承…

Zynq UltraScale+ XCZU9EG 纯VHDL解码 IMX214 MIPI 视频,2路视频拼接输出,提供vivado工程源码和技术支持

目录 1、前言免责声明 2、我这里已有的 MIPI 编解码方案3、本 MIPI CSI2 模块性能及其优越性4、详细设计方案设计原理框图IMX214 摄像头及其配置D-PHY 模块CSI-2-RX 模块Bayer转RGB模块伽马矫正模块VDMA图像缓存Video Scaler 图像缓存DP 输出 5、vivado工程详解PL端FPGA硬件设计…

linux安装nginx 1.25.2

1.下载nginx-1.25.2.tar.gz放在/opt下 wget http://nginx.org/download/nginx-1.25.2.tar.gz 2.解包 Nginx 软件包&#xff1a; tar -xvf nginx-1.25.2.tar.gz 3.安装 Nginx 依赖&#xff1a; 在安装 Nginx 之前&#xff0c;需要先安装一些依赖库&#xff1a;pcre、openss…

某大型车企:加强汽车应用安全防护,开创智能网联汽车新篇章

​某车企是安徽省最大的整车制造企业&#xff0c;致力于为全球消费者带来高品质汽车产品和服务体验&#xff0c;是国内最早突破百万销量的汽车自主品牌。该车企利用数字技术推动供应链网络的新型互动&#xff0c;加快数字化转型&#xff0c;持续进行场景创新、生态创新&#xf…

无线测温产品在菲律宾某工厂配电项目的应用

摘要&#xff1a;配电系统是由多种配电设备和配电设施所组成的变换电压和直接向终端用户分配电能的一个电力网络系统。由于配电系统作为电力系统的一个环节直接面向终端用户&#xff0c;它的完善与否直接关系着广大用户的用电可靠性和用电质量&#xff0c;因而在电力系统中具有…

总结使用React做过的一些优化

一、修改css模拟v-show {!flag && <MyComponent style{{display: none}} />} {flag && <MyComponent />}<MyComponent style{{ display: flag ? block : none }} />二、循环使用key const todosList todos.map(item > {<li key{it…