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

JAVA知识点全面总结2:面向对象

二.面向对象

1.面向对象有哪些重要的关键字?作用是什么?

2.理解多态的使用?

3.接口与抽象类的相同点和不同点?

4.equals和toString的判断?

5.新建对象的流程是什么?new一个对象?

6.深拷贝浅拷贝和引用拷贝的区别?

7.类的多种类型?

待更新

待更新

二.面向对象

1.面向对象有哪些重要的关键字?作用是什么?

①解决封装的三个关键字

  • private 类内
  • 缺省 类内+包内
  • protected 包内+不同包的子类(只能在子类内部访问到)
  • public 项目内
  • 注意:代码块无需封装,如果static修饰,则是类加载执行而执行
    如果无static修饰,则是对象创建而执行。

②static关键字

  • static修饰 属性,方法,代码块,内部类。不修饰构造器,因为构造器在对象加载时采用。
  • 注意:static修饰的代码块或方法,内部只能访问static的成员变量。
  • 静态和非静态在JVM的运行
    – 方法区加载类信息,静态结构,常量池并运行静态代码快。
    – 堆区保存类new的对象并运行非静态代码块。
    – 栈区保存对象的引用。

③final

  • 不可继承 类
  • 不可更改 变量
  • 不可重写 方法

④abstract

  • 抽象类
  • 抽象方法

2.理解多态的使用?

①条件

  • 类是继承关系
  • 子类重写了方法
  • 即父类引用调用子类重写的方法

②编译时多态和运行时多态

  • 编译时多态:方法重载
    – java编译时即确定哪一个重载方法
  • 运行时多态:方法重写
    – 同一引用调用同样的方法做不同的事情
    – 相当于子类向上转型为父类
    – 建立变量的连接然后加载对象,java编译规则规定父类引用可以指向子类对象

③动态绑定和静态绑定

  • 静态绑定:程序运行前就绑定方法到类上
  • 动态绑定:程序在运行期间才确定,方法运行时才知道属于哪个类
    – 引用指向的具体实例的方法而不是引用变量类型的方法
  • 代码理解
