Java面向对象的学习

news2024/11/19 0:35:33

由于类和对象这一部分的知识点,比较难,而且涉及的知识点很广、也很杂,在这里,单独作为一个知识点来学习。我会通过不同的视频,不同的资料,根据不同的特点来学这个方面的知识点。

一、理解什么是类和对象。

类是一类对象的模板,它定义了一类对象所以具有的属性和方法。

见下图:结合栈和堆的知识点,user4 存放在栈中,new Class(~)存放在堆中。 

面向过程和面向对象:

构造器(构造方法):

一般来说,类的属性也称为成员变量。属性的作用范围是整个类体,在定义成员变量时,如果没有对齐初始化,Java会使用默认的值。例如:o、null(null一般是对象的默认值。)

而怎么在类中对属性,进行初始化呢? 使用构造器!

概念:

 创建构造器的一些注意事项:

例如:看第二张图,double x,y;相当于已经创建了两个空间。并且命名为x,y.

比较Getter and Setter方法和构造器方法:

JVM内存分析:

Java虚拟机的内存可以简单的分成三个部分:

虚拟机栈(JVM Stack)、堆heap、方法区method area。

 

它们的介绍见下图:

程序执行的过程内存分析(重点):

这一节的知识点,将前面学过的知识点都进行了总结。通过下面这个例子,很好的解释了在程序执行过程中,各个部分的内存变化。!

小结:(需要记一下)

同一个类的每个对象都有不同的成员变量来存储空间。

同一个类的每个对象都共享该类的方法。

类中属性(仅考虑实例变量)赋值过程:

这个其实就是初始化和实例化的一点区别。类中属性,称为实例变量,也叫成员变量。

参数传值机制:

分为两种传值。不过,它们的共性是所有的传值都是“值传递”。

不同的地方:

而且,因为引用类型参数进行传参的话,就会导致原来的参数对象 指向一个null空间。这就涉及到了Gc机制。(也就是垃圾回收机制。)

垃圾回收机制:

Java的内存管理,很大程度上,其实就是堆中对象实例的管理。其中包括对象空间的分配和释放。(注意!一定是对象空间的分配!不是初始化,也不是创建。创建是例如有一个Person类。那么创建一个对象就是:Person user。Person本身就已经创建好空间了,user是这个空间的名称。在前面关于变量的理解,那个停车位的例子很好的解释了这个名称。)

面试题:初始化和实例化的区别?

内存泄漏:

以下这三种情况,最可能造成内存泄漏:

 其实,后面一种,或者说包括第二种,生命周期过长都有可能造成内存泄漏、尤其是连接未关闭的进程。

static和this:

this的本质是:创建好的对象的地址。(其实就是当前对象的地址。)

this不能用于static方法中。

static声明的成员变量为静态成员 ,也称为类变量。(类变量的生命周期和类相同)

特点:为该类的共用变量,被所有实例共享。

           对该类的所有对象来说,static成员变量只有一份,被该类所有对象共享。

           它不需要进行实例化,直接用类名调用。

静态方法中不能放非静态的属性和方法。

构造方法用于对象的初始化。

变量:

  变量在整体上划分为局部变量(存放在栈中)、成员变量(也称为实例变量,存放在堆中)和静态变量(也称为类变量,存放在栈中)。

包机制:

包机制,解决类重名的问题。包对于类,就相当于文件夹对文件的作用。

使用import可以导入包。当使用import com.util.*  需要注意:使用*的用法会降低编译速度,但不会降低运行速度。

题目:它还可以导入静态属性。Java.lang的包不需要导入就能直接使用。

二、面向对象编程的三大特性 

面向对象编程有三大特性:继承、封装、多态。

继承extends:

     Java中 类没有多继承,接口有多继承。

     子类继承父类,可以得到父类的全部属性和方法(私有的不行)

     如果定义的类,没有调用extends,它的父类就是:java.lang.Object。

instanceof运算符:

   它是一个布尔类型的二元运算符,左边是对象,右边是类。当左边的对象是右边的类所创建的对象时,返回True。

方法的重写:

   就三个要点。记不起来自己去查。这个讲过一遍了。

final关键字:

继承和组合:

通过继承可以方便复用定义好的类的代码,当然,也可以使用组合的方式也能复用代码。

组合,其实就是在一个类中去创建另一个类的对象实例化,在测试类中则添加这个对象。如下图:

 小结:组合比较灵活,而继承只有一个父类,但是组合可以有多个属性,并且各有各的优点。OB

