编程思想/oop设计模式

news/2025/2/19 8:06:44/

过程性的编程思想

大学里学的汇编,全凭0,1

结构性的编程思想

单片机,嵌入式之类解决问题的思想(行动要求直接输出结果)类似学生时代做题,性能较高


C语言里面有几个能表现出结构化思想的地方:分支(if), 循环(while,for),结构体(struct). 只要你会用这三个,那么你就可以写出结构化的程序,但不一定你就了解什么是结构化的编程方法。什么叫做结构化?为什么说goto会破坏程序的结构化?结构体有什么作用,你能说出结构体的哪些好处?(C语言的"数据结构")

面向对象的编程思想(oop)

类与对象

万事万物皆为对象,面向对象是把事物解析成对象,描绘各个对象之间的交互,和交互后的状态(类似于人与人之间的联系)

对象:指代一个具体的事物,比如人

类:描绘一个对象的属性的集合,比如[红色衣服,白色眼镜,男]

类实例化成对象: 一个穿红色衣服,戴白色眼镜的男人

对象是类的具象化

方法

有参方法:方法带参数

无参方法:方法不带参数

对象数组

一个元素是对象的数组

重载和构造

重载:可以有多个同名但是参数类型或者参数个数不同的方法。(仅指方法)

构造:一个用来创建对象,且用来赋值的方法。分有参构造和无参构造

this、static、单例模式

this

        当前对象

static

       静态方法和属性可以类名直接调用,它是公有的。静态方法只能调用静态的方法和属性(静态方法是属于类的,动态方法属于实例对象,在类加载的时候就会分配内存,可以 通过类名直接去访问,非静态成员(变量和方法)属于类的对象,所以只有该对象初始化之后才存在,然后通过类的对象去访问。)如果要调用的话,可以new一个对象出来调用

动态没有限制

单例模式

无论调用多少次都是只是一个对象。是spring默认的初始化的类的配置

懒汉式:在真正需要使用对象时才去创建该单例类对象Double Check(双重校验) + Lock(加锁)

饿汉式:在类加载时已经创建好该单例对象,等待被程序使用

@Scope注解默认单例饿汉式模式生成(如果要变成懒汉式,添加@Lazy注解),但是设置成prototype 则会变成多例模式懒汉式加载(getBean()的时候创建)

单例模式在容器启动的时候创建/通过注解或者xml或者配置类创建,之后set设置属性值,initMethod()初始化,最后调用 destroyMethod() 销毁(容器关闭时调用销毁流程)(销毁时可以调用bean后置处理器(BeanPostProcessor接口)自定义销毁前后的特殊处理)

多例模式getBean()创建,然后赋值,最后被gc回收时销毁

后续讲bean时会细讲

面向对象三大特性

封装

        相关数据封装成类(类的属性设置成private,但是提供公开的get,set以供赋值)

继承

        子类继承父类的特性(各种属性和方法),之后就可以使用父类的属性方法,同时不影响自己新增的属性和方法。Spring框架的底层bean就是继承factorybean接口。类的继承是单向的。但是一个接口是可以继承多个父类的。

多态

        一个父类的多个子类继承了父类的方法并且重写了,导致表现不同的情况(要求必须得是有继承关系的两个类)

        多态的向上转型:父类调用子类方法

        多态的向下转型:父类强转成子类

instanceof

        (object) instanceof 类(class) object是否和class是一致的或者有继承关系(向下转型的情况下必用,否则可能报错)

接口

         接口可以理解为一种特殊的类,里面全部是由全局常量和公共的抽象方法所组成。接口是解决Java无法使用多继承的一种手段,继承的关键字为interface

        我们不能直接去实例化一个接口,因为接口中的方法都是抽象的,是没有方法体的,这样怎么可能产生具体的实例呢?但是,我们可以使用接口类型的引用指向一个实现了该接口的对象,并且可以调用这个接口中的方法。(实际上就是使用了Java中多态的特性)

        接口类似于一个动作的集合,例如一个usb上传功能的接口,它只需要被继承被调用实现usb口的键盘和鼠标的信号数据传输上来,至于数据的承载和处理,需要这个usb接口实现的键盘类和鼠标类来分别承载然后进行处理。只要实现了这个接口,就等同于具备了这个接口代表的功能。比如在当下这个usb接口被实现了,说明具备了usb数据传输的功能。

