- 博客(22)
- 收藏
- 关注
原创 字符串-String类
我们可以看到,同样的拼接10000次,String的效率非常慢,而StringBuilder和StringBuffer的效率却非常快,这是因为String在拼接时会不断的进行产生新的对象,而StringBuilder和StringBuffer则是直接用当前的对象进行拼接,这就导致了String的效率慢,,因此:尽量避免对String的直接需要,如果要修改 建议尽量使⽤StringBuffer或者StringBuilder。·先按照字典次序⼤⼩⽐较,如果出现不等的字符,直接返回这两个字符的⼤⼩差值。
2025-06-10 15:50:21
676
原创 抽象类和接口(全)
(3)抽象类必须被继承,并且继承后子类要重写父类中的抽象方法,否则子类也是抽象类,必须要使用abstract修饰(如果子类也是抽象类,那么它的子类要重写其父类和父类的父类的抽象方法)在Java中,⼀个类如果被 abstract 修饰称为抽象类,抽象类中被abstract 修饰的⽅法称为抽象⽅法,抽象⽅法不⽤给出具体的实现体。在上述代码中,实际工作是由子类完成的,那么如果误用成了父类,普通的类编译器不会报错,但是父类是抽象类就会在实例化的时候提示错误,尽早发现问题。即:⽤ 接⼝可以达到多继承的⽬的。
2025-06-09 20:09:17
1264
原创 多态(全)
当类的调⽤者在编写 eat 这个⽅法的时候,参数类型为Animal(⽗类),此时在该⽅法内部并不知道, 也不关注当前的a引⽤指向的是哪个类型(哪个⼦类)的实例.此时a这个引⽤调⽤eat⽅法可能会有多种 不同的表现(和a引⽤的实例相关),这种⾏为就称为多态.(5)重写的⽅法,可以使⽤ @Override 注解来显式指定.有了这个注解能帮我们进⾏⼀些合法性校验. 例如不⼩⼼将⽅法名字拼写错了(⽐如写成aet),那么此时编译器就会发现⽗类中没有aet⽅法,就 会编译报错,提⽰⽆法构成重写.
2025-06-04 20:46:00
402
原创 继承(全)
• 在构造⽅法中:this(...)⽤于调⽤本类构造⽅法,super(...)⽤于调⽤⽗类构造⽅法,两种调⽤不能 同时在构造⽅法中出现。• this是当前对象的引⽤,当前对象即调⽤实例⽅法的对象,super相当于是⼦类对象中从⽗类继承下来部分成员的引⽤。组合和继承都可以实现代码复⽤,应该使⽤继承还是组合,需要根据应⽤场景来选择,⼀般建议:能 ⽤组合尽量⽤组合。• 在⾮静态成员⽅法中,this⽤来访问本类的⽅法和属性,super⽤来访问⽗类继承下来的⽅法和属性。
2025-06-02 16:00:49
1021
原创 类和对象(二)
1.封装可以降低对象和对象之间的耦合度,当对象内部发⽣变化时,只需要修改对象内部即可,不会影 响到外部程序,因为公开的接⼝是不会发⽣改变的。(4)静态⽅法中不能调⽤任何⾮静态⽅法,因为⾮静态⽅法有this参数,在静态⽅法中调⽤时候⽆法传 递this引⽤。如果我们在定⼀个类的时候,如果没有指定成员变量/成员⽅法的访问权限,此时默认的访问权限就是 包访问权限。static-->静态成员⽅法,是类的⽅法,不是某个对象所特有的。(1)不属于某个具体的对象,是类的属性,所有对象共享的,不存储在某个对象的空间中。
2025-06-02 14:45:59
546
原创 类和对象(一)
4.this是“成员⽅法”第⼀个隐藏的参数,编译器会⾃动传递,在成员⽅法执⾏时,编译器会负责将 调⽤成员⽅法对象的引⽤传递给该成员⽅法,this负责来接收。定义了⼀个类,就相当于在计算机中定义了⼀种新的类型,⽤类类型创建对象的过程,称为类的实例化,在java中采⽤new关键字,配合类名来实例化对象。this引⽤指向当前对象(成员⽅法运⾏时调⽤该成员⽅法的对象),在成员⽅法中所有成员变量的操作, 都是通过该引⽤去访问。5.如果⽤⼾没有显式定义,编译器会⽣成⼀份默认的构造⽅法,⽣成的默认构造⽅法⼀定是⽆参的。
2025-06-02 14:01:04
745
原创 JAVA与C语言之间的差异(二)
在C语言中,可以直接再循环条件处写1,表示死循环,直到执行break才可以跳出,但是在JAVA中不可以,JAVA中这里的表达式必须是通过关系运算符进行判断后结果为true或false才可以!方法的重载可以简单理解为有几个同名的方法同时存在,他们之间参数列表不同,这样编译器在编译代码时会对实参进行推演,根据推演结果确定调用哪个方法(简单来说就是那个最合适用哪个)C语言中不支持两个同名的函数同时存在,而在我们高贵的JAVA中可以!不规则的⼆维数组指的是,⼆维数组的列在定义的时候,没有确定。
2025-05-29 22:04:33
543
原创 JAVA与C语言之间的差异(一)
关于布尔类型,需要注意的是,在JAVA语言中,只有true和false两种写法,不存在1表示true,0表示false这种用法!JAVA的标识符中可以包含:字母、数字以及下划线和$符号等等,但是不可以以数字开头,关键字也不行,并且要严格区分大小写!如果是数据范围小的转为数据范围大的时,编译器会自动进行处理,自动转换为数据范围大的(自动类型转换(隐式))<<是左移,即最左侧不要,最右侧补0(丢弃的是符号位,所以可能会变号);>>是左移,即最右侧不要,最左侧补符号位(正数补0,负数补1);
2025-05-29 20:48:28
581
原创 C语言中的操作符详解
8进制的数字每⼀位是0~7的,0~7的数字,各⾃写成2进制,最多有3个2进制位就⾜够了,⽐如7的⼆ 进制是111,所以在2进制转8进制数的时候,从2进制序列中右边低位开始向左每3个2进制位会换算⼀ 个8进制位,剩余不够3个2进制位的前面补0换算。其实10进制的123表⽰的值是⼀百⼆⼗三,为什么是这个值呢?C语⾔已经提供了内置类型,如:char、short、int、long、float、double等,但是只有这些内置类 型还是不够的,假设我想描述学⽣,描述⼀本书,这时单⼀的内置类型是不⾏的。
2025-05-05 10:38:52
1061
原创 青蛙跳台问题和汉诺塔问题(递归的拓展)
(2 * hanoi(n - 1) + 1)的意思是,现在有n个圆盘(n>1),首先要做的是将上面的n-1个圆盘 移动到辅助柱上(hanoi(n - 1)),然后再去进行下一步,移动最大的圆盘到目标柱上(1),最后还需要再次将辅助柱上的n-1个都放到目标柱上(hanoi(n - 1)),加到一起就有了(2 * hanoi(n - 1) + 1)不妨将问题倒过来看,青蛙的目的是要跳上台阶,那么最后要么是在n-1的位置跳一下,要么是在n-2的位置跳两级台阶于是,这个问题就变成了这个样子。1.什么是汉诺塔问题。
2025-05-04 12:33:50
696
原创 函数的递归
函数不返回,函数对应的栈帧空间就⼀直占⽤,所以如果函数调⽤中存在递归调⽤的话,每⼀次递归 函数调⽤都会开辟属于⾃⼰的栈帧空间,直到函数递归不再继续,开始回归,才逐层释放栈帧空间。递归是⼀种很好的编程技巧,但是和很多技巧⼀样,也是可能被误⽤的,就像举例1⼀样,看到推导的公式,很容易就被写成递归的形式,但是在递归函数调用的过程中会涉及到一些运行时的开销。事实上,我们看到的许多问题是以递归的形式进⾏解释的,这只是因为它⽐⾮递归的形式更加清晰, 但是这些问题的迭代实现往往⽐递归实现效率更⾼。⾃然数n的阶乘写作n!
2025-05-04 10:53:21
1029
原创 VS2022实⽤调试技巧
当程序员写完代码,测试再对程序进⾏测试,直到程序的质量符合交付给⽤⼾ 使⽤的标准,这个时候就会设置为 release ,编译产⽣的就是 release 版本的可执⾏程序,这个 版本是⽤⼾使⽤的,⽆需包含调试信息等。调试⼀个程序,⾸先是承认出现了问题,然后通过各种⼿段去定位问题的位置,可能是逐过程的调 试,也可能是隔离和屏蔽代码的⽅式,找到问题所的位置,然后确定错误产⽣的原因,再修复代码, 重新测试。在打开内存窗⼝后,要在地址栏输⼊:arr,&num,&c,这类地址,就能观察到该地址处的数据。
2025-05-03 17:53:16
759
原创 趣味扫雷游戏(数组和函数的实践)
假设我们排查(2,5)这个坐标时,我们访问周围的⼀圈8个⻩⾊位置,统计周围雷的个数是1 假设我们排查(8,6)这个坐标时,我们访问周围的⼀圈8个⻩⾊位置,统计周围雷的个数时,最下⾯的三 个坐标就会越界,为了防⽌越界,我们在设计的时候,给数组扩⼤⼀圈,雷还是布置在中间的9*9的坐 标上,周围⼀圈不去布置雷就⾏,这样就解决了越界的问题。这⾥我们采⽤另外⼀种⽅案,我们专⻔给⼀个棋盘(对应⼀个数组mine)存放布置好的雷的信息,再 给另外⼀个棋盘(对应另外⼀个数组show)存放排查出的雷的信息。
2025-05-03 15:46:09
1387
原创 C语言中的函数
以上完整的代码中,int Add(int x, int y)就是一个函数,其中要返回x+y的值,所以返回类型为int,也就是返回一个整数,Add则是这个函数的函数名,( )内部则分别是将输入的数据a和b进行传参,分别用x和y接收(参数的类型,数量要保持一致)。这些函数就被称为库函数。C语⾔中的函数就是⼀个完成某项特定的任务的⼀⼩段代码。代码2中,我们从输出结果来看,i的值有累加的效果,其实test函数中的i创建好后,出函数的时候是 不会销毁的,重新进⼊函数也就不会重新创建变量,直接上次累积的数值继续计算。
2025-05-03 11:22:13
1257
原创 数组(完整版)
有 ⼀个⽐较迷惑的点,变⻓数组的意思是数组的⼤⼩是可以使⽤变量来指定的,在程序运⾏的时候,根据变量的⼤⼩来指定数组的元素个数,⽽不是说数组的⼤⼩是可变的。前⾯学习的数组被称为⼀维数组,数组的元素都是内置类型的,如果我们把⼀维数组做为数组的元 素,这时候就是⼆维数组,⼆维数组作为数组元素的数组被称为三维数组,⼆维数组以上的数组统称 为多维数组。(我们只讨论一维数组和多维数组)数组如果进⾏了初始化,数组的⼤⼩是可以省略掉的。存放在数组的值被称为数组的元素,数组在创建的时候可以指定数组的⼤⼩和数组的元素类型。
2025-05-02 20:41:53
1038
原创 分支和循环的应用(猜数字游戏)
1.首先,跟就我们上面的内容,写出主函数,也就是游戏的主体,在这里,使用menu来存放我们的游戏菜单,使用game来存放我们的游戏代码(用menu和game存放代码是函数的内容,这里不清楚没关系,把他们直接替换成存放的代码也可以正确运行)。7.用scanf让玩家进行输入,输入数据后我们要对数据进行判断,可以使用if的嵌套,输入的数过小或过大我们要及时的输出来提醒玩家,当然,如果输入正确,那么告诉玩家猜对了。2. 玩家猜数字,猜数字的过程中,根据猜测数据的⼤⼩给出⼤了或⼩了的反馈,直到猜对,游戏结束。
2025-05-02 15:57:05
756
原创 三种循环(while、for、do-while)
0则执⾏循环语句,循环语句执⾏完后,再去执⾏表达式 3 ,调整循环变量,然后再去表达式 2 的地⽅执⾏判断,表达式 2 的结果是否为0,决定循环是否继续。2.要想去掉n的最低位,找出倒数第⼆位,则使⽤ n=n/10 操作就可以去掉最低位的,如: n=1234/10得到123,123相较于1234就去掉了最低位,123%10就得到倒数第⼆位3。前⾯学习了三种循环 while , do while , for ,这三种循环往往会嵌套在⼀起才能更好的解决 问题,就是我们所说的:循环嵌套,这⾥我们就看⼀个例⼦。
2025-05-02 15:00:10
902
原创 分支(if、switch)
| 就是或运算符,也就是或者的意思, || 也是⼀个双⽬操作符,使⽤的⽅式是 a || b , || 两边的表达式只要有⼀个是真,整个表达式就是真,两边的表达式都为假的时候,才为假。&& 就是与运算符,也是并且的意思, && 是⼀个双⽬操作符,使⽤的⽅式是 a&&b , && 两边的表达式都是真的时候,整个表达式才为真,只要有⼀个是假,则整个表达式为假。(2)对于||来说,两侧有一个为真就判断为真,若是左侧判断为真,则会短路,直接判断为真,不再继续进行右侧的判断或是计算。
2025-05-02 11:03:52
897
原创 C语言中 scanf 和printf
上⾯⽰例中, scanf() 读取⽤⼾输⼊时, %d 占位符会忽略起⾸的空格,从 处开始获取数据,读取到-13 停下来,因为后⾯的 . 不属于整数的有效字符。为了防⽌这种情况,使⽤%s 占位符时,应该指定读⼊字符串的最⻓⻓度,即写成 %[m]s ,其中的[m]是⼀个整数,表⽰读取字符串的最⼤⻓度,后⾯的字符将被丢弃。上⾯⽰例中, name 是⼀个⻓度为11的字符数组,scanf() 的占位符 %10s 表⽰最多读取⽤⼾输⼊的10个字符,后⾯的字符将被丢弃,这样就不会有数组溢出的⻛险了。
2025-05-01 22:05:26
586
原创 C语⾔数据类型和变量
不同的系统中,返回值的类型有可能是 unsigned int ,也有可能是unsigned long ,甚⾄是unsigned long long ,对应的 printf() 占位符分别是%u 、 %lu 和%llu。sizeof 在代码进⾏编译的时候,就根据表达式的结果的类型,推到并确定了类型的⻓度,⽽表达式 真要被执⾏,却要在程序运⾏期间才会发⽣,如果在编译期间已经将 sizeof 处理掉了,所以在运⾏ 期间就不会执⾏表达式了。原因就在于C语⾔⾥⾯的整数除法是整除,只会返回整数部分,丢弃⼩数部分。
2025-05-01 21:18:54
579
原创 C语言中的常见概念
这就是转义字符的问题, \n 是⼀个转义字符表⽰换⾏的意思,我们可以简单的理解为 \ 让 n 的意思 发⽣了转变, n 本来是⼀个普通的字符,被 \ 转义为换⾏的意思。在键盘上可以敲出各种字符,如:a,q,@,#等,这些符号都被称为字符,C语⾔中字符是⽤单引号 括起来的,如:'a','b','@'。写注释⼀定程度上反应了程序作者的素质,建议⼤家写必要的注释,在未来找⼯作的时候,写代码时 留下必要的注释也会给⾯试官留下更好的印象。双引号⾥⾯的注释符号,会成为字符串的⼀部分,解释为普通符号,失去注释作⽤!
2025-05-01 16:31:52
803
原创 【无标题】
同时,积极参与开源项目,和其他开发者交流合作,学习他们的编程思路和经验,提升自己的实战能力。此外,定期阅读技术博客和行业报告,保持对新技术的敏锐度,拓宽自己的技术视野。我渴望能在这样的平台上,接触到最前沿的技术,与优秀的团队成员一起成长,实现自己的技术梦想。在日常的生活中,我常常惊叹于各种软件和应用程序的神奇功能,它们不仅便捷了我们的生活,更激发了我对编程的浓厚兴趣。我叫寻星探路,非常开心能够在这里开启我的编程学习之旅,同时也想通过这篇博客记录下自己的成长足迹,和大家分享我在编程之路上的点点滴滴。
2025-03-29 23:16:34
225
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人