封装性:

为什么需要学习封装性?

 什么是封装性:

 

如何实现封装性:

其实就是使用权限修饰符定义。

举例使用封装性:

 

组合还有一个应用场景,使用在组合的关系里面,比如,创建顾客类、账户类。这两个类是独立的。怎么使得顾客和账户类相互联系。就设计到组合的知识点:

权限修饰符:

  当设置类的属性为私有,在测试类中只有通过setter方法才能访问到类的属性。

  优先级:private>缺省(默认无修饰符)> protected > public

  类:只能使用public、缺省修饰。

  类的内部成员:可以使用4种权限修饰。

 

在JSP里面,体现封装性:

比如连接数据库,POJO类,就称呼为JavaBean。

Object类:

它是所有Java类的根基类。除了构造方法之外的所有属性和方法都被继承。但是,不是所有类都能使用。

toString():

定义在Object类里面,它的返回类型是String类型。返回内容是类名和它的引用地址。不过,在实际应用里面,我们经常重写toString方法。

equals和==:

在对象里面,==表示判断是不是同一个对象。equals判断两个对象 在逻辑上的值是否相同。

区别:“==”用于基本数据类型,equals用于引用数据类型。例如:String,就属于引用数据类型。比较字符串是否相等,用的是equals。

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

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

相关文章

let definitions are not supported by current javascript——前端笔记

idea中报的错,解决办法就是改一下javascript在idea中的配置。 本文来自:https://blog.csdn.net/fgx_123456/article/details/77825499

Simulink仿真模块 - Demux

Demux:提取并输出虚拟向量信号的元素 在仿真库中的位置为:Simulink / Commonly Used Blocks Simulink / Signal Routing HDL Coder / Commonly Used Blocks HDL Coder / Signal Routing 模型为: 说明 Demux 模块提取输入向量信号的分量,再将它们输出为单独的信号。输出信号…

Java开发工具MyEclipse发布v2023.1.2,今年第二个修复版!

MyEclipse一次性提供了巨量的Eclipse插件库,无需学习任何新的开发语言和工具,便可在一体化的IDE下进行Java EE、Web和PhoneGap移动应用的开发;强大的智能代码补齐功能,让企业开发化繁为简。 MyEclipse v2023.1.2官方正式版下载 …

linux下用docker安装mysql

1.mysql Docker镜像 docker pull mysql:[版本号 或 latest]例:docker pull mysql:5.7 2.查看拉取的docker镜像 docker images3.设置 Docker 卷 docker volume create mysql-data列出 Docker 已知的所有卷 docker volume ls4.运行一个 MySQL Docker 容器 docke…

windows 安装 mongodb 数据库

软件下载 访问官方的下载地址: https://www.mongodb.com/try/download/community ,然后选择对应的版本进行下载 下载好了之后双击进行安装 软件安装 1、点击 next 点击下一步 2、勾选接受协议,点击 next 3、第三页有两个选项&#x…

vue 项目中使用阿里巴巴矢量图标库

1.网址:https://www.iconfont.cn/ 2.手动创建自己的项目图标库 选中图标 → 添加入库(点击购物车)→ 完成后点击上方菜单栏的购物车 → 添加至项目(没有则新建项目)→ 自动打开项目图标库 → 点击下载至本地 → 点击de…

STM32CubeIDE(串口)

目录 一、轮询模式 1.1 配置USART2为异步模式 1.2 500ms发送一次消息 1.3 通信结果 1.4 串口控制LED 二、中断收发 2.1 开启中断 2.2 中断发送接收 2.2.1 中断发送只需要调用接口 2.2.2 中断接收 2.3 实验结果 三、DMA模式与收发不定长数据 3.1 DMA通道配置 3.2 DMA…

Libmodbus在VS2017下的编译

Libmodbus在VS2017下的编译 1. Libmodbus在VS2017下的编译 1. Libmodbus在VS2017下的编译 原文链接:https://blog.csdn.net/weixin_45790559/article/details/105092860 1、打开文件路径:D:\libmodbus-master\src\win32\configure.js; 生成config.h和…

打家劫舍系列

