面向对象修炼手册(一)(类与对象)(Java宝典)

news2024/11/24 6:54:47

🌈 个人主页:十二月的猫-CSDN博客
🔥 系列专栏: 🏀面向对象修炼手册

💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 

目录

思想

代理和团体

1 基本概念

1.1 变量

1.1.1 静态变量

1.1.2 成员变量

1.1.3 静态变量和普通变量的区别

1.2 方法

1.2.1 静态成员方法

1.2.2 普通成员方法

1.2.3 静态方法和普通方法的区别

1.3 常量

1.4 修饰符

1.4.1 Java访问修饰符

对象

1 基本概念

1.1 概念

1.2 对象性质(五大性质)

1.3 对象创建

1.3.1 单一对象创建

1.3.2 对象数组创建

1.4 对象创建与声明

1.5 对象和类的关系

1.6 对象和实例的关系

面向对象编程

1 基本概念

2 面向对象合理性

2.1 生活中解决问题方式

2.2 面向对象思想

总结


思想

代理和团体

1、解决问题就是找到解决问题的人(代理)

2、代理有责任完成任务

3、代理完成任务的细节是隐藏的

1 基本概念

  • 属性:在类中表示这类对象或实体拥有的特性
  • 方法:对象能够执行的操作
  • 静态属性:多个对象共同拥有,共享的数据(可以认为是类拥有,对象之间共享的属性)
  • 静态方法:静态方法是类拥有,可以通过对象使用,也可以通过类使用的一类方法(在后面设计模式中的单例模式中,就用静态方法实现全局访问以及延迟初始化);静态方法只能调用静态变量;构造和析构函数不能是静态成员

1.1 变量

1.1.1 静态变量

  • 静态变量在类中就是静态属性
  • 静态变量在类中是所有对象共享使用
  • 静态变量的初始化具有延迟性(加载类时才初始化)

初始化:

  • 在声明中初始化
static int i = 5;
static int j = 6;
  • 在静态代码块中初始化
static int i;
static int j;
static{
    i = 5;
    j = 6;
}
  •  在静态方法中初始化
  public static void initialize() {
        staticInt = 42;
        staticDouble = 3.14;
        staticBoolean = true;
        staticString = "Hello, World!";
    }
  • 静态变量只能初始化一次
  • 静态变量的初始化只能在类中进行(否则就直接初始化为默认值)

1、静态变量的初始化时机与类的初始化时机紧密相关(final类型的静态变量除外,它编译时初始化)。

2、在类的初始化阶段,java虚拟机执行类的初始化语句,为静态变量赋予初始值、执行静态代码块,所以静态变量的初始化时机即为类的初始化时机

  • 类初始化顺序:父类静态变量 --> 子类静态变量 --> 父类实例变量 --> 子类实例变量 --> 父类构造函数 --> 子类构造函数

1.1.2 成员变量

静态变量属于类(对象的全体),成员变量则属于每一个对象,即每个对象有一个自己的成员变量

1.1.3 静态变量和普通变量的区别

普通变量分为:全局变量、局部变量

静态变量与全局变量:

  • 静态变量只初始化一次,全局变量可以多次初始化
  • 静态变量作用域在该源文件,全局变量在该源程序

静态变量与局部变量:

  • 静态变量只初始化一次,普通变量可以多次初始化
  • 静态变量作用域在该源文件,普通变量在该代码块

1.2 方法

1.2.1 静态成员方法

  • 不能访问非静态属性,只能访问静态属性
  • 类方法可以直接调用,对象也可以调用
  • 没有this操作,因为不存在示例
  • 构造和析构函数不能是静态成员
  • 类拥有,只有一份

1.2.2 普通成员方法

  • 可以访问所有的属性(静态和普通)
  • 在每个对象中都有一份拷贝,但是不属于类
  • 只有对象可以调用,类不可以调用

静态方法只能调用静态方法和静态变量

普通方法能调用普通方法、普通变量、静态方法、静态变量

1.2.3 静态方法和普通方法的区别

static方法在内存中只有一份,而普通方法在每个被调用中都会维持一份拷贝

1.调用对象、引用变量不同

对于静态方法:是使用static关键字修饰的方法,又叫类方法。属于类的,不属于对象,在实例化对象之前就可以通过类名.方法名调用静态方法。(静态属性,静态方法都是属于类的,可以直接通过类名调用)。
A.在静态方法中,可以调用静态方法
B.在静态方法中,不能调用非静态方法
C.在静态方法中,可以引用类变量(即,static修饰的变量)
D.在静态方法中,不能引用成员变量(即,没有static修饰的变量)
E.在静态方法中,不能使用super和this关键字

