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

面向对象基础

文章目录

  • 面向对象基础
    • 一.面向对象介绍
    • 二.设计对象并使用
    • 三.封装
    • 四.This关键字
    • 五.构造方法
    • 六.标准的Javabean类
    • 七.对象内存图
    • 八.基本数据类型和引用数据类型
    • 九.成员和局部

面向对象基础

一.面向对象介绍

面向:拿,找

对象:能干活的东西

面向对象编程:找东西来做对应的事情

重点:

  • 学习获取已有对象并使用,例如:Scanner
  • 学习如何自己设计对象并使用

二.设计对象并使用

类(设计图):是对象共同特征的描述

对象:是真实存在的具体东西

所以,在Java中,必须先设计类,才能获得对象

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

定义类的注意事项:

  • 用来描述一类事务的类,专业叫做Javabean类,Javabean类中是不写main方法的

  • 写main方法的类叫做测试类,在测试类中创建Javabean类的对象并使用

  • 类名首字母建议大写,需要见名知意,驼峰模式

  • 一个java文件中可以定义多个class类,且只能有一个类是public修饰,而且public修饰的类名必须成为代码文件名

  • 实际开发中,建议一个java文件中只定义一个class类

  • 成员变量的完整定义格式:修饰符 数据类型 变量名 = 初始化值; 一般无需指定初始化值,存在默认值

在这里插入图片描述

三.封装

面向对象三大特征:

  • 封装

  • 继承

  • 多态

封装的作用:告诉我们如何正确的设计对象的属性和行为

封装的原则:对象代表什么,就得封装对应的数据,并提供数据对应的行为

举一个例子:人画圆,这里有两个对象,一个是人对象,一个是圆对象

那么请问画圆的这个行为应该是人的还是圆的?

答案是:圆的

因为,半径数据是圆的属性,而画圆需要用到半径,所以,画圆的行为属于圆的

为了避免外界对 对象的属性进行不合理的操做,例如 a.age = -18;需要学习一个关键字:private

private:

  • 权限修饰符

  • 可以修饰成员(属性和行为)

  • 被private修饰的成员只能在本类中才能被访问

针对private修饰的成员变量,如果需要被其他类使用,提供

setXxx(参数)方法,用于给成员变量赋值,用public修饰

getXxx(参数)方法,用于获取成员变量的值,用public修饰

四.This关键字

成员变量:定义在方法的外面,类的里面

局部变量:定义在方法的里面

就近原则:谁离我近,我就用谁

在这里插入图片描述

作用:区分成员变量和局部变量

this.变量,代表的就是成员变量

this的内存原理:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

五.构造方法

作用:在创建对象的时候给成员变量进行赋值

格式:

在这里插入图片描述

特点:

  • 方法名和类名相同
  • 没有返回值类型,也没有void
  • 没有具体的返回值

分类:无参构造和全参构造

执行时机:

  • 在创建对象的时候,由虚拟机调用,不能手动调用
  • 每创建一次对象,就调用一次构造方法

注意事项:

  • 在定义方面:

    • 如果没有定义,默认给一个无参构造
    • 如果已经定义,以定义的为主
  • 构造方法的重载

    • 有参构造和无参构造,方法名相同,参数列表不同
  • 推崇的方式

    • 无论是否使用,有参构造和无参构造都要写上

六.标准的Javabean类

  • 类名需要见名知意
  • 成员变量使用private修饰
  • 提供至少两个构造方法
  • 成员方法,提供每一个成员变量对应的get/set方法,如果还有其他行为也要写上

七.对象内存图

每一款软件在运行的时候,都是需要占用一块内存区域的

java也不例外,在运行的时候,虚拟机也会占用一块内存空间,为了更好的利用这块内存,jvm将这块内存分为了5个部分
在这里插入图片描述

从JDK8开始,取消方法区,新增元空间,把原来方法区的多种功能进行划分,有的功能放到了堆中,有的功能放到了元空间中

在这里插入图片描述

但是叫什么无所谓,重要的是加载完了之后,代码该如何运行,暂时还叫方法区

当运行一个类的时候,这个类的字节码文件就会加载到方法区当中临时存储

在这里插入图片描述

一个对象的内存图:

在这里插入图片描述

在创建这个类的对象时,内存至少做以下七件事

1.加载class文件

2.申明局部变量

3.在堆内存中开辟一个空间

4.默认初始化

5.显示初始化

6.构造方法初始化

7.将堆内存中的地址值赋值给左边的局部变量

在这里插入图片描述

两个对象的内存图:

在这里插入图片描述

两个引用指向同一个对象:

在这里插入图片描述

八.基本数据类型和引用数据类型

从内存的角度解释:

基本数据类型:

数据值是存储在自己的空间中

特点:

赋值给其他变量,赋值的是真实的数据值

在这里插入图片描述

引用数据类型:

数据值存储在其他空间中,自己空间中存储的是地址值

