【Java】面向对象 OOP

文章目录

  • 面向对象OOP概述
  • 一、对象内存相关
  • 二、类的成员之一:成员变量(Field)
    • 2.1 如何声明成员变量
    • 2.2 成员变量 与 局部变量
  • 三、类的成员之一:成员方法(Method)
    • 3.1 方法调用内存分析
    • 3.2 方法的重载
    • 3.3 可变个数的形参
    • 3.4 形参与实参:参数传递机制->值传递
  • 四、 类的成员之一:构造(Constructor)
  • 五、OOP三大特性之一:封装
    • 如何实现封装
  • 六、OOP三大特性之一:继承
  • 七、OOP三大特性之一:多态
  • 总结


面向对象OOP概述

OOP
OOP为组成单位,
的内部由成员构成,
成员包括:成员变量(Field) 与 成员方法(Method)

  • :相当于一个模板/蓝图
    • 相同特征事物的抽象描述(抽象上的人)
  • 对象:通过这个蓝图 创建(new)出来的 “实例(instance)” 。
    • 可以new很多实例,每个实例都是独立的。
    • 对象是类的一个实例,必然具备该类事物的属性和行为(即方法)。
    • (具体的人)
  • OOP设计 -> 类的设计 -> 类的成员设计

一、对象内存相关

  1. Heap:
    new 出来 对象的数据 都放这, 存储对象的数据

  2. Stack:
    存放 引用类型 地址(指向堆空间数据)
    以及 值类型 的具体值

  3. 方法区 Method Area:
    常量、静态变量、class字节码…

二、类的成员之一:成员变量(Field)

2.1 如何声明成员变量

  1. 位置要求:必须在类中,方法外
  2. 修饰符 : private、缺省、protected、public 还有 static final
  3. 初始化值:可以显式赋值,也可以不赋值,使用默认值
    4.当一个对象被创建时,会对其中各种类型的成员变量自动进行初始化赋值

2.2 成员变量 与 局部变量

与类 有关 成员变量
根据类的创建而创建 , 类or 对象 消失而消失
在类内,方法外

与方法 有关 局部变量
方法执行到存在 , 方法执行完毕跟随方法一起消失
在类内的方法内

2.2

static可以将成员变量分为两大类,静态变量非静态变量
其中静态变量又称为类变量,非静态变量又称为实例变量或者属性。

相同点:

  1. 变量声明的格式相同: 数据类型 变量名 = 初始化值
  2. 变量必须先声明、后初始化、再使用。
  3. 变量都有其对应的作用域。只在其作用域内是有效的

不同点:

  • 声明位置和方式
    • 实例变量:在类中方法外
    • 局部变量:在方法体{}中或方法的形参列表、代码块中
  • 在内存中存储的位置不同
    • 实例变量:堆
    • 局部变量:栈
  • 生命周期
    • 实例变量:和对象的生命周期一样,随着对象的创建而存在,随着对象被GC回收而消亡, 而且每一个对象的实例变量是独立的。
    • 局部变量:和方法调用的生命周期一样,每一次方法被调用而在存在,随着方法执行的结束而消亡, 而且每一次方法调用都是独立。
  • 作用域
    • 实例变量:通过对象就可以使用,本类中直接调用,其他类中“对象.实例变量”
    • 局部变量:出了作用域就不能使用
  • 修饰符
    • 实例变量:public,protected,private,final等
    • 局部变量:final
  • 默认值
  • 实例变量:有默认值
  • 局部变量:没有,必须手动初始化。其中的形参比较特殊,靠实参给它初始化。
    2.21

三、类的成员之一:成员方法(Method)

  1. 方法是类或对象行为特征的抽象,用来完成某个功能操作。在某些语言中也称为函数或过程。
  2. 将功能封装为方法的目的是,可以实现代码重用,减少冗余,简化代码
  3. Java里的方法不能独立存在,所有的方法必须定义在类里。