异常

异常处理

try{

         代码逻辑块

} catch(报错信息)(

         异常捕获(可以选择throw、throws 抛出,如果不抛出,程序将可以再运行下去。如果外面调用的代码需要捕获异常的话,一定要抛出)

) finally {

          结束后进行处理(包括异常处理后)

        比如io流的关闭(曾经因为创建文件夹且生成文件的程序没有关闭io流导致下次再创建时异常)

}

异常种类

Java异常

        可以继承RunTimeException接口返回自定义异常

        Exception:所有异常的根类,不知道会报什么异常的话选这个准没错

        算术异常类:ArithmeticExecption

        空指针异常类:NullPointerException

        类型强制转换异常:ClassCastException

        数组负下标异常:NegativeArrayException

        数组下标越界异常:ArrayIndexOutOfBoundsException

        违背安全原则异常:SecturityException

        文件已结束异常:EOFException

        文件未找到异常:FileNotFoundException

        字符串转换为数字异常:NumberFormatException

操作数据库异常

        SQLException

输入输出异常

        IOException


http://www.ppmy.cn/news/1257939.html

相关文章

【开源视频联动物联网平台】libmodbus 写一个Modbus TCP 客户端

libmodbus 是一个用于 Modbus 通信协议的 C 语言库,可以用来创建 Modbus TCP 客户端。以下是一个简单的示例代码,演示如何使用 libmodbus 创建一个 Modbus TCP 客户端。 首先,确保你已经安装了 libmodbus 库。你可以从 libmodbus 的官方网站…

蓝桥杯算法心得——想吃冰淇淋和蛋糕(dp)

大家好,我是晴天学长,dp题,怎么设计状态很重要,需要的小伙伴可以关注支持一下哦!后续会继续更新的。💪💪💪 1) .想吃冰淇淋和蛋糕 想吃冰淇淋与蛋糕 输入格式 第一行输入一个整数n。…

2024 Move 中文开发者大会将于1月13–14日在上海举办

*以下文章来源于MoveFuns ,作者MoveFunsDAO 2024 Move 中文开发者大会将于1月13日-1月14日在上海举办。本届 Move 开发者大会以 “Move 生态关键的一年” 为主题。 由 MoveFuns 、OpenBuild 和 MoveBit 主办,Rooch、AptosGlobal、alcove、zkMove 和 Ti…

RAR文件的密码保护如何设置和取消?

RAR文件是压缩包一种常用的压缩文件格式,对于这种文件,我们如何设置和取消密码保护呢? 首先我们要下载适用于RAR文件的WinRAR解压缩软件,然后在压缩文件的时候,就可以同步设置密码,选中需要压缩的文件&…

数据结构——希尔排序(详解)

呀哈喽,我是结衣 不知不觉,我们的数据结构之路已经来到了,排序这个新的领域,虽然你会说我们还学过冒泡排序。但是冒泡排序的性能不高,今天我们要学习的希尔排序可就比冒泡快的多了。 希尔排序 希尔排序的前身是插入排…

【华为OD题库-069】按单词下标区间翻转文章内容-java

题目 题目描述: 输入一个英文文章片段,翻转指定区间的单词顺序,标点符号和普通字母一样处理。例如输入字符串“I am a developer.”,区间[0,3]则输出"developer. a am l"。 输入描述: 使用换行隔开三个参数 第一个参数为英文文章内…

Kubernetes学习笔记-Part.01 Kubernets与docker

目录 Part.01 Kubernets与docker Part.02 Docker版本 Part.03 Kubernetes原理 Part.04 资源规划 Part.05 基础环境准备 Part.06 Docker安装 Part.07 Harbor搭建 Part.08 K8s环境安装 Part.09 K8s集群构建 Part.10 容器回退 第一章 Kubernets与docker Docker是一种轻量级的容器…

java第二十八课

实现用户登陆 输入用户名和密码,如果输入用户名和密码正确,允许登录编程过程中采用字符串拉接。 SQL 注入,当使用拼接的 sql 语句. 输入密码时把语句拼接成or,or 后面跟上一个条件正确的式子。 Java 防止 sql 注入,预编…