- 博客(39)
- 收藏
- 关注
原创 DataStructure.包装类&简单认识泛型
本文介绍了Java泛型的基本概念及其在编程中的重要作用。首先解释了什么是泛型,即允许在定义类、接口和方法时使用类型参数,提高了代码的复用性和类型安全性。接着,文章详细阐述了基本数据类型对应的包装类以及装箱和拆箱操作,展示了泛型如何支持基本类型。此外,文章还探讨了泛型的语法、使用方式以及类型推导机制,并通过示例代码展示了如何在类和方法中应用泛型。最后,文章提到了泛型的擦除机制和类型边界,以及如何在实际开发中有效使用泛型,避免常见的错误和陷阱。通过这篇技术博客,读者将能够深入理解Java泛型的核心概念。
2024-06-25 18:00:10
1031
原创 DataStructure.时间和空间复杂度
时间复杂度和空间复杂度的技术博客文章摘要时间复杂度和空间复杂度是衡量算法性能的两个关键指标。时间复杂度反映了算法执行速度,通过计算基本操作次数并用大O表示法简化,我们可以评估算法在不同输入规模下的运行效率。空间复杂度则关注算法执行过程中所需额外空间的大小,通常用变量个数衡量。尽管早期计算机存储容量有限,空间复杂度曾备受关注,但随着硬件发展,空间复杂度已不再是主要考量因素。然而,对于递归等算法,空间复杂度依然重要,因为递归调用会占用系统栈空间。在实际应用中,了解时间复杂度和空间复杂度有助于我们选择合适算法
2024-06-23 19:03:33
825
原创 Javase.图书管理系统基本框架
本文深入探讨了一个灵活且可扩展的图书系统的设计与实现。该系统基于面向对象的设计原则,通过继承、多态和接口等关键技术,构建了一个能够支持不同类型用户执行特定操作的逻辑框架。我们详细介绍了User类作为基础结构的重要性,并通过AdminUser和NormalUser两个子类展示了如何定制不同用户角色的功能和操作。此外,我们还剖析了操作集合与菜单系统的设计理念,以及如何通过接口实现操作的多态调用。该系统不仅满足了图书管理的基本需求,更在扩展性与灵活性方面表现出色,为未来功能的增加和修改提供了便捷的途径。
2024-06-23 13:08:37
1201
原创 Javase.认识异常
在Java开发中,异常处理是确保程序稳定性和可靠性的关键环节。这篇blog深入解析了Java异常的概念、体系、处理策略及自定义异常类。它介绍了异常的基本概念与分类,详细阐述了异常抛出、捕获与处理的最佳实践,包括防御式编程策略、try-catch结构的使用、以及finally块在资源清理中的作用。此外,还涵盖了自定义异常类以满足特定业务需求的重要性。通过学习本blog,读者可以深入理解Java异常处理机制,提升代码质量。
2024-06-21 22:23:19
1602
原创 Javase.String类的课后作业
本文探讨了Java中String类的核心知识点,通过一系列精选习题,深入分析String的不可变性、字符串比较、拼接和分割等常见操作。首先,文章强调了String类在Java编程中的重要性,随后通过习题的形式,展示了如何正确使用String类的方法。文章还讨论了String与StringBuilder、StringBuffer的性能差异,并提供了优化字符串操作的建议。最后,通过习题解答和技巧分享,旨在帮助读者加深对String类的理解,提高编程能力。
2024-06-21 13:16:59
918
原创 Javase.String 类
在Java编程中,String类无疑是最基础和最常用的类之一。本文档详细讲解了String类的重要性、基本用法、常见操作、字符串常量池的概念,以及StringBuffer和StringBuilder的区别。首先,我们认识到String类在面向对象编程中的优越性,其提供了丰富的构造方法和操作字符串的方法,如equals、compareTo、charAt等。接着,文档深入探讨了字符串比较的不同方式,包括==、equals、compareTo等,并强调了字符串的不可变性特性及其对性能的影响。最后,通过引入Stri
2024-06-20 23:08:15
820
原创 Javase.抽象类和接口
深入理解Java中的抽象类和接口在Java编程中,抽象类和接口是构建可扩展和灵活软件架构的重要工具。抽象类允许我们定义一种只能被继承而不能直接实例化的类结构,其中可以包含抽象方法和普通方法,用于提供部分实现或作为框架基类。接口则定义了多个类必须遵循的行为规范,其中所有方法都是抽象的,并允许实现多继承的概念。通过学习和掌握抽象类和接口,我们可以更好地设计出符合开放-封闭原则的系统,使得代码更易于维护和扩展。本文档深入探讨了抽象类和接口的概念、语法、特性及其在Java编程中的应用场景,为开发者提供了一份详尽
2024-06-19 23:26:55
1068
原创 Javase.继承和多态的课后练习题
当子类继承父类需要先初始化继承过来的父类的成员,此时需要通过super来完成。很明显在子类的构造方法当中,并没有通过super调用父类的构造方法。通过super.data就能知道访问的是父类的data。当子类继承父类之后,在实例化子类对象的时候,先要调用父类的构造方法,来帮助父类初始化。子类继承父类之后,会继承父类私有的数据,但是由于private访问修饰符的问题,子类没有办法直接访问该数据。主要疑问就是注释3处,此时A虽然不是C的直接父类,但是C依然间接继承了A的内容的,此时可以发生向上转型的。
2024-06-18 15:21:33
362
原创 Javase.继承和多态
这篇文章深入探讨了Java中的继承和多态概念。首先,文章解释了继承作为面向对象编程中代码复用的重要手段,通过子类继承父类来抽取共性,简化代码结构。接着,介绍了多态的概念,即同一操作作用于不同对象产生不同结果,并阐述了实现多态的必要条件。此外,还详细探讨了子类对父类方法的重写规则,以及向上转型和向下转型的应用场景和注意事项。最后,总结了多态带来的代码简化与扩展性强等优点,同时提醒开发者避免在构造方法中调用重写的方法,以保证代码的健壮性。
2024-06-17 14:34:53
583
原创 Javase.类与对象
在Java SE中,类与对象是面向对象编程的基石。类定义了对象的属性(成员变量)和行为(成员方法),而对象则是类的具体实例。通过实例化类,可以创建具有特定属性和行为的对象。封装是面向对象的重要特性,通过访问权限控制成员变量的可见性,实现数据的隐藏和保护。此外,静态成员变量和方法属于类本身,所有对象共享,而非静态成员则与具体对象相关联。Java中的内部类为封装提供了更灵活的方式,可以在一个类的内部定义另一个类。通过掌握类与对象的概念和特性,我们可以更有效地设计、扩展和维护大型Java程序
2024-06-13 22:54:27
847
原创 Javase.数组的基本语法
Javase数组技术博客文章摘要本文详细解读了Javase中的数组技术。数组,作为一种基础的数据结构,用于存储同类型数据的集合。我们将深入探讨Javase数组的声明、初始化、访问和修改等核心操作,以及多维数组的特性。通过具体的实例和代码片段,旨在帮助读者全面理解数组的概念和应用,从而在实际编程中更高效地运用这一数据结构,提升编程技能。
2024-06-09 16:51:22
1036
原创 C语言.数据结构.双向链表
本文详细介绍了如何使用C语言实现一个双向链表数据结构。双向链表相比单向链表提供了更好的功能性和灵活性,允许双向遍历。文章首先阐述了双向链表的基本概念,随后逐步展示了如何定义链表节点结构体,以及如何创建、插入、删除和遍历节点。通过阅读本文,读者将能够全面掌握C语言中双向链表实现的精髓,进而在实际编程中灵活运用,提升数据结构的运用能力和程序的效率。
2024-06-06 20:52:48
783
原创 C语言.数据结构.单链表经典算法
技术博客摘要:本博客深入探讨了单链表相关的经典算法题,包括移除链表元素、反转链表、查找链表的中间节点、合并两个有序链表等。同时,我们还解决了环形链表的约瑟夫问题和链表分割等高级问题。通过详细解析和算法实现,读者可以深入理解链表操作的核心原理,并提升解决链表相关问题的能力。这些算法不仅是数据结构课程的基础知识,也是软件工程师解决实际问题的有力工具。掌握它们,将能更高效地处理链表数据,优化程序的性能和稳定性。
2024-06-04 15:31:56
898
原创 C语言.数据结构.单链表
C语言数据结构单链表技术博客文章摘要本文深入探讨了C语言中的数据结构——单链表。首先,文章介绍了链表的概念及结构,强调了链表作为一种物理存储结构上非连续、非顺序的存储结构,其数据元素的逻辑顺序是通过链表中的指针链接次序实现的。通过将链表与火车车厢的类比,形象地展示了链表节点之间的独立性和链接关系。接着,文章详细阐述了单链表的实现方法,包括定义链表节点结构体、实现基本的链表操作(如头部插入、删除、尾部插入、删除、查找、在指定位置插入/删除节点等),以及链表的销毁等功能。
2024-05-31 14:14:06
808
原创 C语言.顺序表.通讯录
本文介绍了基于C语言的顺序表实现通讯录的方法。通过构建顺序表数据结构,有效管理联系人信息,包括姓名、电话等。文章详细阐述了通讯录的创建、添加、删除、查找和修改联系人等功能的实现过程,为读者提供了一个简单高效的通讯录管理方案。
2024-05-28 23:27:58
509
原创 C语言.数据结构.顺序表
线性表()是个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构,。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。
2024-05-25 20:11:22
559
原创 C语言.动态内存管理
栈区(stack):在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。栈区主要存放运行函数而分配的局部变量、函数参数、返回数据、返回地址等。堆区(heap):一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS(操作系统)回收。分配方式类似于链表。数据段(静态区):(static)存放全局变量、静态数据。程序结束后由系统释放。
2024-05-16 14:05:08
627
原创 C语言.自定义类型:联合和枚举
但是编译器只为最大的成员分配足够的内存空间。联合体的特点是所有成员共用一块内存空间。上述的结构其实设计的很简单,用起来也方便,但是结构的设计中包含了所有礼品的各种属性,像结构体一样,联合体也是有一个或多个构成,这些成员可以是不同的类型。因为对于礼品兑换单中的商品来说,只有部分属性信息是常用的。,这样就可以介绍所需的内存空间,一定程度上节省了内存。枚举顾名思义就是⼀⼀列举,把可能的取值⼀⼀列举。{}中的内容是枚举类型的可能取值,也叫。这些数据的表示就可以使用枚举。输出的三个地址一模一样,
2024-05-05 09:25:59
1008
原创 C语言.自定义类型:结构体
位段的成员必须是intunsignedint或signedint,在C99中位段成员的类型也可以选择其他类型。位段的成员后面有一个冒号和一个数字。//单位是字节int _b : 3;int _c : 4;A就是一个位段类型。那位段A所占内存空间大小是多少?
2024-04-30 22:51:28
941
原创 C语言.字符函数与字符串函数
是0,表示没有错误,当我们在使用标准库中的函数的时候发生了某种错误,就会将对应的错误码,存放在。通过返回值来说明是否是小写字母,如果是小写字母就返回非0的整数,如果不是小写字母,则返回。中,而一个错误码的数字是整数很难理解是什么意思,所以每一个错误码都是有对应的错误信息的。C语言中有一系列的函数是专门做字符分类的,也就是一个字符是属于什么类型的字符的。在不同的系统和C语言标准库的实现中都规定了一些错误码,一般是放在。这个头文件中说明的,C语言程序启动的时候就会使用一个全局的变量。是能够判断参数部分的。
2024-04-22 21:26:49
675
1
原创 C语言.指针(6)
这是上一节指针(5)最后的七道代码题的详解。这七道题目,是对前面五节课关于指针内容回顾的综合题目,难度比较大,耐心一点看,尽量把题目吃透,对以后的数据结构的分析有帮助。
2024-04-13 18:22:34
1289
原创 C语言.指针(5)
计算变量所占内存内存空间大小的,单位是字节,如果操作数是类型的话,计算的是使用类型创建的变量所占内存空间的大小。只关注占用内存空间的大小,不在乎内存存放的是什么数据。是C语言库函数,功能是求字符串长度。字符,直到找到为止,所以可能存在越界查找。之前字符串中字符的个数。中这个地址开始向后,
2024-04-11 09:08:55
418
1
原创 C语言.指针(4)
只有调用函数的逻辑是有差异的,可以把调用的函数的地址以参数的形式传递过去,使用函数指针接收,函数指针指向什么函数就调用什么函数,这里其实使用的就是。,有一部分代码是重复出现的,其中虽然执行计算的逻辑是区别的,但是。使用回调函数,模拟实现qsort(采用冒泡的排序方式),有没有办法,简化⼀些呢?
2024-04-06 13:11:08
612
1
原创 C语言.指针(3)
如果我们将函数的地址存放起来,就得创建函数指针变量,函数指针变量的写法与数组指针非常类似。那要把函数的地址存到一个数组中,那这个数组就叫的函数指针数组,用函数指针的数组如何定义?数组指针变量是用来存放数组地址的,那怎么获得数组的地址呢?确实打印出了地址,所以函数是有地址的,函数名就是函数的地址,当然也可以通过。这里的实参是二维数组,形参也可以写成二维数组的形式,还有其他的写法吗?调试之后,发现 p与 &arr 的类型是完全一致的。指针数组是一种数组,数组中存放的是地址(指针)。是数组,数组的内容是什么呢?
2024-04-02 23:19:45
791
1
原创 C语言.指针(2)
这里我们使用输出结果:我们发现数组名和数组首元素的地址打印出的结果一摸一样,。这时候有同学会有疑问?数组名如果是数组首元素的地址,那下面的代码怎么理解呢?,如果arr是数组首元素的地址,那输出应该的应该是才对。三个打印结果一摸一样,这时候又纳闷了,那和有啥区别呢?
2024-03-30 21:35:37
601
1
原创 C语言.指针的基本语法(1)
我们知道计算机上CPU(中央处理器)在处理数据的时候,需要的数据是在内存中读取的。处理后的数据也会放回内存中。那我们买电脑的时候,电脑上内存是8G/16G/32G等,那这些内存空间如何高效的管理?其实,每一个内存单元,一个字节空间里面能放,而每个内存单元也都是有一个编号,有了这个内存单元的编号,。在计算机中我们把。
2024-03-24 20:51:27
693
1
原创 C语言.操作符的基本语法(2)
代码1:变量的定义int x;int y;}p1;//声明类型的同时定义变量p1//定义结构体变量p2//代码2struct Stu//名字int age;//年龄//初始化//指定顺序初始化//代码3int date;//结构体嵌套初始化//结构体嵌套初始化使用方法:结构体变量.成员名即使有了操作符的优先级和结合性,我们写出的表达式依然有可能不能通过操作符的属性确定唯一的计算路径,那这个表达式就是存在潜在风险的,建议不要写出特别复杂的表达式,可拆开写。
2024-03-19 23:23:46
785
1
原创 C语言.扫雷游戏
扫雷游戏代码的实现主要基于前面学习的数组和函数,进行一个阶段性的总结。函数的调用、数组传参、VS调试等内容。写体量大的代码时,学会把整体分成几部分来写,好处是:效率高,整体性更好(容易梳理代码);写完一部分时,记得调试一下,确定代码跑起来符合预期时,再继续往下写。在写扫雷的时候,会遇到各种各样的问题,一定要调试。还有就是给自己一些时间来适应。
2024-02-09 17:47:40
947
1
原创 C语言.VS2022使用调试技巧
bug本意是“昆虫”或“虫子”,现在一般是指在电脑系统或程序中,隐藏着的一些未被发现的缺陷或问题,简称程序漏洞。当我们发现程序中存在的问题的时候,那下一步就是找到问题,并修复问题。这个找问题的过程叫称为调试,英文叫debug(消灭bug)的意思。调试一个程序,首先是承认出现了问题,然后通过各种手段去定位问题的位置,可能是逐过程的调试,也可能是隔离和屏蔽代码的方式,找到问题所的位置,然后确定错误产生的原因,再修复代码,重新测试。
2024-02-07 18:05:02
1042
2
原创 C语言.(三)函数.函数递归
递归就是某一事物直接或间接地由自己组成。在C语言中,递归就是函数自己调用自己。//在 main 函数又调用了 main 函数return 0;上述的就是一个简单的递归程序,只不过上面的递归是为了演绎递归的基本形式,不是为了解决问题,代码最终也会陷入死递归,导致栈溢出。
2024-02-06 18:33:56
613
原创 C语言.(二)函数的基本语法
一般我们在使用函数的时候,直接将函数写出来就使用了。例子:写一个函数判断一年是否是闰年。//判断一年是否是闰年int is_leap_year(int y)//一整段都是函数的定义return 1;//函数的调用printf("是闰年\n");elseprintf("不是闰年\n");return 0;上面代码的第 4~14 行是函数的定义第 21 行是函数的调用。
2024-02-05 21:08:18
832
1
原创 C语言.(1)函数的基本概念
ret_type fun_name(形式参数) {ret_type是函数的返回类型它是用来表示计算结果的类型,有时候返回类型可以是void表示什么都不返回。fun_name是函数名他是为了方便使用函数,尽量要根据函数的功能起的有意义。括号放的是形式参数函数的参数也可以是void明确表示函数没有参数。如果有参数,要交代清楚参数的类型和名字,以及参数个数。{ }是函数体它是为了完成计算的过程。
2024-02-03 15:48:20
1085
1
原创 C语言.(3)字符数组的基本语法
字符串是指若干有效字符的序列。包括字母、数字、专用字符、转义字符等等。"39.4" "%d\n" "解放军"字符串存放在一个字符型数组中,因此为了存放字符串,常常在程序中定义字符型数组。表示 str 是一个字符型数组,可以放 8 个字符int main()int i = 0;for (i = 0;i < 8;i++)//%c 打印字符return 0;字符数组的起始地址就是第一个元素的存储地址。C语言中是以 ‘\0’ 字符作为字符串结束标志的,所以。
2024-02-01 20:48:05
660
1
原创 C语言.(二)二维数组的基本语法
在 C99 标准之前,C语言在创建数组的时候,数组大小的指定只能使用常量、常量表达式,或者如果我们初始化数据的话,可以省略数组大小。像一维数组一样,我们如果想研究二维数组在内存中的存储方式,我们也是可以打印出数组所有元素的地址的。有语法限制,创建的数组不够灵活,有时候数组大了浪费空间,有时候数组小了又不够。上一节学习的数组被称为一维数组,数组的元素都是内置类型的,其实我们只要能够按照一定的规律产产所有的行和列的数字就行;在创建变量或者数组的时候,给定⼀些初始值,被称为初始化。C99中给一个变长数组(
2024-01-30 16:31:59
755
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人