3.1 方法调用内存分析

  • 方法没有被调用的时候,都在方法区中的字节码文件(.class)中存储。
  • 方法被调用的时候,需要进入到内存中运行。
    • 方法每调用一次就会在栈中有一个入栈动作,即
    • 给当前方法开辟一块独立的内存区域,用于存储当前方法的局部变量的值。
    • 当方法执行结束后,会释放该内存,称为出栈,如果方法有返回值,就会把结果返回调用处,如果没有返回值,就直接结束,回到调用处继续执行下一条指令。
  • 栈结构:先进后出,后进先出

3.2 方法的重载

方法名相同,参数列表不同(个数、类型),与修饰符、返回值类型无关

重载方法调用:
JVM通过方法的参数列表,调用匹配的方法。
先找个数、类型最匹配的
再找个数和类型可以兼容的,如果同时多个方法可以兼容将会报错

3.3 可变个数的形参

在JDK 5.0 中提供了Varargs(variable number of arguments)机制。
即当定义一个方法时,形参的类型可以确定,但是形参的个数不确定,那么可以考虑使用可变个数的形参
格式:

//JDK5.0:采用可变个数形参来定义方法,传入多个同一类型变量
public static void test(int a ,String...books);

举例:

需求:n个字符串进行拼接,每一个字符串之间使用某字符进行分割,如果没有传入字符串,那么返回空字符串""

public class StringTools {String concat(char seperator, String... args){String str = "";for (int i = 0; i < args.length; i++) {if(i == 0){str += args[i];}else{str += seperator + args[i];}}return str;}
}//测试:StringTools tools = new StringTools();System.out.println(tools.concat('-'));System.out.println(tools.concat('-',"hello"));System.out.println(tools.concat('-',"hello","world"));System.out.println(tools.concat('-',"hello","world","java"));

3.4 形参与实参:参数传递机制->值传递

Java里方法的参数传递方式只有一种:值传递
即将实际参数值的副本(复制品)传入方法内,而参数本身不受影响。

  • 形参是基本数据类型:将实参基本数据类型变量的“数据值”传递给形参
  • 形参是引用数据类型:将实参引用数据类型变量的“地址值”传递给形参

四、 类的成员之一:构造(Constructor)

new完对象时,所有成员变量都是默认值,用构造器可以为当前对象的某个或所有成员变量直接赋值。
没写构造,java 会提供一个默认的无参构造

构造器的修饰符只能是权限修饰符,不能被其他任何修饰。
比如,不能被static、final、synchronized、abstract、native修饰,不能有return语句返回值。

五、OOP三大特性之一:封装

如何实现封装

实现封装性 即 控制类或成员的可见性
修
具体修饰的结构:
外部类:public、缺省
成员变量、成员方法、构造器、成员内部类:public、protected、缺省、private

一般成员实例变量都习惯使用private修饰,再提供相应的public权限的get/set方法访问。
对于final的实例变量,不提供set()方法。
对于static final的成员变量,习惯上使用public修饰。

六、OOP三大特性之一:继承

is-a 的关系 , 父类与子类 , JAVA是单继承,多实现

七、OOP三大特性之一:多态

多态(Polymorphism) 在继承的前提条件下,实现多态。 即 “ 父类引用指向子类对象 ”
编译时,看左边;运行时,看右边。


总结

1、在类的属性中,可以有哪些位置给属性赋值?
① 默认初始化
② 显式初始化
③ 构造器中初始化
④ 通过"对象.属性"或"对象.方法"的方式,给属性赋值

  1. JavaBean

    • 类是公共的
    • 有一个无参的公共的构造器
    • 有属性,且有对应的get、set方法
  2. UML类图
    UML(Unified Modeling Language,统一建模语言),用来描述软件模型和架构的图形化语言。
    UML类图可以更加直观地描述类内部结构(类的属性和操作)以及类之间的关系(如关联、依赖、聚合等)。
    3

  • +表示 public 类型, - 表示 private 类型,#表示protected类型
  • 方法的写法: 方法的类型(+、-) 方法名(参数名: 参数类型):返回值类型
  • 斜体表示抽象方法或类。

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

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

相关文章

NAS入门(学习笔记)