对于非静态方法:是不含有static关键字修饰的普通方法,又称为实例方法,成员方法。属于对象的,不属于类的。(成员属性,成员方法是属于对象的,必须通过new关键字创建对象后,再通过对象调用)。
A.在普通方法中,可以调用普通方法。
B.在普通方法中,可以调用静态方法
C.在普通方法中,可以引用类变量和成员变量
D.在普通方法中,可以使用super和this关键字

2.调用方法不同

静态方法可以直接调用,类名调用和对象调用。(类名.方法名 / 对象名.方法名)
但是非静态方法只能通过对象调用。(对象名.方法名)

3.生命周期不同

静态方法的生命周期跟相应的类一样长,静态方法和静态变量会随着类的定义而被分配和装载入内存中。一直到线程结束,静态方法和静态属性才会被销毁。(也就是静态方法属于类)
非静态方法的生命周期和类的实例化对象一样长,只有当类实例化了一个对象,非静态方法才会被创建,而当这个对象被销毁时,非静态方法也马上被销毁。(也就是非静态方法属于对象)

1.3 常量

常量是指初始化赋值后不能再改变的变量

java用final定义常量

c++用const定义常量(与此同时,还有define和enum枚举)

// a变量
int a;
// b为常量,10为字面量
final int b = 10;
// str为变量,hello world为字面量
String str = "hello world";

1.4 修饰符

修饰符就是对变量的一些限制、说明符号,起到对变量的约束作用

1.4.1 Java访问修饰符

访问修饰符就是约束变量访问权限的一类符号,用来限制属性和方法所起作用的范围

private:私有的访问权限,仅仅能在类中访问,严格体现封装思想

default:默认访问权限,仅仅在同一个包中共享

protected:受保护访问权限,在同一个包中或不同包的子类中共享

public:公共访问权限,和所有人都可以共享

1、我的东西只能我自己用

2、我的东西可以和我的室友(住在一起)的人一起用

3、我的东西可以和我的室友,或者我的儿子一起用

4、我的东西大家都可以用

对象

1 基本概念

1.1 概念

可以认为是状态行为的结合

  • 状态:描述对象属性、特征
  • 行为:描述对象能进行的操作

对象就是消息的接收器。从对象外部看,只能看到对象的行为

1.2 对象性质(五大性质)

  • 封装性:信息隐藏
  • 自治性:主动数据
  • 通信性:并发
  • 暂存性:作用域/期
  • 永久性:文档串行化

1.3 对象创建

1.3.1 单一对象创建

java:

PlayingCard aCard = new PlayingCard(Diamond, 3);

c++:

PlayingCard * aCard = new PlayingCard(Diamond, 3);

1、java中没有指针的概念,避免了程序员主动对内存管理

2、java中的new意思是创建并返回一个类的对象,所以要用这个类作为容器放这个对象

3、c++中的new也是创建对象,但是它返回的是这个类的地址。因此前面要用指针

1.3.2 对象数组创建
Linklist link[] = new Linklist[2];
for(int i=0;i<2;i++){
    link[i] = new Linklist();
}

1、new创建的是数组对象,此时数组对象里面是没有东西的

2、数组中的元素还要创建并放入 

3、new一次只能创建一个对象

1.4 对象创建与声明

对象声明和创建分离:

Student lihua;
lihua= new Student();

变量声明和创建合一:

Student lihua=new Student();

1.5 对象和类的关系

  • 对象是类的具体化,类是对象的抽象化
  • 对象有两类:1、本身就是对象;2、由类实例化产生的对象
  • 对象是在生活中所见、编程中所操作的事物对象
  • 对象可以是类的实例,类是对象的模板

1.6 对象和实例的关系

  • 实例一定是对象,对象不一定是实例
  • 实例是由类实例化产生的对象
  • 对象包括:实例对象(实例)、非实例对象
  • 实例对象:类实例化产生的对象
  • 非实例对象:本身就是对象,不是类产生的(例如:抽象累、接口等)
Type type = typeof(int);//Type是抽象类,不允许实例化,这里的type是Type类的对象,而非实例化对象(实例)

抽象类不能产生实例,因此这边的type只能是对象,但不是实例对象

class Person{}
class Program
{
    static void Main(string[] args)
    {
        Person person = new Person();//这里person既可以叫做Person类的对象,也可以叫实例化对象(实例)    
    }
}    

 person在这里既是对象又是实例(实例化对象)

面向对象编程

面向对象这词想必大家都听过了,那么面向对象究竟是声明意思?面向对象编程又是什么意思呢?

1 基本概念

面向对象:只关注对象,不关注过程;对象包括:对象和实例对象

对于C语言这种面向过程的语言,在编程中,程序员关注的重点是过程、是解决问题的方法、是一个个函数

面向对象语言,在编程中,程序员关注的重点转变为对象

面向对象编程:通过对象间的消息传递解决任务,完成编程

编程的目的是解决问题;

