自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

sfg0861的博客

记录学习编程

  • 博客(92)
  • 收藏
  • 关注

原创 Java · 异常 · 防御式编程 · 异常的基本用法 · 捕获异常 · 抛出异常 · 自定义异常类

异常 防御式编程 异常的基本用法 捕获异常 抛出异常 自定义异常类.Java 中虽然已经内置了丰富的异常类,但是我们实际场景中可能还有一些情况需要我们对异常类进行扩展,创建符合我们实际情况的异常。例如: 我们实现一个用户登录功能.if(!// TODO 处理用户名错误 } if(!// TODO 处理密码错误 } System . out . println("登陆成功");} }此时我们在处理用户名密码错误的时候可能就需要抛出两种异常。

2022-09-26 20:39:10 587

原创 Java · 链表相关练习题 · 高频面试题 · 有难度啊

链表相关练习题 · 高频面试题编写代码,以给定值 x 为基准将链表分割成两部分,所有小于 x 的结点排在大于或等于 x 的结点之前。在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。给定一个带有头结点 head 的非空单链表,返回链表的中间结点。新链表是通过拼接给定的两个链表的所有节点组成的。代码返回的是整个新链表,而不是内存图的新结点。将两个有序链表合并为一个新的有序链表并返回。

2022-09-25 21:54:04 396

原创 Java · 认识 String 类(下)· 字符串相关方法介绍 · StringBuffer · StringBuilder

Java 认识 String 类(下)字符串相关方法介绍StringBufferStringBuilder。String 类提供的 equals( ) 方法,该方法本身是可以进行区分大小写的相等判断。compareTo( ) 是一个可以区分大小关系的方法,是 String 方法里是一个非常重要的方法。可以发现两个类都是 “CharSequence” 接口的子类,这个接口描述的是一系列的字符集。

2022-09-25 11:32:05 390

原创 Java · 认识 String 类(上)· 创建字符串 · 字符串比较相等 · 字符串常量池 · 字符串不可变 · 字符字节与字符串

Java认识 String 类创建字符串字符串比较相等字符串常量池字符串不可变字符字节与字符串。这样的方式创建的 String 对象相当于在堆上另外开辟了空间来存储 “Hello” 的内容,也就是内存中存在两份空间,都指向了 “Hello”。String 类的内部实现也是基于 char[ ] 来实现的,但是 String 类并没有提供 set 方法之类的来修改内部的字符数组。“Hello” 这样的字面值常量,本质上也是一个 String 对象,完全可以使用 equals 等 String 对象的方法。

2022-09-24 22:03:06 695

原创 Java · 图书管理系统代码练习 · 抽象类 · 封装 · 继承 · 多态 · 接口

图书管理小系统,主要利用 JavaSE 所学到的知识点:类、抽象类、封装、继承、多态、接口等进行一个简单的代码练习。

2022-09-24 15:57:03 970

原创 Java · 抽象类 · 接口 · 多接口的作用 · 接口间的继承 · 抽象类和接口的区别

抽象类和接口都是 Java 中多态的常见使用方式. 都需要重点掌握.同时又要认清两者的区别(重要!!!常见面试题).核心区别抽象类中可以包含普通方法和普通字段,这样的普通方法和字段可以被子类直接使用(不必重写);而接口中不能包含普通方法,子类必须重写所有的抽象方法。

2022-09-22 17:14:14 274

原创 Java · 多态 · 向上转型 · 动态绑定 · 方法重写 · 向下转型 · super关键字

多态向上转型动态绑定 多态是面向对象程序设计中比较难理解的部分. 重点是多态带来的编码上的好处.多态其实是一个更广泛的概念,和 “继承” 这样的语法并没有必然的联系.C++ 中的 “动态多态” 和 Java 的多态类似. 但是 C++ 还有一种 “静态多态”(模板),就和继承体系没有关系了.Python 中的多态体现的是 “鸭子类型”,也和继承体系没有关系.Go 语言中没有 “继承” 这样的概念,同样也能表示多态.无论是哪种编程语言,多态的核心都是让调用者不必关注对象的具体类型.

2022-09-22 00:22:07 289

原创 Java · 面向对象编程 · 包的概念 · 继承 · 组合

Java · 面向对象编程 · 包的概念 · 继承 · 组合出现了两个同名的类,就会冲突,导致代码不能编译通过.用 final 修饰的类被继承的时候,就会编译报错,此时就可以提示我们这样的继承是有悖这个类设计的初衷的.我们已经了解了类中的 public 和 private. private 中的成员只能被类的内部使用.和现实中的儿子继承父亲的财产类似, 子类也会继承父类的字段和方法, 以达到代码重用的效果.和继承类似,组合也是一种表达类之间关系的方式,也能够达到代码重用的效果.

2022-09-20 15:44:42 369

原创 JavaSE · 链表概念以及结构 · 单链表接口实现 · 双向链表接口实现 · 代码图解 · 顺序表和链表的区别和联系

Java · 链表概念以及结构 · 单链表接口实现 · 双向链表接口实现 · 代码图解 · 顺序表和链表的区别和联系缺点:任意位置插入删除数据,时间复杂度为O(1);没有增容问题,插入一个开辟一个空间。缺点:中间或者前面的数据,需要插入或者删除操作的时候,优势:以节点为单位存储,不支持随机访问。优势:空间连续,支持随机访问。

2022-09-19 00:38:28 361

原创 JavaSE · 线性表 · 顺序表 · 顺序表的问题 · 顺序表接口实现(新增元素,删除元素,修改元素,查找元素,清空顺序表)

线性表在逻辑上是线性结构,是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以。线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串…的存储单元,依次存储数据元素的线性结构,一般情况下采用数组存储。静态顺序表的定长数组导致 N 定大了,浪费空间;相比之下动态顺序表更加灵活,根据需要动态的分配空间大小.我们来实现一个动态顺序表,以下是需要支持的接口.静态顺序表适合确定知道需要存储多少数据的场景.在数组上完成数据的增删改查。线性表是 n 个具有。

2022-09-17 21:21:35 388

原创 算法效率 · 时间复杂度 · 空间复杂度

一个算法执行所耗费的时间,从理论上说,是不能算出来的,只有你把你的程序放在机器上跑起来,才知道。在计算机发展的早期,计算机的存储容量很小,所以对空间复杂度很是在乎。时间效率称为时间复杂度,而空间效率被称为空间复杂度。时间复杂度主要衡量的是一个算法的运算速度,而空间复杂度主要衡量一个算法所需要的额外空间。时间复杂度的定义:在计算机科学中,算法的时间复杂度是一个函数,它定量描述了该算法的运行时间。实际中我们计算时间复杂度的时候,我们其实并不一定要计算到很精确的执行次数,而是。,简洁明了的表示出了执行次数。

2022-09-16 16:50:37 1403

原创 JavaSE · 类与对象 · 面向对象概念 · 类的实例化 · 类的成员(字段,属性,方法)· 封装private · 构造方法this · 代码块 · 匿名对象

使用 { } 定义的一段代码.根据代码块定义的位置以及关键字,又可以分为以下四种:1. 普通代码块2. 构造块3. 静态快4. 同步代码块一个类可以产生无数的对象,类就是模板,对象就是具体的实例.类中定义的属性,大概分为几类:类属性,对象属性。其中被 static 所修饰的数据属性称为类属性,static 修饰的方法称为类方法,特点是不依赖于对象,我们只要通过类名就可以调用其属性或者方法.静态代码块优先实例代码块执行,实例代码块优先构造函数执行.

2022-09-15 19:47:56 204

原创 JavaSE · 数组的基本用法 · 数组作为方法的参数 · 数组作为方法的返回值 · 二分查找 · 冒泡排序 · 数组逆序

数组,能让我们批量地创建相同类型的变量.例如:如果需要表示两个数据, 那么直接创建两个变量即可 int a;int b如果需要表示五个数据, 那么可以创建五个变量 int a1;int a2;int a3;int a4;int a5;但是如果需要表示一万个数据, 那么就不能创建一万个变量了. 这时候就需要使用数组, 帮我们批量创建.注意事项:在 Java 中,数组中包含的变量必须是相同类型.

2022-09-13 23:09:43 434

原创 Java练习题 · 汉诺塔 · 青蛙跳台阶

汉诺塔问题是一个经典的问题。汉诺塔(Hanoi Tower),又称河内塔,源于印度一个古老传说。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,任何时候,在小圆盘上都不能放大圆盘,且在三根柱子之间一次只能移动一个圆盘。问应该如何操作?(我的思路是递归)在 hanoiTower 方法中,if 语句表示,如果只有一个盘子,直接从 A 柱子移动到 C 柱子即可.

2022-09-10 21:12:27 196

原创 JavaSE · 方法的使用 · 方法重载 · 方法递归 · 斐波那契数列第N项 · 递归求和

方法就是一个代码片段,类似于 C 语言中的 “函数”.方法的存在意义:1. 能够模块化的组织代码.2. 做到代码被反复使用,一份代码可以在多个位置使用.3. 让代码更好理解.4. 直接调用存在的方法开发,不必重复造轮子.基本语法// 方法定义public static 方法返回值 方法名称([参数类型 形参 ...]){方法体代码;[return 返回值];}// 方法调用返回值变量 = 方法名称(实参...);代码示例:实现一个方法实现两个整数相加} }注意事项。

2022-09-10 20:19:00 366

原创 Java练习题 · 程序逻辑控制练习题

系统自动生成一个随机整数(1-100), 然后由用户输入一个猜测的数字. 如果输入的数字比该随机数小, 提示 “低了”, 如果输入的数字比该随机数大, 提示 “高了” , 如果输入的数字和随机数相等, 则提示 “猜对了” .

2022-09-09 23:39:03 274

原创 JavaSE · 逻辑控制 · 顺序结构 · 分支结构(if 语句、switch 语句)循环结构(while 循环、break、continue、for 循环)· 控制台输入输出语句

根据 switch 中值的不同,会执行对应的 case 语句. 遇到 break 就会结束该 case 语句.代码执行到 continue 语句的时候,就会立刻进入下次循环(判定循环条件),从而不会执行到下方的打印语句.我们发现,当一个代码带有多重循环的时候,代码的复杂程度就大大提高了。我们发现,不写 break 的时候,case 语句会依次向下执行,从而失去了多分支的效果.如果 switch 中的值没有匹配的 case,就会执行 default 中的语句.当 if-else 语句中不加大括号的时候,

2022-09-09 21:03:15 360

原创 JavaSE · 算术运算符 · 关系运算符 · 逻辑运算符 · 位运算符 · 条件运算符 · Java的注释 · Java的关键字

取余操作在 Java 中也能针对 double 来计算.需要区分清楚 前置自增 和 后置自增 之间的区别.由于 Java 是强类型语言,因此对于类型检查比较严格,因此像 && 之类的运算操作符必须是 boolean.要区分清楚 & 和 | 什么时候是表示按位运算,什么时候表示逻辑运算.

2022-09-09 10:56:57 306

原创 JavaSE · 变量介绍 · 变量类型(int long double float char byte short boolean String)· 变量的作用域 · 变量的命名规则

变量指的是程序运行时可变的量,相当于开辟一块内存空间来保存一些数据。类型则是对变量的种类进行了划分,不同的类型的变量具有不同的特性。字节是计算机中表示空间大小的基本单位。计算机使用二进制表示数据,我们认为 8 个二进制位(bit)为一个字节(Byte)。例如我们平时的计算机内存为 8GB,意思是 8G 个字节。所以8GB相当于80多亿个字节。4个字节表示的数据范围是,也就大概 -21亿到 +21亿。}