文章目录 AutoMLNAS初期NAS当前NAS框架One-Shot NAS权重共享策略 Zero-Shot NASZen-NASNASWOTEPENAS 参考资料 AutoML 深度学习使特征学习自动化 AutoML 使深度学习自动化 自动化机器学习 (automated machine learning) 是一种自动化的数据驱动方法, 并做出一系列决策。 按…

第2、3次作业

题目1&#xff1a; 基于域名[www.openlab.com](http://www.openlab.com)可以访问网站内容为 welcome to openlab!!! 题目2&#xff1a; 给该公司创建三个子界面分别显示学生信息&#xff0c;教学资料和缴费网站&#xff0c;基于[www.openlab.com/student](http://www.openlab.c…

RIP【新华三与华为区别】

【介绍】 rip分为rip 1 与 rip 2 &#xff0c;rip 2 是对 rip 1 的一种升级&#xff0c;rip 2 可以进行认证等功能 【命令】 新华三&#xff1a; [HC3-R1] rip #启用rip [HC3-R1-rip] version 2 #告知rip 版本号 [HC3-R1-rip] network 192.168.1.0 #宣告其网段 [HC3-R1-rip] …

【python】py-spy 实时显示python进程内的线程堆栈CPU消耗 python CPU消耗分析

安装 pip install py-spy AI调用源码&#xff0c;红色调用时&#xff0c;python进程CPU 100% 启动程序&#xff0c;输入问题&#xff0c;观察CPU top sudo .local/bin/py-spy top --pid 7150 可以看到&#xff0c;此时与显卡交互占用了绝大部分CPU&#xff0c;有点死循环检测…

AI大模型预先学习笔记一:transformer和fine tune技术介绍

一、商业观点&#xff1a;企业借助大模型获得业务增长可能 二、底层原理&#xff1a;transformer 1&#xff09;备注 ①下面每个步骤都是自回归的过程&#xff08;aotu-regressive&#xff09;&#xff1a;已输出内容的每个字作为输入&#xff0c;一起生成下一个字 ②合起来就…

全自动网页制作系统流星全自动网页生成系统重构版输入网页信息即可制作

源码优点: 所有模板经过精心审核与修改&#xff0c;完美兼容小屏手机大屏手机&#xff0c;以及各种平板端、电脑端和360浏览器、谷歌浏览器、火狐浏览器等等各大浏览器显示。 免费制作 为用户使用方便考虑&#xff0c;全自动网页制作系统无需繁琐的注册与登入&#xff0c;直接…

CUTANA™ CUTRUN Assays ——实现超敏基因组定位

蛋白质和核酸是构成生命体最为重要的两类生物大分子&#xff0c;二者间的相互作用一直是分子生物学研究的中心问题之一。研究细胞内蛋白质-DNA相互作用的常用方法是染色质免疫沉淀(Chromatin Immunoprecipitation, ChIP) &#xff0c;同时ChIP还常被用于确定基因组上与组蛋白修…

MybatisPlus框架--如何让公共字段自动更新插入

目录 建一个springboot项目 引入mybatisplus依赖 功能区 如何让公共字段自动更新插入&#xff08;createTime&#xff0c;updateTime&#xff09; 1.创建表 2.项目 3.Application 4.application.yml 5.pom.xml 6.entity 7.mapper 8.service 9.service下的impl 10…

使用scipy处理图片——滤镜处理

大纲 black_tophatwhite_tophatconvolvecorrelategaussian_filtergaussian_laplacemaximum_filtermedian_filterminimum_filterpercentile_filterprewittrank_filtersobelspline_filteruniform_filter基础代码代码仓库 在《使用numpy处理图片——模糊处理》一文中&#xff0c;我…

【绩效考核】分享:海底捞的考核方法

很多企业都希望学习海底捞的管理方法。在绩效考核方面&#xff0c;海底捞的“不考核利润、考核满意度”始终是一大特色。它重视门店管理者的绩效考核&#xff0c;并将客户满意度作为绩效考核的核心&#xff0c;这对其他企业是否具有借鉴意义&#xff1f;海底捞始终秉承“服务至…

MySQL——性能优化与关系型数据库