package mianxiangduixiangtest;public class DongTaiJingTaitest {public static void main(String[] args) {Animal animal = new Cat();animal.drink();animal.eat();//猫喝水//动物吃饭//即eat方法是与类静态绑定的,在JVM类加载时就确定animal调用的是Animal的eat方法,不需要创建对象//drink方法是与对象动态绑定的,即在运行时才确定drink方法调用的是Cat中的drink方法}
}class Animal{static void eat(){System.out.println("动物吃饭");}void drink(){System.out.println("动物喝水");}
}
class Cat extends Animal{static void eat(){System.out.println("猫吃饭");}void drink(){System.out.println("猫喝水");}
}

④理解多态

  • 从编译+运行角度
    – 编译时,java规定类只能调用自己结构中定义的方法,且规定父类引用可以指向子类的实例(只看语法)
    – 运行时,由于类加载顺序或初始化顺序,子类重写的方法覆盖了父类的原方法,故实际上父类引用调用的方法为子类重写的方法(只看引用指向的类加载的结构)
  • 从反射的角度
    – 事实上,父类的引用可以调用子类个性的方法,只不过只能在运行期间实现,因为编译时会报错(必须调用自己结构中定义的方法)。
    – 由此可以解释父类引用指向子类对象时,在运行期间,父类引用等同于子类引用 ,可以调用子类所有的方法和属性

⑤多态代码实现

package mianxiangduixiangtest;import java.lang.reflect.Method;public class DuoTaiTest {public static void main(String[] args) throws Exception {People p = new Man();//p.eat()过编译,运行时p实际上指向的是子类的结构,故p可以调用子类的方法//输出男人吃饭p.eat();// p.drink(); 不过编译,因为编译只能运行引用类型 类的结构Class aClass = p.getClass();Method drink = aClass.getDeclaredMethod("drink");//输出男人喝水drink.invoke(p);}
}
class People{void eat(){System.out.println("人吃饭");}
}
class Man extends People{void eat(){System.out.println("男人吃饭");}void drink(){System.out.println("男人喝水");}
}

3.接口与抽象类的相同点和不同点?

  • 接口 方法完全抽象,implements,无构造器,默认public也只能是,
    子类实现接口必须重写。
  • 抽象类 可以有默认实现,extends,有构造器,所有封装都可,
    子类继承抽象类不重写成为抽象类。
  • 两者都无法实例化,都可以作为多态的引用
  • 代码
package mianxiangduixiangtest;public class ChouJieTest {
}interface Cup{void Size();
}
abstract class Cup1{//接口可以有默认实现static void Size1(){System.out.println("大尺寸");}abstract void Size();
}

4.equals和toString的判断?

  • Object类的equals底层判断 ==
  • 实现的类需要重写equals和toString

5.新建对象的流程是什么?new一个对象的流程?

①类加载

类加载到方法区中(原因:方便JVM找.class文件)

②开辟内存空间

开辟堆内存空间(原因:寻找对象需要的内存空间)

③初始化成员变量

  • 初始化父类 静态变量或静态代码块
  • 初始化子类 静态变量或静态代码块
  • 父类普通变量-初始化代码块-构造方法
  • 子类普通便利-初始化代码块-构造方法

④引用变量建立连接

6.深拷贝浅拷贝和引用拷贝的区别?

①三者概念

  • 深拷贝:堆中创建新对象,类中的引用类型也是创建新对象
  • 浅拷贝:堆中创建新对象,类中的引用类型复制引用地址
  • 引用拷贝:两个引用指向同一堆对象

②拷贝实现

  • Object类中的clone方法
    – 能够复制一个新的对象在堆内存中(super.clone),复制结果为Object,需要进行类型强转
    – native方法非java实现,是protected类型的
  • Cloneable接口
    – 标记接口
    –只有实现这个接口后,然后在类中重写Object中的clone方法,然后通过类调用clone方法才能克隆成功,调用中JVM底层方法判断类是否有标记接口Cloneable,有则克隆成功。
  • 深拷贝与浅拷贝实现
    – 深拷贝自己和每个成员属性都实现Cloneable接口并重写clone
    – 浅拷贝自己实现Cloneable接口重写clone即可

③代码实战

package mianxiangduixiangtest;public class ShengQianCopyTest {public static void main(String[] args) throws Exception{Paper paper = new Paper();Paper clone = (Paper)paper.clone();System.out.println(paper == clone);System.out.println(paper.tree==clone.tree);//浅复制时,第一个结果false,第二个结果为true,说明确实赋复制了新对象,但是对象内部的引用属性为赋值Paper1 paper1 = new Paper1();Paper1 clone1 = paper1.clone();System.out.println(paper1 == clone1);System.out.println(paper1.tree1==clone1.tree1);//深复制时,第一个结果和第二个结果都为false,说明确实复制了新对象,并且对象内部的对象属性也被赋值}
}class Paper implements Cloneable{Tree tree;@Overrideprotected Object clone() throws CloneNotSupportedException {return super.clone();}
}
class Tree{}
class Paper1 implements Cloneable{Tree1 tree1 = new Tree1();@Overrideprotected Paper1 clone() throws CloneNotSupportedException {Paper1 paper1 = (Paper1)super.clone();paper1.tree1 = (Tree1) this.tree1.clone();return paper1;}
}
class Tree1 implements Cloneable{@Overrideprotected Object clone() throws CloneNotSupportedException {return super.clone();}
}

7.类的多种类型?

①同级类

  • .java文件中有多个同级类(编译后多个.class文件)
  • public只能修饰其中一个

②内部类

  • 即分为局部内部类和成员内部类
    – 局部内部类定义在代码块和方法中
    – 成员内部类定义在类中,成员内部类分为非静态成员内部类和静态成员内部类,其中还有匿名内部类(只能使用一次)。
  • 非静态成员内部类:无法脱离外部类实例来实例化(成员属性)
  • 静态内部类:
    – 访问静态外部成员
    – 实例化不依赖于外部类,实例化外部对象可以访问外部非静态结构
  • 匿名内部类:是某个类的子类
  • 局部内部类:方法或代码块中

③代码示例

package mianxiangduixiangtest;public class NeiBuLeiTest {public static void main(String[] args) {//静态内部类可以通过外部类.内部类来实例化Person.Inner1 inner1 = new Person.Inner1();//成员内部类必须通过外部类的实例化来实例化Person person = new Person();Person.Inner inner = person.new Inner();}
}class Person{//成员内部类class Inner{}//静态内部类static class Inner1{}//匿名内部类Dog dog = new Dog(){};//局部内部类{class Cat{}}}
class Dog{}

未更新

未更新

相关文章:

JAVA知识点全面总结2:面向对象

二.面向对象 1.面向对象有哪些重要的关键字?作用是什么? 2.理解多态的使用? 3.接口与抽象类的相同点和不同点? 4.equals和toString的判断? 5.新建对象的流程是什么?new一个对象? 6.深拷贝…...

DNS作用及工作原理

文章目录1. DNS作用2 DNS 三个组成部分:2.1 客户端2.2Local DNS2.3 权威域 DNS 服务器3 工作过程1. DNS作用 DNS 分为 Client 和 Server,Client 扮演发问的角色,也就是问 Server 一个 Domain Name,而 Server 必须要回答此 Domain…...

Android 9.0 wifi的随机mac地址修改为固定不变

1.前言 在9.0的系统rom产品定制化开发中,在系统默认的wifi的mac地址是会在联网前后会变化,因为默认是随机显示mac地址,所以会在连上wifi后mac地址会变动但是如果根据mac地址来升级 会引起一系列问题,为了避免这些问题 所以就要求固定mac地址,这就需要看wifi模块怎么改变ma…...

Apinto 网关 V0.11.1 版本发布,多协议互转,新增编码转换器,接入 Prometheus

Eolink 旗下 Apinto 开源网关再次更新啦~ 一起来看看是否有你期待的功能! 1、协议转换功能上线 之前发布的 Apinto v0.10.0 已经支持了多协议的基本功能,实现多协议支持的一次验证。本次最新版本可以支持 HTTP 与 gRPC、HTTP 与 Dubbo2 之间的协议转换。…...

Android 12.0 根据app包名授予app监听系统通知权限

1.概述 在12.0的系统rom产品定制化开发中,在一些产品rom定制化开发中,系统内置的第三方app需要开启系统通知权限,然后可以在app中,监听系统所有通知,来做个通知中心的功能,所以需要授权 获取系统通知的权限,然后来顺利的监听系统通知。来做系统通知的功能 2.根据app包名…...

mysql视图和存储过程

视图视图就是将一条sql查询语句封装起来,之后使用sql时,只需要查询视图即可,查询视图时会将这条sql语句再次执行一遍。视图不保存数据,数据还是在表中。SELECT 语句所查询的表称为视图的基表,而查询的结果集称为虚拟表…...

uniapp 实现人脸认证

前言 对于前端来说,需要后端提供一个人脸识别接口,前端传入图片,接口识别并返回结果,如此看来,其实前端只需实现图片传入即可,但是其实不然,在传入图片时,需要进行以下几点操作&…...

自学大数据第三天~终于轮到hadoop了

前面那几天是在找大数据的门,其实也是在搞一些linux的基本命令,现在终于轮到hadoop了 Hadoop hadoop的安装方式 单机模式: 就如字面意思,在一台机器上运行,存储是采用本地文件系统,没有采用分布式文件系统~就如我们一开始入门的时候都是从本地开始的; 伪分布式模式 存储采用…...

Unity 入门精要00---Unity提供的基础变量和宏以及一些基础知识

头文件引入: XXPROGRAM ... #include "UnityCG.cginc"; ... ENDXX 常用的结构体(在UnityCg.cginc文件中):在顶点着色器输入和输出时十分好用 。 关于如何使用这些结构体,可在Unity安装文件目录/Editor…...

Kubernetes的网络架构及其安全风险

本博客地址:https://security.blog.csdn.net/article/details/129137821 一、常见的Kubernetes网络架构 如图所示: 说明: 1、集群由多个节点组成。 2、每个节点上运行若干个Pod。 3、每个节点上会创建一个CNI网桥(默认设备名称…...

Blob分析+特征+(差分)

Blob分析特征0 前言1 概念2 方法2.1 图像采集2.2 图像分割2.3 特征提取3 主要应用场景:0 前言 在缺陷检测领域,halcon通常有6种处理方法,包括Blob分析特征、Blob分析特征差分、频域空间域、光度立体法、特征训练、测量拟合,本篇博…...

Flink 提交模式

Flink的部署方式有很多,支持Local,Standalone,Yarn,Docker,Kubernetes模式等。而根据Flink job的提交模式,又可以分为三种模式: 模式1:Application Mode Flink提交的程序,被当做集群内部Application,不再需要Client端做繁重的准备工作。(例如执行main函数,生成JobG…...

网络总结知识点(网络工程师必备)三

♥️作者:小刘在C站 ♥️个人主页:小刘主页 ♥️每天分享云计算网络运维课堂笔记,努力不一定有收获,但一定会有收获加油!一起努力,共赴美好人生! ♥️夕阳下,是最美的绽放,树高千尺,落叶归根人生不易,人间真情 目录 前言 51.什么是ARP代理?...

测开:前端基础-css

一、CSS介绍和引用 1.1 css概述 层叠样式表,是一种样式表语言,用来描述HTML和XML文档的呈现。 CSS 用于简化HTML标签,把关于样式部分的内容提取出来,进行单独的控制,使结构与样式分离开发。 CSS 是以HTML为基础&…...

Java学习记录之JDBC

JDBC JDBC 是 Java Database Connectivity 的缩写,是允许Java 程序访问并操作关系型数据库数据的一套 应用程序接口。本身就是一种规范,它提供的接口有一套完整的,可移植的访问底层数据库的程序。 JDBC 的架构 JDBC API支持两层和三层处理…...

矩阵翻硬币

题目描述 小明先把硬币摆成了一个 n 行 m 列的矩阵。 随后,小明对每一个硬币分别进行一次 Q 操作。 对第 x 行第 y 列的硬币进行 Q 操作的定义:将所有第 ix 行,第 jy 列的硬币进行翻转。...

【C语言跬步】——指针数组和数组指针(指针进阶)

一.指针数组和数组指针的区别 1.指针数组是数组,是一种存放指针的数组; 例如: int* arr[10]; 2.数组指针是指针,是一种指向数组的指针,存放的是数组的地址; 例如: int arr[5]; int (p)[5]&a…...

第十四届蓝桥杯模拟赛第三期(Python)

写在前面 包含本次模拟赛的10道题题解能过样例,应该可以AC若有错误,欢迎评论区指出本次题目除了最后两题有些难度,其余题目较为简单,我只将代码和结果给出,如果不能理解欢迎私信我,我会解答滴。start 2022…...

css-盒模型

巧妙运用margin负值盒模型和怪异盒模型(border padding 包含在内)display: block 能让textarea input 水平尺寸自适应父容器? – 不能 * {box-sizing: border-box; // bs: bb }<textarea/> 是替换元素,尺寸由内部元素决定,不受display水平影响. 当然可以直接设置宽度10…...

Linux | 调试器GDB的详细教程【纯命令行调试】

文章目录一、前言二、调试版本与发布版本1、见见gdb2、程序员与测试人员3、为什么Release不能调试但DeBug可以调试❓三、使用gdb调试代码1、指令集汇总2、命令演示⌨ 行号显示⌨ 断点设置⌨ 查看断点信息⌨ 删除断点⌨ 开启 / 禁用断点⌨ 运行 / 调试⌨ 逐过程和逐语句⌨ 打印 …...

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 抗噪声…...

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启&#xff0c;数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后&#xff0c;存在与用户组权限相关的问题。具体表现为&#xff0c;Oracle 实例的运行用户&#xff08;oracle&#xff09;和集…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议&#xff08;EPSFD 2025&#xff09;将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会&#xff0c;EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)

文章目录 1.什么是Redis&#xff1f;2.为什么要使用redis作为mysql的缓存&#xff1f;3.什么是缓存雪崩、缓存穿透、缓存击穿&#xff1f;3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

Debian系统简介

目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版&#xff…...

ssc377d修改flash分区大小

1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...

Yolov8 目标检测蒸馏学习记录

yolov8系列模型蒸馏基本流程&#xff0c;代码下载&#xff1a;这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中&#xff0c;**知识蒸馏&#xff08;Knowledge Distillation&#xff09;**被广泛应用&#xff0c;作为提升模型…...

土建施工员考试:建筑施工技术重点知识有哪些?

《管理实务》是土建施工员考试中侧重实操应用与管理能力的科目&#xff0c;核心考查施工组织、质量安全、进度成本等现场管理要点。以下是结合考试大纲与高频考点整理的重点内容&#xff0c;附学习方向和应试技巧&#xff1a; 一、施工组织与进度管理 核心目标&#xff1a; 规…...

pgsql:还原数据库后出现重复序列导致“more than one owned sequence found“报错问题的解决

问题&#xff1a; pgsql数据库通过备份数据库文件进行还原时&#xff0c;如果表中有自增序列&#xff0c;还原后可能会出现重复的序列&#xff0c;此时若向表中插入新行时会出现“more than one owned sequence found”的报错提示。 点击菜单“其它”-》“序列”&#xff0c;…...