Java_抽象类_接口
Java 抽象类抽象类 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。 抽象类就是用来继承的,比如犬科,犬科里面含有很多种类的犬,但是各种犬之间的特征是不同的,因此先设计犬科这个抽象类,包含犬科的基本属性,再由具体的犬种比如哈士奇犬类继承犬科这个抽象类,构建了犬科属性下的一个具体的哈士奇犬类 抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。 由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。也是因为这个原因,通常在设计阶段决定要不要设计抽象类。 父类包含了子类集合的常见的方法,但是由于父类本身是抽象的,所以不能使用这些方法。 在 Java 中抽象类表示的是一种继承关系,一个类只能继承一个抽象类,而一个类却可以实现多个接口。 抽象类使用关键字abstract定义 1234567891011abstract class 抽象类名称{ /*成员属性、成员方法*/}class ...
Java_基本概念
源文件–编译单元Java项目中的编译单元是后缀为.java的源文件 main方法main方法是Java程序(就是项目)的入口,在Java项目(程序)执行的时候,从main方法开始执行。 一个源文件中最多有一个main方法;跟C++不同,一个Java程序允许多个main函数,每个源文件中都可以有一个main方法,但是在程序执行的时候,只能选择项目中的一个main方法作为项目的入口。 public类(公共类) 在此之前,先说一下访问权限 针对类、成员方法、成员属性,Java提供了四种访问控制权限修饰符关键字,在定义的时候加在最前面,附加上访问权限 分别是private defalut protected public private用于修饰成员对象和成员方法 当类、成员方法、成员属性没有权限修饰符的时候,默认是default,最多可以在本包下的其他源文件中被访问 protected用于修饰成员对象和成员方法 public修饰类、成员属性和成员方法的时候,允许在本项目中任何地方被访问(全局访问) 以下为当成员属性被不同的权限修饰符修饰时的可被访问的范围: 可被访问的范围 priva ...
深色模式下文章图片过暗
在/themes/butterfly/source/css/_mode/darkmode.styl 大约104行左右 修改关于第106行brightness的值 修改前值为0.5,效果: 修改之后值为1,效果:
图片资源压缩指南
图片资源压缩指南在p站等图片网站下载的原图作为网站背景文件太大,动辄十几mb,加载很慢 先本地图片编辑,将图片尺寸缩小(一般1080p~2k大小作为背景就很够用了),实现第一步减小体积 使用图片压缩网站或者软件进行进一步压缩,这里有两个网站 压缩图片分为有损压缩和无损压缩。无损压缩推荐Tinypng,有损压缩推荐imagine。 TinyPNG Imagine 特点 无损压缩 有损压缩,以牺牲图像质量, 降低图像色彩来达到缩减图像大小的目的。 优点 能够完全保留图像色彩,不损伤图像质量 1. 压缩程度高,支持转png为jpg或webp,进一步减少图片大小 2. 软件支持一次处理多张图片,无上限,处理完成支持直接批量覆盖原文件或重命名 缺点 单次仅能上传20张图片,每张限制大小为5MB,无法处理更大图片。 PNG转其他格式为不可逆操作(指覆盖保存后),且可能反而会增加图片大小。 个人比较推荐无损压缩的网站
网址不支持某些字符
网址不支持一些特殊字符,比如+ &等 如果在分类或者标签中添加了这类字符,在网址中是无法显示字符的,只会显示可以显示的字符 比如有一个标签是C,一个标签是C++,网址无法识别++,会把++略去,点击C++的时候打开的路径就变成了C的 但只是网址不支持,不涉及网址的地方是没问题的
数据结构_二叉树(C++
数据结构_二叉树(C++实现 1前言:此类笔记仅用于个人复习,内容主要在于记录和体现个人理解,详细还请结合bite课件、录播、板书和代码。 [toc] 前言 本篇中的是一般二叉树(包括线索树、表达式树)是通过链式结构实现的,关于顺序结构的实现请见C语言版(顺便有堆的相关内容) 本篇中哈夫曼树的结点存储是用的是顺序结构 模版不支持分离编译,因此跟以往自定义变量和函数时,声明在头文件、实现在源文件不同,定义(声明+实现)都是在头文件中【详见code日记】 二叉树采用链式存储 二叉树类的声明:123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114#pragma once//模版 ...
数据结构_KMP算法
数据结构_KMP算法 前言:此类笔记仅用于个人复习,内容主要在于记录和体现个人理解 [toc] 应用场景 有两条字符串,一条长,一条短,现在要求检查长的字符串,看看里面是不是包含短的字符串,如果包含,就返回短串的首元素在长串中的位置。如果没有的话,就返回-1。长串称为“主串”,短串称为“模式串”,简称“模式”。(不知道为啥这么叫,感觉有点抽象 为了解决这个问题,就诞生出了一种算法:BF算法(暴力算法) 指针i指向主串,j指向模式串 从主串的第一个元素、模式的第一个元素开始遍历,比较,如果相等,i、j后移,看后面的元素是否也都一样。如果在一个地方遇到了i、j指向的元素不同的情况,就称为“失配”,说明从主串第一个元素、模式第一个元素开始的话两个字符串没办法匹配 那么就让i起始位置变成主串的第二个元素,j起始位置指回模式的第一个元素(称为“回溯”),进行第二次遍历,看能否匹配上模式串。 直到,找到能完全匹配的情况下i的起始位置,或者,i的起始位置的剩余长度小于模式的长度(此时肯定没法匹配了,因为长度都不够了) 例如下面👇 在此处,失配了,所以要进行回溯,i的初始位置变成第 ...
数据结构_队列(C++
数据结构_队列(C++实现 前言:此类笔记仅用于个人复习,内容主要在于记录和体现个人理解,详细还请结合bite课件、录播、板书和代码。 [toc] 前言 没什么好说的 也就是 队列一般用链表实现比较常用,下面实现的也是链式栈 ==注意下面类的提前声明和友元类的作用== ==assert果然还是太暴力了,能不用就不用吧,但是一定要记住要判断 指针 为空的情况== ==可以抛出异常信号 (建议用这个,因为运行错误的时候知道原因== ==可以直接返回== 判断指针head为空的方式 123456789if(!head) // if(!head)等价于if(head==NULL),head==NULL是head为空时等式成立,值为真 // head为空的话head就相当于0(假),非空就是真,所以当head为空的时候,!head就是真 throw nullPointer();//这里使用了抛出异常信号的方式,而且抛出的 ...
数据结构_顺序栈(C++
数据结构_顺序栈(C++实现 前言:此类笔记仅用于个人复习,内容主要在于记录和体现个人理解,详细还请结合bite课件、录播、板书和代码。 [toc] 前言没什么好说的 栈的实现可以用顺序结构(数组)实现—–数组栈,也可以用链式结构(链表)实现—–链式栈 。两者除了在结构上不同,还有一点不同就是数组栈是栈底在前面(首结点),栈顶在后面(尾结点),通过尾插尾删入栈出栈,链式栈是栈顶在前面,栈底在后面,通过头插头删入栈出栈,与数组栈方向相反。 最常用也可以说最好用的大概是数组栈 ==assert果然还是太暴力了,能不用就不用吧,但是一定要记住要判断 指针 为空的情况== ==可以抛出异常信号 (建议用这个,因为运行错误的时候知道原因== ==可以直接返回== 判断指针head为空的方式 123456789if(!head) // if(!head)等价于if(head==NULL),head==NULL是head为空时等式成立,值为真 // head为空 ...
数据结构_单链表(C++
数据结构_SinglyLinkedList单链表(C++实现 前言:此类笔记仅用于个人复习,内容主要在于记录和体现个人理解,详细还请结合bite课件、录播、板书和代码。 [toc] 前言&注意事项 单链表C++的实现分为了结点类和链表类两个类,十分明了,可读性很高,也很容易写,节点类负责单个节点的操作,链表负责链表整体的操作 ==assert果然还是太暴力了,能不用就不用吧,但是一定要记住要判断 表指针 为空的情况== ==可以抛出异常信号 (建议用这个,因为运行错误的时候知道原因== ==可以直接返回== 判断指针head为空的方式 123456789if(!head) // if(!head)等价于if(head==NULL),head==NULL是head为空时等式成立,值为真 // head为空的话head就相当于0(假),非空就是真,所以当head为空的时候,!head就是真 throw nullPointer();//这里使用了抛出 ...
数据结构_栈应用_中缀式转后缀式并计算
中缀式转后缀式并计算(图文解释 前言:此类笔记仅用于个人复习,内容主要在于记录和体现个人理解,详细还请结合bite课件、录播、板书和代码。 [toc] 前言:用到的头文件1234567#include<iostream>#include<vector>#include<stack>#include<string>#include<sstream>//stringstream类需要包含的头文件,这个类的作用是将元素全是数字字符string类转换成字面上等价的int类using namespace std; 1.输入一个中缀式$$5*3(12-1++)/5$$ 计算结果就是17(一会儿可以用来验证程序结果是否正确 输入的这个中缀式的数据是由字符组成的,中缀式本身就是一个string类型 如果用字符的话,单个的数字或者符号,比如其中的 ‘5’、’*’、’3’、’(‘ 等轻易就会识别出来 但是“12”和“++”就会被识别成’1’、’2’、和’+’、’+’ 所以需要将中缀式进行转化,变成能识别多个字符的格式 2.将 ...
数据结构_顺序表(C++
数据结构_SeqList顺序表(C++实现 前言:此类笔记仅用于个人复习,内容主要在于记录和体现个人理解,详细还请结合bite课件、录播、板书和代码。 [toc] 前言&注意事项 有些函数没有修改成员数据的要求,防止成员函数被修改,将只有读取要求的函数设为常函数(只读函数 用 C++实现,有很多优势,其中一个就是对象可以直接访问并修改数据成员,不用再想要修改的时候再传地址什么的 ==assert果然还是太暴力了,能不用就不用吧,但是一定要记住要判断 表指针 为空的情况== ==可以抛出异常信号 (建议用这个,因为运行错误的时候知道原因== ==可以直接返回== 判断指针head为空的方式 123456789if(!head) // if(!head)等价于if(head==NULL),head==NULL是head为空时等式成立,值为真 // head为空的话head就相当于0(假),非空就是真,所以当head为空的时候,!head就是真 t ...
数据结构_栈和队列_作业
2022.10.10智慧树作业_栈和队列[toc] 第一题相同点: 在逻辑上都是线性结构,栈和队列本质就是特殊的线性表,都可以用链表或者顺序表进行存储 不同点: 栈、队列具有特定的性质,特定的运算规则 第二题1 2 3 4 5、1 2 3 5 4、1 2 4 3 5、1 2 4 5 3、1 2 5 4 3、1 3 2 4 5、1 3 2 5 4、1 3 4 2 5、1 3 4 5 2、1 3 5 4 2、1 4 3 2 5、1 4 3 5 2、1 4 5 3 2、1 5 4 3 2、2 1 3 4 5、2 1 3 5 4、2 1 4 3 5、2 1 4 5 3、2 1 5 4 3、2 3 1 4 5、2 3 1 5 4、2 3 4 1 5、2 3 4 5 1、2 3 5 4 1、2 4 3 1 5、2 4 3 5 1、2 4 5 3 1、2 5 4 3 1、3 2 1 4 5、3 2 1 5 4、3 2 4 1 5、3 2 4 5 1、3 2 5 4 1、3 4 2 1 5、3 4 2 5 1、3 4 5 2 1、3 5 4 2 1、4 3 2 1 5、4 3 2 5 1、4 3 5 ...




