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.mfbz.cn/a/103779.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【干货】FMEA的实施流程——SunFMEA

DFMEA和PFMEA的实施流程基本一致,都是先定义过程/功能、故障模式分析、故障原因分析、预防/探测措施的制定、风险风险,最后到制定补偿措施,具体如下图: FMEA实施流程——SunFMEA 一、定义过程/功能 FMEA工作的第一步,…

IDEA配置HTML和Thymeleaf热部署开发

IDEA配置HTML和Thymeleaf热部署开发 1.项目配置2. IDEA配置3. 使用 需求:现在我们在开发不分离项目的时候(SpringBootThmeleaf)经常会改动了类或者静态html文件就需要重启一下服务器, 这样不仅时间开销很大,而且经常重…

APP 专项测试之兼容性测试

1、APP 兼容性测试认识 随着 APP 应用范围越来越广,用户群体越来越大,终端设备的型号也越来越多,移动终端碎片化加剧,使得 APP 兼容性测试成为测试质量保障必须要考虑的环节。 APP 兼容性测试通常会考虑:操作系统、厂…

IOS屏幕旋转监听

IOS屏幕旋转 1.设计窗口,添加三个按钮 2.添加事件连接 3.按钮点击事件实现 先添加三个IBAction 实现IBAction 使用旋转立刻生效 -(IBAction)btnFixPortrait:(id)sender{//访问应用程序委托成员_app.mask UIInterfaceOrientationMaskPortrait;//设置窗口旋转属性[self setN…

【Lua语法】字符串

Lua语言中的字符串是不可变值。不能像在C语言中那样直接改变某个字符串中的某个字符,但是可以通过创建一个新字符串的方式来达到修改的目的 print(add2(1 , 2 ,15,3))a "no one"b string.gsub(a , "no" , "on1111")print(a) print…

VisualStudio[WPF/.NET]基于CommunityToolkit.Mvvm架构开发

一、创建 "WPF应用程序" 新项目 项目模板选择如下&#xff1a; 暂时随机填一个目标框架&#xff0c;待会改&#xff1a; 二、修改“目标框架” 双击“解决方案资源管理器”中<项目>CU-APP, 打开<项目工程文件>CU-APP.csproj, 修改目标框架TargetFramew…

关于 LLM 和知识图谱、图数据库,大家都关注哪些问题呢?

自 LLM 系列文章《知识图谱驱动的大语言模型 Llama Index》、《Text2Cypher&#xff1a;大语言模型驱动的图查询生成》、《Graph RAG: 知识图谱结合 LLM 的检索增强》陆续和大家见面&#xff0c;以及《夜谈 LLM》主题直播同大家交流一番 LLM 和知识图谱、图数据库之后&#xff…

Shiro框架详解

权限管理 权限管理&#xff0c;一般指根据系统设置的安全策略或者安全规则&#xff0c;用户可以访问而且只能访问自己被授权的资源。 权限管理包括用户身份认证和授权两部分&#xff0c;简称认证授权。对于需要访问控制的资源用户首先经过身份认证&#xff0c;认证通过后用户…

NFS性能瓶颈分析

前言 atop – run it with -d option or press d to toggle the disk stats view. iostat – try it with the -xm 2 options for extended statistics, in megabytes, and in two-second intervals. iotop – top-like I/O monitor. Try it with the -oPa options to show the…

vue 数据劫持代理原理

function lianxi(){// vue 数据劫持代理let data {username:curry,age:33}//模拟组件的实例let _this {}//利用Object.defineProperty()for( let item in data){//console.log(item,data[item])Object.defineProperty(_this,item,{//get:用来获取扩展属性值的,当获取该属性值…

个人创业新机遇,零成本开启真人手办定制项目

桌上的日历变薄&#xff0c;2023年已经接近尾声&#xff0c;浅观这一年&#xff0c;您是否发现大家日常关注的重点有明显的变化&#xff0c;诸多社会事件和宏观数字的背后&#xff0c;潜藏着对经济的“不托底”&#xff0c;而当我们真正开始关注起用个人经济积累去对冲未来的不…

CMake 坑之添加文件后不修改CMakeList.txt,则文件加不进来

问题&#xff1a; 我在一个文件夹中加了一个.h和对应的cpp。 这里.h中的类会被导出。 但是怎么都导不出来。 我试了无数次的 clean and rebuild 都没用。 分析&#xff1a; 做了很多实验。发现是新建的文件没有被读取进来。 解决方法&#xff1a; 改进了下对应的CMakeL…

C语言:实现对单链表的反转 函数封装

需求&#xff1a; 实现对单链表的反转 代码实现&#xff1a; #include <stdio.h>typedef struct node{int data;struct node* next; }NODE;void PrintLink(NODE* phead) {NODE* p phead;while(p ! NULL){printf("%d ",p->data);p p->next;}printf(&…

Python实现双目标定、畸变矫正、立体矫正

一&#xff0c;双目标定、畸变矫正、立体矫正的作用 双目目标定&#xff1a; 3D重建和测距&#xff1a;通过双目目标定&#xff0c;您可以确定两个摄像头之间的相对位置和朝向&#xff0c;从而能够根据视差信息计算物体的深度&#xff0c;进行三维重建和测距。姿态估计&#xf…

JVM相关的面试题

一、什么是程序计数器 二、简要的介绍一下堆 三、什么是虚拟机栈 四、能不能解释下方法区 五、你听过直接内存吗&#xff1f; 六、什么是类加载器&#xff0c;类加载器有哪些 七、什么是双亲委派模型 八、JVM为什么采用双亲委派机制 九、类装载的执行过程 十、对象什么时候被垃…

蓝凌EIS智慧协同平台saveImg接口任意文件上传漏洞复现 [附POC]

文章目录 蓝凌EIS智慧协同平台saveImg接口任意文件上传漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 0x06 修复建议 蓝凌EIS智慧协同平台saveImg接口任意文件上传漏洞复现 [附POC] 0x01 前言 免责声明&…

75 应急响应-数据库漏洞口令检索应急取证箱

必须知识点 1.第三方应用由于是选择性安装&#xff0c;如何做好信息收集和漏洞探针也是获取攻击者思路的重要操作&#xff0c;除去本身漏洞外&#xff0c;提前预知或口令相关攻击也要进行筛选 2.排除三方应用攻击行为&#xff0c;自查漏洞分析攻击者思路&#xff0c;人工配合工…

《java 桌面软件开发》swing 以鼠标为中心放大缩小移动图片

swing 使用Graphic2D 绘制图片&#xff0c;要实现对图片进行缩放和自由拖动。 1.以鼠标所在的位置为中心&#xff0c;滚轮控制缩放 2.缩放后再支持鼠标拖动。 基本原理&#xff1a; 利用scale() 函数。进行缩放。但是要注意的地方是&#xff0c;如果是在 public void paintCom…

Docker搭建Plex流媒体服务并播放自己本地视频

Docker搭建Plex流媒体服务 安装Docker创建存储配置文件的目录创建Plex容器配置Plex设置媒体库访问Plex 1 介绍 Plex是一个流媒体服务器&#xff0c;可以轻松地将你的媒体文件库&#xff08;如电影、电视节目和音乐&#xff09;通过网络流式传输到各种设备上。 Plex 是一套媒体…

Android 系统架构

首语 由于工作内容的转变&#xff0c;使得我向Android系统方向转变&#xff0c;对于一个Android系统工程师&#xff0c;了解Android整个系统架构是必然的。本篇是Android系统学习的开篇&#xff0c;Android系统庞大且复杂&#xff0c;但是能对Android的认识更深&#xff0c;更…