2022-09-08 19:50:30 2429

原创 JavaSE · 第一个程序 · Java 的 main 方法 · JDK,JRE,JVM 三者的区别

不用介绍 Java 有多么厉害,我们直接开始Java的第一个程序~如上展示的是最简单的一个 Java程序,可以说,Java的 main方法应该是当前主流编程语言中最“长”的。通过上述代码,我们可以看到一个完整的 Java程序结构,Java程序结构由如下三个部分组成:总结一下:类存在于源文件里面;方法存在于类中;语句存在于方法中。Java 是一门半编译型、半解释型语言。先通过 javac 编译程序把源文件进行编译,编译后生成的 .class文件是由字节码组成的、与平台无关、面向 JVM 的文件。最后启动 J

2022-09-08 13:11:35 137

原创 C语言 枚举 · 联合体

enum Day {以上定义的都是枚举类型。括号中内容是枚举的可能取值,也叫枚举常量。这些取值都是有值的,默认从0开始,一次递增1,当然在定义的时候也可以赋初值。//联合体的声明 union Un {char c;int i;};//联合体的定义 union Un un;//计算变量大小 printf("%d\n" , sizeof(un));}...

2022-08-27 11:04:00 466

原创 C语言 结构体 · 位段

有了结构体类型,那么任何定义变量,其实很简单。举例一int x;int y;} p1;//声明结构体类型的时候,定义变量p1 int main() {//定义结构体变量p2 struct Point p3 = {1 , 2 };//定义变量的同时给变量赋值 return 0;}举例二//姓名 int age;//年龄 };//初始化 return 0;}举例三int x;int y;} p1;//声明结构体同时定义变量p1 struct Node {int data;...