特点:

赋值给其他变量,赋值的是地址值

在这里插入图片描述

九.成员和局部

在这里插入图片描述

相关文章:

面向对象基础

文章目录 面向对象基础一.面向对象介绍二.设计对象并使用三.封装四.This关键字五.构造方法六.标准的Javabean类七.对象内存图八.基本数据类型和引用数据类型九.成员和局部 面向对象基础 一.面向对象介绍 面向:拿,找 对象:能干活的东西 面向对象编程:找东西来做对应的事情 …...

spring集成mybatis

1、新建一个javaEE web项目 2、加入相关依赖的坐标 <dependencies><!--数据系列&#xff1a;mybatis,mysgl,druid数据源,junit--><!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --><dependency><groupId>mysql</grou…...

抽象轻松c语言

目 c语言 c程序 c语言的核心在于语言&#xff0c;语言的作用是进行沟通&#xff0c;人与人之间的信息交换 人与人之间的信息交换是会有信息空白&#xff08;A表达信息&#xff0c;B接受信息&#xff0c;B对信息的处理会与A所以表达的信息具有差距&#xff0c;这段差距称为信…...

Redis布隆过滤器原理

其实布隆过滤器本质上要解决的问题&#xff0c;就是防止很多没有意义的、恶意的请求穿透Redis&#xff08;因为Redis中没有数据&#xff09;直接打入到DB。它是Redis中的一个modules&#xff0c;其实可以理解为一个插件&#xff0c;用来拓展实现额外的功能。 可以简单理解布隆…...

写代码时候的命名规则、命名规范、命名常用词汇

版权声明 这个大部分笔记是观看up主红桃A士的视频记录下来的&#xff0c;因为本人在学习的过程中也经常出现类似的问题&#xff0c;并且觉得Up主的视频讲解很好&#xff0c;做此笔记反复学习&#xff0c;若有侵权请联系删除&#xff0c;此推荐视频地址&#xff1a;【改善丑陋的…...

Linux之iptables防火墙

一.网络安全技术 ①入侵检测系统&#xff08;Intrusion Detection Systems&#xff09;&#xff1a;特点是不阻断任何网络访问&#xff0c;量化、定位来自内外网络的威胁情况&#xff0c;主要以提供报警和事后监督为主&#xff0c;提供有针对性的指导措施和安全决策依据,类 似于…...

启动服务报错:Command line is too long Shorten command line for xxx or also for Spri

ommand line is too long. Shorten command line for ProjectApprovalApplication or also for Spring Boot default configuration. 启动springboot 项目的时候报错 解决方案&#xff1a; 点击提示中的&#xff1a;default&#xff1a;然后在弹出窗口中选择&#xff1a;JAR xx…...

docker安装elasticsearch、kibana

安装过程中&#xff0c;遇到最大的问题就是在安装kibana的时候发现 一直连接不上 elasticsearch。最后解决的问题就是 我通过 ifconfig en0 | grep inet| awk {print $2} 在mac中找到本机的ip&#xff0c;然后去到kibana容器中 修改 vi config/kibana.yml中的elasticsearch.hos…...

前端 CSS - 如何隐藏右侧的滚动条 -关于出现过多的滚动条导致界面不美观

1、配置 HTML 标签&#xff0c;隐藏右侧的滚动条 CSS 配置&#xff1a;下面两个一起写进进去&#xff0c;适配 IE、火狐、谷歌浏览器 html {/*隐藏滚动条&#xff0c;当IE下溢出&#xff0c;仍然可以滚动*/-ms-overflow-style:none;/*火狐下隐藏滚动条*/overflow:-moz-scroll…...

2.神经网络的实现

创建神经网络类 import numpy # scipy.special包含S函数expit(x) import scipy.special # 打包模块 import pickle# 激活函数 def activation_func(x):return scipy.special.expit(x)# 用于创建、 训练和查询3层神经网络 class neuralNetwork:# 初始化神经网络def __init__(se…...

合宙Air724UG LuatOS-Air LVGL API控件-键盘 (Keyboard)

键盘 (Keyboard) LVGL 可以添加触摸键盘&#xff0c;但是很明显&#xff0c;使用触摸键盘的话必须要使用触摸的输入方式&#xff0c;否则无法驱动键盘。 示例代码 function keyCb(obj, e)-- 默认处理事件lvgl.keyboard_def_event_cb(keyBoard, e)if(e lvgl.EVENT_CANCEL)the…...

pytorch深度学习实践

B站-刘二大人 参考-PyTorch 深度学习实践_错错莫的博客-CSDN博客 线性模型 import numpy as np import matplotlib.pyplot as pltx_data [1.0, 2.0, 3.0] y_data [2.0, 4.0, 6.0]def forward(x):return x * wdef loss(x, y):y_pred forward(x)return (y_pred - y) ** 2# …...