面向过程的语言直接关注解决问题的方法解决问题

面向对象的语言关注解决问题的对象,通过消息传递解决问题

2 面向对象合理性

编程方法越与人类生活中解决问题的方法接近,则越优秀

2.1 生活中解决问题方式

假如我想买一束玫瑰花(正常):

1、打开百度地图

2、看看哪里有花店

3、去花店找老板买花

4、获得玫瑰花

生活中,我们遇到问题都是找代理去解决的,而不是直接找方法解决

假如我想买一束玫瑰花(不正常):

1、买花种子

2、找土地种花

3、养花

4、获得玫瑰花

这也是解决问题的方式,这种方法不再找代理而是全程自己找方法解决

2.2 面向对象思想

从上面的例子中,我们实际上就能发现面向对象方法的本质:

  • 找代理
  • 消息传递给代理
  • 代理解决问题
  • 我的问题就解决了

这种方法实现在编程中会让程序相比于面向过程的程序有诸多优良性质: 

  • 封装性
  • 复用性
  • 安全性
  • 简洁性
  • 容易理解性.......等等

总结

本系列内容均来自:山东大学-潘丽老师-面向对象开发技术-课程ppt、《设计模式》、《大话设计模式》

如果觉得写的还不错,可以点个赞收藏一下呀~~

祝大家学业、事业、爱情顺利!

天天开心,没有Bug每一天

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

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

相关文章

设施布置之车间布局优化SLP分析

一 物流分析&#xff08;Flow Analysis&#xff09; 的基本方法 1、当物料移动是工艺过程的主要部分时&#xff0c;物流分析就是工厂布置设计的核心工作&#xff0c;也是物料搬运分析的开始。 2、零部件物流是该部件在工厂内移动时所走过的路线&#xff0c; 物流分析不仅要考虑…

鸿蒙开发通信与连接:【@ohos.wifi (WLAN)】

WLAN 说明&#xff1a; 本模块首批接口从API version 6开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 导入模块 import wifi from ohos.wifi;wifi.isWifiActive isWifiActive(): boolean 查询WLAN是否已激活。 需要权限&#xff1a; ohos.p…

java基于ssm+jsp KTV点歌系统

1管理员功能模块 管理员登录&#xff0c;通过填写注册时输入的用户名、密码进行登录&#xff0c;如图1所示。 图1管理员登录界面图 管理员登录进入KTV点歌系统可以查看个人中心、用户管理、歌曲库管理、歌曲类型管理、点歌信息管理等信息。 修改密码&#xff0c;在修改密码页…

【数据分享】《中国改革年鉴》1989-2022

最近老有同学过来询问《中国经济体制改革年鉴》、《中国改革年鉴》这两本数据的关系以及怎么获取这两本本数据。今天就在这里给大家分享一下这三本数据的具体情况。 《中国改革年鉴》由国家发展和改革委员会主管,中国经济体制改革研究会主办,中国经济体制改革杂志社编辑出版,是…

iOS开发工具-网络封包分析工具Charles

一、Charles简介 Charles 是在 Mac 下常用的网络封包截取工具&#xff0c;在做 移动开发时&#xff0c;我们为了调试与服务器端的网络通讯协议&#xff0c;常常需要截取网络封包来分析。 Charles 通过将自己设置成系统的网络访问代理服务器&#xff0c;使得所有的网络访问请求…

Lighthouse浮游菌采样器AC100H及操作使用介绍-中邦兴业

Lighthouse浮游菌采样器AC100H介绍 Lighthouse浮游菌采样器AC100是一款高性能的便携式浮游菌采样器&#xff0c;专为洁净室和无菌环境设计。它基于先进的光学技术和安德森撞击原理&#xff0c;实现了对微小浮游菌的高效采集。采样器内置了HEPA高效过滤器&#xff0c;能够过滤掉…

泽众云真机-平台即将升级支持华为机型HarmonyOS NEXT系统

具小编了解&#xff0c;泽众云真机即将升级支持华为机型HarmonyOS NEXT系统。有些人可能对HarmonyOS NEXT系统了解不多。 之前我们有个银行项目&#xff0c;客户要求测试华为HarmonyOS NEXT系统环境&#xff0c;当时我们云真机尚未有该系统的机型&#xff0c;然后技术人员向华为…

React的服务器端渲染(SSR)和客户端渲染(CSR)有什么区别?

React的服务器端渲染&#xff08;SSR&#xff09;和客户端渲染&#xff08;CSR&#xff09;是两种不同的页面渲染方式&#xff0c;它们各自有不同的特点和适用场景&#xff1a; 服务器端渲染&#xff08;SSR&#xff09; 页面渲染: 页面在服务器上生成&#xff0c;然后将完整的…

如何最简单的方式使用nodejs中的http-server发布轻量级的html网页