2022-08-27 11:02:09 1001 1

原创 C语言 字符分类函数 · 字符转换函数 · 内存函数

memcpy函数可以拷贝不重叠内存,也可以拷贝重叠内存。但是拷贝重叠内存会出问题,比如自己拷贝自己,会丢失数据。

2022-08-24 10:51:01 221

原创 C语言 字符函数 · 字符串函数 介绍

C语言中对字符和字符串的处理很频繁,但是C语言本身没有字符串类型,字符串通常放在常量字符串中或者字符数组中。字符串常量适用于那些对它不做修改的字符串函数。拷贝 num 个字符从源字符串到目标空间。如果源字符串的长度小于 num,则拷贝完源字符串之后,在目标的后边追加 0,直到 num 个。如果拷贝的字符长度大于source容量,则会破坏dest字符串后面的\0,要避免这种情况发生。

2022-08-23 15:21:34 738

原创 C语音 杨氏矩阵 · 左旋字符串 · 判断字符串是否旋转

解法先把第一个元素取出,然后后面的元素依次往前移动一位,最后把第一个元素放在最后的位置上。解法杨氏矩阵其实也是二维数组,通过对比右上角或者左下角的数据。一次消除一行或者一列。先把要左旋转的字符串逆序,然后把不需要旋转的字符串逆序,最后把整体字符串逆序。可以记录指针走到哪里,那里就是数组元素下标。...