class Solution { public:int dp[105];//dp[i]表示偷取前i个房间获取的最大值int rob(vector<int>& nums) {// // dp[i][0];不偷取第i间房&#xff0c;偷取前i-1间房的最大值// //dp[i][1];偷取第i间房&#xff0c;偷取前i间房的最大值// memset(dp,0,siz…

九耶:有了 for 循环 为什么还要 forEach ?

for循环和forEach都是用于遍历数组或迭代器中的元素&#xff0c;但它们在语法和功能上有一些区别。 1. 语法不同: for循环需要手动控制迭代的起始和结束条件&#xff0c;需要编写迭代器的控制逻辑&#xff0c;而forEach则是一个数组对象的方法&#xff0c;具有更简洁的语法。 …

企业转型中,如何区别数据信息化和数字化

数据信息化是将数据转化为有用的信息&#xff0c;并通过信息技术和系统来支持决策、创新和价值创造的过程。 关于派可数据 商业智能BI可视化分析平台&#xff1a; 一、数据信息化涉及的几个方面 数据采集和整合&#xff1a;通过各种方式和渠道收集数据&#xff0c;并将不同来…

C++ 输入字符串函数cin.getline()

1.函数作用 接受一个字符串&#xff0c;可以接收空格并输出。 2.函数的完整形式 cin.getline(字符数组名,字符个数,结束标志) 第三个参数可以省略&#xff0c;当第三个参数省略之后&#xff0c;系统默认为’\0’。 若指定参数“字符个数”为n&#xff0c;则利用cout函数输出…

数据结构【绪论】

数据结构入门级 第一章绪论 什么是数据结构&#xff1f;什么是数据类型&#xff1f; 程序数据结构算法 一、基本概念&#xff1a; 数据&#xff1a;指所有能被计算机处理的&#xff0c;无论图、文字、符号等。数据元素&#xff1a;数据的基本单位&#xff0c;通常作为整体考…

一文看懂FIFO!

什么是FIFO&#xff1f; FIFO: First in, First out 代表先进的数据先出 &#xff0c;后进的数据后出。 为什么需要FIFO&#xff1f; FIFO存储器是系统的缓冲环节&#xff0c;如果没有FIFO存储器&#xff0c;整个系统就不可能正常工作。 FIFO的功能可以概括为 &#xff0…

《动手学深度学习》——第二章习题及自写答案

文章目录 2.1 数据操作练习1练习2 2.2 数据预处理练习1练习2 2.3 线性代数练习1练习2练习3练习4练习5练习6练习7练习8 2.4 微积分练习1练习2练习3练习4 2.5 自动微分练习1练习2练习3练习4练习5 2.6 概率练习1练习2练习2练习2 2.1 数据操作 练习1 运⾏本节中的代码。将本节中的…

路飞IT黑金实战项目教学

正在代理路飞IT全学科实战项目5年黑金卡 (订阅本专栏即可赠送5年黑金会员卡&#xff0c;订阅前联系博主更有折享优惠&#xff0c;每篇文章下都有联系方式) 包含Python开发、Linux云计算、前端开发、Golang开发、AI & 数据分析、网络安全、技术生涯、C语言、JAVA开发、测试…

elasticsearch查询操作(API方式)

说明&#xff1a;elasticsearch查询操作除了使用DSL语句的方式&#xff08;参考&#xff1a;http://t.csdn.cn/k7IGL&#xff09;&#xff0c;也可以使用API的方式。 准备 使用前需先导入依赖 <!--RestHighLevelClient依赖--><dependency><groupId>org.ela…

GitHub发布Copilot Chat公测版,助力开发者编写代码

近日微软GitHub推出了Copilot Chat 的公开测试版&#xff0c;而这个版本不仅仅局限于“代码缺省补充”与“代码纠错”&#xff0c;还能直接基于上文&#xff0c;自动联想出后文。 据了解&#xff0c;该AI工具主要用来助力开发者编写代码&#xff0c;可直接集成到开发者的桌面 …

如何将ubuntu LTS升级为Pro

LTS支持周期是5年&#xff1b; Pro支持周期是10年。 Ubuntu Pro专业版笔记 步骤&#xff1a; 打开“软件和更新” 可以看到最右侧的标签是Ubuntu Pro。 在没有升级之前&#xff0c;如果使用下面两步&#xff1a; sudo apt updatesudo apt upgrade 出现如下提示&#xff…

Zabbix邮件报警(163网易邮箱)

目录 一、电脑登录网易邮箱配置 二、Server端安装配置邮件服务器 邮箱查看 三、编辑zabbix_server.conf 引用邮件脚本 查看邮件 五、配置zabbix web监控项邮件报警 操作思路 Server.zabbix.com web操作 确认报警媒介信息 配置zabbix中的用户所使用的报警媒介类型以及接收邮…