1、查看nodejs是否安装。 node 2、设置环境路径。 3、使用npm install http-server -g安装http-server >npm install http-server -g 5、启动http-server服务,查看是否正确安装。 http-server 6、查看是否能够正常运行。 5、创建文件夹&#xff0c;复制html、css、js、in…

使用Rsbuild构建基于Vue3+Vant4开发h5应用

一、介绍 1.1 Vant介绍 Vant 是一个轻量、可定制的移动端组件库&#xff0c;于 2017 年开源。 目前 Vant 官方提供了 Vue 2 版本、Vue 3 版本和微信小程序版本&#xff0c;并由社区团队维护 React 版本和支付宝小程序版本。 使用文档&#xff1a;快速上手 - Vant 4 (vant-u…

35、正则表达式

一、正则表达式命令 正则表达式&#xff1a;匹配的是文本内容&#xff0c;linux的文本三剑客都是针对文本内容。 ​ grep 过滤文本内容 ​ sed 针对文本内容进行增删改查 ​ awk 按行取列 文本三剑客----都是按照行进行匹配。 1.1、grep筛选&#xff1a; grep的作用就是…

Swift Combine — zip和combineLatest的理解与使用

Publisher 上还有一些其他的操作&#xff0c;比如 zip 和 combineLatest&#xff0c;能让我们在时序上对控制多个 Publisher 的结果进行类似 and 和 or 的合并&#xff0c;它们在构建复杂 Publisher 逻辑时也十分有用。 zip Publisher 中的 zip 和 Sequence 的 zip 相类似&am…

VERYCLOUD睿鸿股份亮相亚马逊云科技中国峰会2024

5月30日&#xff0c;为期两天的亚马逊云科技中国峰会在上海世博中心圆满落幕。 多位大咖现场分享&#xff0c;生成式AI时代的数据战略&#xff0c;企业级AI应用&#xff0c;最新技术、产品重磅发布&#xff0c;创新行业解决方案 …… 作为亚马逊云科技的生态合作伙伴&#x…

Docker:认识Docker Host/Container/none网络

文章目录 Docker Host网络认识Docker Host网络实际操作网络模式区别使用场景 Docker Container网络认识Docker Container网络操作实例使用场景 Docker None网络使用场景 Docker Host网络 认识Docker Host网络 Docker容器运行默认会分配独立的Network Namespace隔离子系统&…

计算机网络 交换机的安全配置

一、理论知识 1.交换机端口安全功能介绍 交换机端口安全功能是针对交换机端口进行安全属性的配置&#xff0c;以控制用户的安全接入。主要包括以下两种配置项&#xff1a; ①限制交换机端口的最大连接数&#xff1a;控制交换机端口连接的主机数量&#xff1b;防止用户进行恶…

微信小程序笔记 四!

协同工作和发布 - 协同工作 1. 了解权限管理需求 在中大型的公司里&#xff0c;人员的分工非常仔细&#xff1a;同一个小程序项目&#xff0c;一般会有不同岗位、不同角色的员工同时参与设计与开发。 此时出于管理需要&#xff0c;我们迫切需要对不同岗位、不同角色的员工的…

游戏录屏软件,游戏录屏,3款软件推荐

“最近迷上了电脑游戏&#xff0c;想把自己在游戏中的精彩瞬间给记录下来。看到网上其他人录制的游戏都十分高清且有趣。想问问大家都是用什么软件进行游戏录屏的&#xff1f;有推荐的软件吗&#xff1f;” 在游戏生活中&#xff0c;相信你也一定想要记录下和队友在游戏中的欢…

应用篇| 深入浅出LLM应用之RAG

相信很多人都使用过LLM大模型&#xff0c;但是现有大模型或多或少都有以下问题&#xff1a; LLM幻觉问题&#xff1a;从《【小白入门篇1】GPT到底是怎样练成&#xff1f;》我们知道虽然大模型现在能力很强,但是本质就是在做文字接龙,而且每次接龙都具有随机性, 导致模型有时候…

工商业光伏项目怎么做?

随着全球对可再生能源的关注度不断提高&#xff0c;工商业光伏项目已成为企业实现绿色转型、降低能耗成本的重要途径。本文将详细介绍工商业光伏项目的开发流程&#xff0c;以及项目实施过程中需要注意的关键点。 一、项目前期准备 在启动工商业光伏项目之前&#xff0c;首先要…

windows下的 GammaRay安装和使用教程

GammaRay功能&#xff1a; 可用于查看运行时的程序对象状态信息以及事件队列 安装步骤&#xff1a; 1.官网下载地址&#xff1a; GammaRay下载地址 下载对应的qt版本适配版本 2.解压包gammaray-2.11.2.zip 解压后新建一个build目录为接下来的编译做准备 3.打开Install.txt 看…