2022-07-17 09:51:49 177

原创 C语言 指针和数组笔试题

字符数组二维数组sizeof ( ),并不会把表达式的数据结果保存下来,也不会去真正访问内存区域。输出结果:数组名的意义:文字+图解:仔细看,二维数组初始化内容是逗号表达式,逗号表达式末尾元素才是二维数组中的数据。p = a[0],相当于让指针 p 指向二维数组中的第一行数据p[0],相当于 p+0,指针 p 没有发生改变。按照 %d 形式打印,结果为 1。文字+图解:前三行代码执行后,内存情况:文字+图解:执行完前三段代码,内存情况如图:创建二...

2022-07-11 16:49:03 253

原创 C语言 指针进阶知识 · 有点难加油~

本文将探讨指针的高级内容。在指针的类型中,我们知道有一种指针类型为字符指针 char*;一般使用:另一种使用方式:代码 char* pstr = “hello~”;很容易让人误解,以为是字符串 hello~ 放到字符指针 pstr 中,但实际上是把字符串 hello~ 的首字符地址放在 pstr 中。上面代码的意思是把一个常量字符串的首字符 h 的地址存放在指针变量 pstr 中。面试题:输出结果是:解析:str1 和 str2 都是数组,定义数组的时候就已经在内存中开辟各自的空间,虽然它们存储