直方图反向投影(Histogram Backprojection)

直方图反向投影&#xff08;Histogram Backprojection&#xff09;是一种在计算机视觉中用于对象检测和图像分割的技术。它的原理基于图像的颜色分布&#xff0c;允许我们在一幅图像中找到与给定对象颜色分布相匹配的区域。这个技术常常用于图像中的目标跟踪、物体识别和图像分…...

day32 泛型 数据结构 List

一、泛型 概述 JDK1.5同时推出了两个和集合相关的特性&#xff1a;增强for循环&#xff0c;泛型 泛型可以修饰泛型类中的属性&#xff0c;方法返回值&#xff0c;方法参数&#xff0c; 构造函数的参数 Java提供的泛型类/接口 Collection, List, Set&#xff0c;Iterator 等 …...

DW-AHB Central DMAC

文章目录 AHB Central DMAC —— Design Ware AHB Central DMAC —— Design Ware AHB(Adavenced High-performace BUS) Central DMAC(Direct Memory Access Controller) : 一个高性能总线系统。 作用&#xff1a;在嵌入式系统种连接高速设备&#xff0c;如处理器内存&#x…...

JavaScript设计模式(四)——策略模式、代理模式、观察者模式

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全干发展 &#x1f4c3;个人状态&#xff1a; 研发工程师&#xff0c;现效力于中国工业软件事业 &#x1f680;人生格言&#xff1a; 积跬步…...

JS画布的基本使用

直线 <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title></title> <style> #myname{ border: 1px solid red; /* background: linear-gradient(to righ…...

c++ set/multiset

set/multiset 集合&#xff0c;一个单个&#xff0c;一个多个(multi)。两个库都是"set"。 https://blog.csdn.net/fckbb/article/details/130917681 对象创建 set(const Pred& compPred()&#xff0c;const A& alA()):创建空集合。set(const set& x):…...

多线程与高并发——并发编程(4)

文章目录 四、阻塞队列1 基础概念1.1 生产者消费者概念1.2 JUC阻塞队列的存取方法2 ArrayBlockingQueue2.1 ArrayBlockingQueue的基本使用2.2 生产者方法实现原理2.2.1 ArrayBlockingQueue的常见属性2.2.2 add方法2.2.3 offer方法2.2.4 offer(time,unit)方法2.2.5 put方法2.3 消…...

设计模式之建造者模式

文章目录 盖房项目需求传统方式解决盖房需求传统方式的问题分析建造者模式概述是建造者模式的四个角色建造者模式原理类图建造者模式的注意事项和细节 盖房项目需求 需要建房子&#xff1a;这一过程为打桩、砌墙、封顶房子有各种各样的&#xff0c;比如普通房&#xff0c;高楼…...

Unity3D中Gfx.WaitForPresent优化方案

前言 在Unity中&#xff0c;Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染&#xff08;即CPU被阻塞&#xff09;&#xff0c;这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案&#xff1a; 对惹&#xff0c;这里有一个游戏开发交流小组&…...

postgresql|数据库|只读用户的创建和删除(备忘)

CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...

2021-03-15 iview一些问题

1.iview 在使用tree组件时&#xff0c;发现没有set类的方法&#xff0c;只有get&#xff0c;那么要改变tree值&#xff0c;只能遍历treeData&#xff0c;递归修改treeData的checked&#xff0c;发现无法更改&#xff0c;原因在于check模式下&#xff0c;子元素的勾选状态跟父节…...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包

文章目录 现象&#xff1a;mysql已经安装&#xff0c;但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时&#xff0c;可能是因为以下几个原因&#xff1a;1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

C++八股 —— 单例模式

文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全&#xff08;Thread Safety&#xff09; 线程安全是指在多线程环境下&#xff0c;某个函数、类或代码片段能够被多个线程同时调用时&#xff0c;仍能保证数据的一致性和逻辑的正确性&#xf…...

如何理解 IP 数据报中的 TTL?

目录 前言理解 前言 面试灵魂一问&#xff1a;说说对 IP 数据报中 TTL 的理解&#xff1f;我们都知道&#xff0c;IP 数据报由首部和数据两部分组成&#xff0c;首部又分为两部分&#xff1a;固定部分和可变部分&#xff0c;共占 20 字节&#xff0c;而即将讨论的 TTL 就位于首…...

【Oracle】分区表

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”

2025年#高考 将在近日拉开帷幕&#xff0c;#AI 监考一度冲上热搜。当AI深度融入高考&#xff0c;#时间同步 不再是辅助功能&#xff0c;而是决定AI监考系统成败的“生命线”。 AI亮相2025高考&#xff0c;40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕&#xff0c;江西、…...

AGain DB和倍数增益的关系

我在设置一款索尼CMOS芯片时&#xff0c;Again增益0db变化为6DB&#xff0c;画面的变化只有2倍DN的增益&#xff0c;比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析&#xff1a; 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...