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

🌈 个人主页:十二月的猫-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每一天

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

什么是N卡和A卡?有什么区别?

名人说&#xff1a;莫听穿林打叶声&#xff0c;何妨吟啸且徐行。—— 苏轼《定风波莫听穿林打叶声》 本篇笔记整理&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 一、什么是N卡和A卡&#xff1f;有什么区别&#xff1f;…

Qt creator day3练习

2、升级优化自己应用程序的登录界面。 要求&#xff1a; 1. qss实现 2. 需要有图层的叠加 &#xff08;QFrame&#xff09; 3. 设置纯净窗口后&#xff0c;有关闭等窗口功能。 4. 如果账号密码正确&#xff0c;则实现登录界面关闭&#xff0c;另一个应用界面显示。 widget…

WordPress插件:子比zibll主题插件 炙焰美化全开源插件V3.2——让你的网站瞬间焕发光彩

随着互联网的普及&#xff0c;越来越多的企业和个人开始拥有自己的网站。然而&#xff0c;一个美观、专业的网站却并非易事。幸运的是&#xff0c;现在市场上有许多优秀的WordPress插件可以帮助我们快速实现这一目标。今天&#xff0c;我们要介绍的就是一款名为“子比zibll主题…

告别手抖尴尬!教你轻松缓解手部震颤的小秘诀!

在我们的日常生活中&#xff0c;手抖这个现象可能并不罕见。不论是因为紧张、疲劳还是某些健康问题&#xff0c;手抖都会给我们的生活带来诸多不便。今天&#xff0c;就让我们一起探讨如何缓解手部震颤&#xff0c;让你告别手抖的尴尬&#xff01; 一、手抖的成因及影响 手抖&…

解两道四年级奥数题(等差数列)玩玩

1、1&#xff5e;200这200个连续自然数的全部数字之和是________。 2、2&#xff0c;4&#xff0c;6&#xff0c;……&#xff0c;2008这些偶数的所有各位数字之和是________。 这两道题算易错吧&#xff0c;这里求数字之和&#xff0c;比如124这个数的全部数字之和是1247。 …

python-爬虫篇-爬取百度贴吧,段友之家的图片和视频

#!/usr/bin/env python # -*- coding: utf-8 -*-""" 爬取百度贴吧&#xff0c;段友之家的图片和视频 author: cuizy time&#xff1a;2018-05-19 """import requests import bs4 import osdef write_file(file_url, file_type):""&quo…

【数据结构与算法】二叉树的性质 详解

在二叉树的第i层上至多有多少个结点。 在二叉树的第 i 层上至多有 2 i − 1 2^{i-1} 2i−1 个结点(i≥1)。 深度为 K的二叉树至多有多少个结点。 深度为 k 的二叉树上至多含 2 k − 1 2^k - 1 2k−1 个结点(k≥1)。 在一颗二叉树中, 其叶子结点数n0和度为二的结点数n2之间…

【机器学习】机器学习赋能交通出行:智能化实践与创新应用探索

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀目录 &#x1f4d2;1. 引言&#x1f4d9;2. 交通流量预测与优化&#x1f31e;数据准备&#x1f319;模型训练与预测⭐评估模型与优化 &#x…

cas客户端流程详解(源码解析)--单点登录

博主之前一直使用了cas客户端进行用户的单点登录操作&#xff0c;决定进行源码分析来看cas的整个流程&#xff0c;以便以后出现了问题还不知道是什么原因导致的 cas主要的形式就是通过过滤器的形式来实现的&#xff0c;来&#xff0c;贴上示例配置&#xff1a; 1 <list…

[C++ STL] list 详解

标题&#xff1a;[C STL] vector 详解 水墨不写bug 正文开始&#xff1a; 一、背景 C语言阶段&#xff0c;我们如果想要使用链表&#xff0c;需要自己手动实现一个链表。这是非常低效的做法&#xff0c;C中的STL中提供了链表“ list ”&#xff0c;我们在包含头文件 <list…