文章目录 什么是性能&#xff1f;什么是关系型数据库&#xff1f;数据库设计范式 常见的数据库SQL语言结构化查询语言的六个部分版本 MySQL数据库故事历史版本5.6/5.7差异5.7/8.0差异 什么是性能&#xff1f; 吞吐与延迟&#xff1a;有些结论是反直觉的&#xff0c;指导我们关…

ioctl操作实现

ioctl&#xff0c;避免使用三个全局变量&#xff0c;因此写进一个结构体里面 ioctl对文件属性进行操作 #include <linux/module.h> #include <linux/kernel.h> #include <linux/fs.h> #include <linux/cdev.h> #include <asm/uaccess.h>#define…

微信商家转账到零钱怎么开通?场景模板

商家转账到零钱是什么&#xff1f; 使用商家转账到零钱这个功能&#xff0c;可以让商户同时向多个用户的零钱转账。商户可以使用这个功能用于费用报销、员工福利发放、合作伙伴货款或分销返佣等场景&#xff0c;提高效率。 商家转账到零钱的使用场景有哪些&#xff1f; 商家…

pytest -- 进阶使用详解

pytest-html⽣成报告 Pytest-HTML 是⼀个插件&#xff0c;它可以⽣成漂亮且易于阅读的 HTML 测试报告。 pytest-html ⽣成报告的步骤 ① 安装 pytest-html 插件&#xff1a; pip install pytest-html ② 运⾏测试并⽣成报告&#xff1a; file name:main.pyimport pytest&qu…

Spring IoC 和 DI

文章目录 1. 什么是 Spring2. 什么是 IoC3. 什么是 DI4. IoC & DI 使用5. 获取 Bean 的方式5.1 根据类型获取 bean5.2 根据名称获取 bean5.3 获取bean对象的其他方式5.4 五大注解的关联 6. 方法注解7. 扫描路径8. Bean 的名称9. DI 详解9.1 属性注入9.2 构造方法注入9.3 Se…

代码随想录算法训练营第三十六天|435. 无重叠区间、763.划分字母区间、56. 合并区间

题目&#xff1a;435. 无重叠区间 文章链接&#xff1a;代码随想录 视频链接&#xff1a;LeetCode:435.无重叠区间 题目链接&#xff1a;力扣题目链接 图释&#xff1a; class Solution { public:static bool cmp(const vector<int>&a, const vector<int>…

HDFS读写数据流程、NameNode与DataNode工作机制

文章目录 HDFS 写数据流程HDFS 读数据流程HDFS 节点距离计算HDFS 机架感知HDFS NN和2NN工作机制HDFS FsImage镜像文件HDFS Edits编辑日志HDFS 检查点CheckPoint时间设置HDFS 退役旧数据节点HDFS DataNode多目录配置HDFS DataNode工作机制HDFS 数据完整性HDFS 掉线时限参数设置 …

Configure Virtual Serial Port Driver串口模拟器VSPD

背景 串口通讯想必做硬件开发和软件的人来说都相当了解&#xff0c;以前的电脑&#xff0c;基本标配都包含一个串口。但现在的电脑&#xff0c;基本都没有配置串口了&#xff0c;如果要使用串口的功能&#xff0c;基本就要用一个USB转串口的硬件模块。 虚拟串口&#xff08;虚…

[oeasy]python005_退出游乐场_重启游乐场_系统态shell_应用态_quit

0005_ 退出游乐场_重启游乐场_系统态shell 退出终端_重启游乐场_shell_quit &#x1f94a; Python 回忆 上次 了解了 python进入了 python 游乐场 在游乐场 可以做 简单的计算还可以做 乘方运算 数字特别大之后 游乐场 会迟疑一下不过 最终 还是能算出来 可以让数字 更大一…

【特征工程】分类变量:BinaryEncoder二进制编码方法详解

Binary Encoding&#xff1a;二进制编码方法详解 Binary Encoding是将每个整数表示为二进制数&#xff0c;然后按位拆分为多个二进制变量。这种方法旨在减少维度&#xff0c;同时避免了One-Hot Encoding的高维稀疏问题。 Binary encoding for categorical variables, similar …