2022-07-09 16:04:30 352

原创 C语言 回调函数 · qsort函数使用 · 采用冒泡和回调方式模拟实现qsort

是不是一脸懵?没事,先把回调函数的定义放在一边,我们看一下冒泡排序吧还记得冒泡排序吗?冒泡排序是比较基础的排序方法。其中有个弊端就是,设计出来只能对一种同类型的数据排序。有没有一种方法,能让我对 int 类型数据排序后,再去对 double 类型数据排序,甚至对结构体类型数据排序呢?有,这就是要介绍的 qsort函数,它也算是回调函数的一种。它一共有四个参数,返回类型是 void。解析:通俗来说:我 qsort 函数什么类型都能排序,但是你要把要排序的数组arr告诉我,数组元素有几个告诉我,数组

2022-07-09 16:00:11 438

原创 C语言 简单实现计算器功能 ·函数指针数组实现计算器

函数指针数组实现计算器功能:利用函数指针数组把计算器方法(封装?)在一个数组中调用更加简单,代码更加简洁~

2022-07-08 21:24:57 1775

原创 JavaWeb · HTTP请求消息数据格式 · Request对象

一、HTTP概念Hyper Text Transfer Protocol 超文本传输协议传输协议: 定义了在客户端和服务器端通信时,发送数据的格式。特点:基于TCP / IP的高级协议默认端口号:80基于请求 / 响应模型,一次请求对应一次响应无状态的:每次请求之间相互独立,不能交互数据历史版本:1.0:每次请求响应都会建立新的链接1.1:节省资源,会复用链接就例如访问百度,会产生多次请求,多次响应。1.0版本会请求一次资源就建立一个链接。1.1版本会请求一个资源,传输完成后

2022-05-11 20:19:33 753 2

原创 JavaWeb · Servlet

Servlet 1.1 概念1.2 Servlet快速入门1.3 执行原理1.4 servlet 五个方法以及生命周期1.4.1 init方法1.4.2 service方法1.4.3 destroy方法1.5 servlet3.0 使用注解配置1.6 Servlet体系结构1.6.1 GenericServlet1.6.2 HttpServlet1.6.3 urlpartten 配置1.1 概念Servlet:server applet。是指运行在服务器端的小程序。Servlet就是一个接口,定义了J

2022-05-11 13:35:28 428

原创 JavaWeb · web相关概念简述 · web服务器软件 · Tomcat · 第一个web程序

一、web相关概念简述1.1 软件架构1.2 资源分类1.3 网络通信三要素二、web服务器软件2.1 服务器的概念2.2 和Java相关的web服务器软件三、Tomcat:web服务器软件3.1 下载3.2 安装3.3 卸载3.4 启动3.5 关闭3.6 部署项目的方式四、Tomcat 和 IDEA 集成,并且创建第一个 web 项目4.1 Tomcat和IDEA集成4.2 第一个web项目(虚拟目录、热部署)一、web相关概念简述1.1 软件架构C / S:客户端 / 服务器端B / S:浏.

2022-05-08 19:40:44 606

原创 C语言 (浮点型)数据的存储

c语言浮点数在内存中的存储一、浮点数二、浮点数存储三、浮点数在内存的表示方式四、IEEE 754 对 有效数字M和指数E 的特别规定:一(有效数字M):二(指数E),情况有点复杂:三(指数E不全为0 或者 不全为1):*了解. 四(指数E全为0 或 指数E全为1):五、解释开头的题目:一、浮点数上一节 我们讲解了C语言中整型数据是如何在内存中存储的。这节我们讲解C语言浮点型数据在内存中存储方式。常见的浮点数例如:3.1415926 1E10浮点数家族包括:float、double、long

2022-04-15 17:26:02 2545 2

原创 C语言 (整型)数据的存储