常见调试器介绍

目录 常见调试器 1.1 ST-Link 1.2 DAPLink 1.3 JLink 常见调试器 市面上有很多的调试器&#xff0c;下面是大家比较常见的一些调试器&#xff0c; 比如&#xff1a;ST-Link、DAPLink、JLink、Ulink等 1.1 ST-Link ST-Link是一种用于STM8及STM32系列单片机的调试器和下载…

STM32硬件接口I2C应用(基于FT6336)

目录 概述 1 硬件介绍 1.1 ST7796-LCD 1.2 MCU IO与LCD PIN对应关系 1.3 MCU IO与Touch PIN对应关系 2 FT6336的寄存器 2.1 FT6336寄存器列表 2.2 寄存器功能介绍 3 STM32Cube控制配置I2C 3.1 软硬件版本信息 3.2 I2C参数配置 3.3 使用STM32Cube产生工程 4 HAL库…

用自己的数据集训练TimeSformer并转ONNX用c++推理

用自己的数据集训练TimeSformer并转ONNX用c++推理 文章目录 用自己的数据集训练TimeSformer并转ONNX用c++推理下载安装TimeSformer创建分类文件夹创建数据集修改训练配置运行脚本开始训练测试模型模型转为onnx测试一下生成的onnx模型转为用c++推理下载安装TimeSformer TimeSfo…

EasyRecovery数据恢复软件2024免费版下载

EasyRecovery数据恢复软件&#xff0c;是我在电脑使用过程中遇到的神器&#xff01;它不仅功能强大&#xff0c;操作简便&#xff0c;还帮我找回了丢失的重要文件。今天&#xff0c;我就来给大家分享一下我的使用体验和心得。 让我来介绍一下EasyRecovery的功能。这款软件可以恢…

qt开发-09_分裂器

QSplitter 是 Qt 框架中的一个非常实用的控件&#xff0c;用于创建可调整大小的窗格。它允许用户通过拖动子窗口间的边界&#xff08;也称为分割条&#xff09;来动态调整子窗口的尺寸。这在开发需要多个视图同时显示&#xff0c;且用户需要根据需要调整每个视图大小的应用程序…

内容安全复习 6 - 白帽子安全漏洞挖掘披露的法律风险

文章目录 安全漏洞的法律概念界定安全漏洞特征白帽子安全漏洞挖掘面临的法律风险“白帽子”安全漏洞挖掘的风险根源“白帽子”的主体边界授权行为边界关键结论 安全漏洞的法律概念界定 可以被利用来破坏所在系统的网络或信息安全的缺陷或错误&#xff1b;被利用的网络缺陷、错…

推荐4款实用工具,非常好用,建议收藏

PDFREAL PDFReal 是一个功能强大的在线PDF编辑工具&#xff0c;提供多种实用的PDF处理功能。用户可以在一个网站上完成包括PDF合并、PDF拆分、PDF压缩、PDF保护、PDF解锁等多种操作。此外&#xff0c;PDFReal 还支持将文本转换为PDF、将图片转换为PDF、添加水印、提取页面内容等…

【Springcloud微服务】Docker上篇

&#x1f525; 本文由 程序喵正在路上 原创&#xff0c;CSDN首发&#xff01; &#x1f496; 系列专栏&#xff1a;Springcloud微服务 &#x1f320; 首发时间&#xff1a;2024年6月22日 &#x1f98b; 欢迎关注&#x1f5b1;点赞&#x1f44d;收藏&#x1f31f;留言&#x1f4…

Vue73-命名路由

一、路由的name属性 二、小结

Pyqt5 + Qt Creator实现QML开发环境配置

先安装Qt Creator, 该软件主要是为了编辑QML文件 在pycharm中配置外部插件&#xff0c;实现Qt Creator的调用 配置完成后&#xff0c;右击qml文件选择Qt Creator就可以直接进行编辑了