C语言 整型数据的存储一、数据类型介绍二、类型的基本归类整型家族:浮点数家族:构造类型:指针类型:空类型:三、整型在内存中的存储3.1 原码、反码、补码3.2 对于整型来说,数据在内存中存储的格式是补码。四、大小端介绍五、来亿点练习题①练习题②练习题③练习题④请问以下代码输出结果⑤以下代码输出结果是?⑥请问代码输出结果是?⑦请问以下代码输出结果是什么?一、数据类型介绍前面我们已经学习了基本的内置类型:char //字符数据类型short //短整型int //整型long //长

2022-03-30 23:50:56 2410

原创 C语言 实用调试技巧(Visual Studio编辑器)

C语言 实用调试技巧一、什么是bug?二、调试是什么?有多重要?调试是什么?调试的基本步骤:三、Debug 和 Release 的介绍四、windows 环境调试介绍1.调试环境准备2. 学会快捷键3. 调试的时候,查看程序当前信息4.多多动手,尝试调试,才能有进步。五、一些调试的实例,以及调试步骤实例一调试步骤:实例二栈内存·扩展知识:一、什么是bug?程序错误(bug),是程序设计中的术语。是指在软件运行过程中,因为程序本身有错误而造成的功能不正常、死机、数据丢失等现象。1947年,人们发现了第一

2022-01-20 16:25:11 1426

原创 C语言 结构体基本操作

结构体基本操作一、结构体的声明结构的基础知识结构的声明结构成员的类型二、结构体变量的定义和初始化三、结构体成员的访问四、结构体传参一、结构体的声明结构的基础知识结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。结构的声明struct tag{ member-list;}variable-list;如果是描述一个学生:typedef struct stu{ char name[20]; //名字 int age; //年龄 char sex[5]; /

2022-01-14 16:08:12 371

原创 C语言 指针基本概念

指针基本概念简介:一、指针是什么?二、指针和指针类型三、野指针四、指针的运算五、指针和数组六、二级指针七、指针数组一、指针是什么?在计算机科学中,指针是编程语言中的一个对象。可以利用地址,找到它指向存在电脑存储器中另一个地方的值。由于通过地址能找到变量单元,所以可以简单的说,地址指向该变量单元。因此,将地址形象化的称为指针。可以通过指针找到以它为地址的内存单元。我们可以这样理解:内存:存储在硬盘中的数据。指针:是一个可以找到该数据的地址,由变量存储这个地址。对应到代码中:先定义一

2022-01-13 17:39:02 632

原创 C语言 操作符学习

一、操作符分类:算术操作符移位操作符位操作符赋值操作符单目操作符关系操作符逻辑操作符条件操作符逗号表达式下标引用、函数调用和结构成员二、算术操作符: + - * / %除了 % 操作符外,其他的几个操作符可以作用于整数和浮点数。对于 / 操作符,如果两个操作符都是整数,就执行整数除法。而只要有浮点数,就执行浮点数除法。==%==操作符的两个操作符必须为整数。返回的是整除之后的余数。三、移位操作符 << 左移操作符 >> 右移

2021-11-27 11:30:24 714

原创 C语言 实现三子棋 井字棋

使用C语言实现三子棋,一共分三个文件。实现效果如图:首先打印个菜单供用户选择选择1进入游戏键盘输入玩家下棋坐标,电脑会自动下棋一共三种结局。玩家赢;电脑赢;平局。玩家赢:电脑赢:平局:代码展示:test.c文件#define _CRT_SECURE_NO_WARNINGS 1#include "game.h"void menu() { printf("****************************\n"); printf("***

2021-10-30 11:39:04 1405

原创 C语言 数组实现 扫雷游戏

游戏界面展示:一开始菜单界面:选择 0 退出程序:选择 1 开始游戏:输入要排查雷的坐标:会根据周围雷的个数,该坐标显示数字。如果周围没有雷,输入的坐标显示 0有雷,则显示周围雷的个数如果输入坐标位置有雷,则被炸死游戏结束~代码展示:一共分三个文件。测试文件 test.c 。头文件game.h 。游戏功能文件game.c 。test.c#define _CRT_SECURE_NO_WARNINGS 1#include "game.h"//优化//1.如果不是雷,

2021-10-30 11:37:10 275

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除