粉丝326获赞3321

告别丑陋代码 string string 格式化魔法啊! c 加加,为什么拼接个字母串这么麻烦?我要把名字、分数和等级拼在一起,还要转格式,写了一堆 to string, 手都断了。由于类型不匹配,代码里充斥着强制类型转换,像打满补丁的旧衣服。 这是怎么了?还没进门,就听到有人在抱怨 c 家家难用,老爸,你快看,这代码丑的我自己都不想读了。四、这确实是典型的暴力拼接,虽然能跑,但既不优雅又容易出错。儿子,是时候让你见识一下 c 家家标准库里的格式化魔术师了。 我们要用的神器叫 stream。 stream, 你 需要引入头文件 stream, 把它想象成一个万能管道,你不管往里面扔整数、浮点数还是字母串,它都能照单全收看,这就叫流操作符。不需要 to stream, 也不需要管类型,直接往里塞就行了。 哇,这就行了!所有的类型转换,它自己都在内部搞定了。这代码看起来比刚才那个清爽太多了。没错,最后只需要调用 s t r 方法,就能把管道里的东西变成一个完整的 string 对 象拿出来。但是这个神器有个巨大的坑,百分之九十的新手都会掉进去。 我知道了,那我如果要在循环里拼接好几个人的信息,我就一直用这个 s s 变量,这下作业能描写完了。 咦,怎么第二次拼接的数据变奇怪了,怎么把上一次的也带出来了?这就叫流的残留。如果你想附用 stream stream 必须做两件事,第一,清空内容。第二,重置状态。很多人只写 s p r, 但如果流之前读写出错了,不调用 clear, 它就会一直处于罢工状态,拒绝工作。 搞定用 string, string 果然又快又好,感觉自己已经是 c 一 家家高手了。哼,别高兴的太早。如果只是拼两个简单的字母串,这玩意比起直接用加或者编的,性能可是慢不少的。杀鸡焉用牛刀,懂吗? 嗨嗨妈妈说的对, string string 用的优势在于混合类型的格式化拼接。如果是纯字母串的高性能拼接,还是老老实实优化内存分配吧。但在做日记记录复杂报表生成时,它是最省心的。 记住工具,没有绝对的好坏,只有适不适用。下期预告,如何像特工一样从字幕串里提取数据? string 使用的逆向操作?

啊,还有一个的话叫出尺寸,出尺寸干嘛呢?就是把一个数组转换成一个什么,一个字不串啊?啊,接下来的话,我们这边再看一下出尺寸这个方法,他长什么样子啊?大家看啊,现在这里面我们有一个数组,这数字写好了之后,大家看啊,我调用这个 lv 的什么出尺寸这个方法 啊,那这样呢?之后我直接打开了这个返回结果啊,以及打印一下原速度本身。好,那大家看一下他出来的这个结果长什么样子呢?好,算一下。 好,那这边的话,大家看他在这边出来的这结果这个东西啊,就是把竖中的元素用逗号把它拼接起来,大家看这竖中的元素用逗号拼接起来啊,求尺寸,他就会把这个什么 会啊,把数组中的什么中的这个元素的这个什么元素的这一个个数啊, 我把竖中的元素使用这个什么逗号怎么拼接起来,明白吗?好,那这边呢就是他的这一个竖中的元素用逗号拼接起来,那元素组本身啊,大家看一下元素组本身 不会造成什么造成变化,明白吧?好,那这个呢就是我们说的出什么尺寸好,就说如果啊,我们现在有几个要如果,我们现在 希望数组啊的元素是通过什么,通过其他的这个制服拼接 该如何处理呢?你看初尺寸,他默认的话是用什么初尺寸,他是逗号拼接的吗?我们如果不喜欢用逗号,那有没有其他的办法呢?啊?也有的,我们再给大家讲。

好了,接下来我们再来看一个什么呢?看一个比较重要的一个方法啊,哪个呢?有一个叫 q 十俊方法, 来看下这个方法啊,这个方法的话,那么呢他表示满意啊。 q 十俊方法呢是用来去返回该对象的一个字母串的,哎,我们看一下啊, two 使劲。 接下来这个方法的作用呢?是返回他, 然后呢这个方法是对应的代码,我们把这个原码原版版原码,等会我们先来看一下啊,先来看下效果怎么做呢?同样, 咱们这里现在不是有个坑对象吗?对吧?有个坑对象在这里面啊,然后呢,我们在这呢,呃,这会在忙呢, 算了,再见。一个隔离开了,叫阿波杰克乔丹,某零四。 然后呢,建一个克拉斯, 我们叫嗯,叫叫叫叫 apple, 建个类型就可以了啊。然后呢,这套里面呢,我们可以这样再建一个普拉维特,樱桃 普洱,白菜思君 no, 不如爱白菜。 呃,这呢给一个 apple 苹果 苹果对象,我们去。不太好,给个丢点车。 uzi 今天有了,给个 uze 一吧,耐磨,给个印子 aj。 好。然后呢我们这呢把他们对应的那个 get 的方法加一下啊, 然后呢在这呢先去加一下购物的方法 来,这就是我们创建一个什么一个普通类型啊,然后呢我们在这里面呢来看一下。那么我获取一个有点一有一,等于留一个什么呢?有点 一,然后取一个名称,我们叫张三,一个年龄十八,对吧?这是一个,然后呢再来一个, 再来一个,然后呢一个于二,一个李四, 对吧?给一个二十, 好,然后呢我们在这呢再输出一下啊, soso 输出什么呢?输出一点 t 恤, 再来一个 sos o, 给个 u 二点 q 使劲。 好,接下来我们再来调这个推出去方法啊,我们来看一下他在描述的是什么呢?返回对象的制服串 表示,哎,这个是什么含义?注意啊,这个是什么含义?我们来看一下效果啊,来走直行, 你会发现呢,这返回结果呢,是一长券,我们看不懂的东西,然后呢,你仔细去看一下,你会发现呢?这长券看我们波波波波介绍点一点一,这是我们当前对象所对的类型的一个什么船类路径名称, 对吧?全列录制名称,而后面这个呢?哎,爱的房后面跟了一长圈,这个是什么?十六进制的数字,这个是用来干嘛的?我们不知道,这样我们不知道啊,但是你能够看出来是什么呢?你能够看出来,其实 你看 u 一跟 u 二这两个对象,他们所对的这两个值是不一样的,我们再执行一遍啊,我们来看一下四二九 c, 对吧?四二九 c, 那么这里面呢,这两个都是不一样的,那么他们表示什么含义呢?注意这块呢,我们可以看一下原版啊,原版里面其实讲的很清楚,来,我们点开他,点开他之后之后你会发现呢,在这里面使劲 就是用方法返回这个支付券,而支付券的,你看啊, get clus 点概率,那么那么在他前面是不是有一个隐含的什么瑞士点盖茨克拉斯点盖的,那么吧,那么他是不是干嘛?或许当前对象的类型的,什么 类型的?全类六进名称与引体,这 thutix 俊,然后哈西扣的,那么这呢是干嘛呢?获取他的一个哈西值,也就是内存地址所对应的那个什么哈西值,然后呢将它转换成为了十六进制,所以通过这一块代码,其实我们也就搞清楚了这个 q 十俊方法, 对吧?这个 q 十俊方法它里面的这个含义,那这样其实有一个隐藏的瑞士, 对吧?那么他这呢,也就是我们打印出来的这个结果,注意啊,打印出这个结果,他表示的含义呢? 他表示含义,其实就是嘛?其实就是,呃 q 使劲方法, 方方法,默认返回的是什么?是累 船类路径类路径名称 加什么了?加艾特符号,再加什么了?再加那个哈西扣的的什么十六进字, 注意啊,十六禁止,所以呢是这样一个含义,在这里面啊,也就是这个求实军方法,我们在执行的时候得到这个结果,那么他的一个组成,那么通过这个结果呢?其实我们可以干嘛?可以判断,哎,这两个对象是不是一致的?因为什么?因为你这个是十六禁止,其实他代表就是买,就是我们讲的这个对象在内存中的一个地址, 对吧?那你看如果是同一个对象,那么 u 一你在这里输出多次,那么我告诉你,那么他输出结果,对吗? 都是一样的,那么这个其实就表示嘛,就表示,哎,他是同一个对象,对吧?但是如果说你看一二,跟前面的不相 相同,内存地址不相同,说明什么?说明不是同一个对象,明白了吧?这是这一点啊。好,这是这块,然后我们再来看,那么 除了上面以外呢?我们经常再去,呃,对啊,呃,我们经常会干嘛呢?会在打印语句中直接什么输出对象,那就 sol, 然后呢?在它里面来干嘛呢? sy 收,然后呢? u e s y 收 u 二,对吧?也就是干嘛直接把这个 u 一二输出了,我们看一下走一个发现,哎, u 一二直接输出的话,那么 输出结果跟上面是不是一模一样的,对吧?一模一模一样的啊,所以这一点是什么?大家去注意,就是呃呃输出语句这种啊,这种语句, 这种语句就是呃输出语句输出一个什么?输出一个引用 类型的时候,那么默认调用默认调用了什么了?引用类型的 训方法输出,这个也要去注意啊,也就是你在输出局里面,你直接去把一个对象输出的话,那么他其实默认的干嘛?默认的调用的就是什么?就是我们所讲的这个就是训方法, 注意啊,就是方法啊,所以这一块呢,同样的大家呢也得干嘛了?也得去注意一下,也就是我们后面,那么我们想要简化一下啊,简化一下这个输出后,你直接把对象输出,那么呢就可以了。好,这是 这一款,然后呢还有一点呢是什么呢?还有一点就是大家会发现我掉这个 q 十圈方法输出的时候, 除了能够分辨出来什么这两个对象是不是同一个对象以外,那么我们获取不到这个对象里面有用的信息,对吧?所以呢,这个我们直接打印的时候用到的,也其实用处并不是太大,那么他有没 有更好的一个方式呢?因为我们知道直接输入对象,他其实第二个是求实训方法吗?对不对?而我们知道这个求实训方法,你会发现呢, 他就是一个普通方法,他没有被快乐修饰,那也就意味着是可以重写的,对吧?你看他里面默认的是是不是嘛?输出啊,内名加 地址的石榴金值值,对吧?那在这里我是不是可以这样怎么做呢?我在 uzi 里面,我去重写一下 qqqqqqq 号码 来看一下啊 q 使劲方法重写一下,然后呢?在它里面呢? 这个瑞特返回的是什么呢?返回的是认识点 mam 加上再加上认识点 爱情, 来看一下这样是不是可以,也就是我去重写啊,我去重写这个 q 试卷方法也就在这里面啊,我跟你讲, 因为呃,默认的 qs 郡方法输出的内容并没有太大的意义, 而且 qs 菌方法 本身 本身就是奥博健卡中的一个普通的成员方法,所以我们所以 以我们可以干嘛呢?我们可以尝试,我们可以尝试呃自己 重写该方法,对吧?那重写的话,那就这样喽,对吧?就重写了,重写之后我们再来执行,看下效果啊。来走, 你会发现张三,张三,你是?哎,那这样一来的话,我把这个对象给打印出来,那么能够可以干嘛?可以把一些比较关键的信息给输出出来,这样是不是我们在后面在调用的时候也好在是吧, 再去比较的好,那么其实都是嘛,都是相对来说会更加的直观一些,注意啊,直观一些啊,所以这个时候我们讲干嘛你可以去重写这个求实军方法,注意啊,就是这一点啊。好,那这块 ok, 之后我们再来看一下,就说那我每次 要去手动去重写这个跳出去方法,是不是会显得比较繁琐一点,那么有没有快捷键呢?其实之前的大家如果说比较细致的话,你会发现我们右键 硕士的时候,他里面其实选项比较多,对吧?那么里面也算 oproree 的,或者 emple max max, 这个是重写或者实现某些方法, 对吧?在这里面可以干嘛呢?你去勾选像 qq 输出方法,你可以勾一下,对吧?就是这个啊,这个是可以的,还有呢就是你的右键在硕士里面,你会发现呢,其实这里面还有一些快捷键,比方说坚特瑞特,盖特塞特,对吧?啊? 杰瑞瑞斯带来给你们,是的,是吧?杰瑞瑞克的一克斯可以把生存哈气扣的跟一克斯这两个可以重写的啊,但是我们现在没有讲到,我们后面会去说的啊,还有杰瑞瑞找 q 十俊,对吧?你看生成一个 qq 方法,那你点呗, 点了之后,那么在这呢,你可以去勾一下,就是我要生成的这款求生方法要打印哪些字段,那么呢,你看我把内蒙跟 a 级勾一下,对吧?然后点击, ok, 那你们发现了他就会帮我们生成一个,是吧?甚至在一个 qq 群方法,然后在 qq 群方法里面呢,会帮我们把该对象中的相关的属性给打印出来,然后这样写了之后呢,我们就来再执行一下啊,来走, 你会发现六点一,对吧?六点一,然后呢里面张三李四是不是就都输出了? 那这样一来我再去打印一个什么?打印一个对象的时候,是不是就可以把这个对象中的相关的关键信息就给打印出来了?这个是不是就比什么?比我们自己去写要方便一些,对吧?比直接要用,就是默认方法呢?要更加的直观一些,好吧?这个呢?就是 确实性化的一个作用啊,就是干嘛?就是用来去做我们这个,呃,稀稀疏疏的,好吧?好,这个我们就讲到这里面啊,这个代码我们 就到这吧, 这是这款。

今天呢我们一块来看一下啊方法的覆盖,覆盖呢啊要求啊是发生在继承里边,比如说呃此类呢需要重写复类的同名方法 什么场合需要覆盖呢?比如说当紫雷中定义的方法不适合紫雷去使用, 那需要你进行扩展啊,这就是说需要子类重新定义,那么子类定义的方法怎么呢会对外而言啊,注意一下是对外啊。呃在外部用户使用的时候那么就可以啊通过覆盖啊调用子类的方法而不是使用的是副类的方法。 方法的覆盖呢有这样两个原则第一个方法的名字和参数啊要求和复类 保持一致,同时呢方方在子列中啊方法的修饰符必须他的范围必须要大于或者等于副类同明方法的修饰符,那么这个范围呢咱们之前也说过啊,也说是什么情况呢啊?呃 public 最大,那么 无休是福是第二还有一个什么情况呢?是 private 啊, private 最小啊,如果说你的范围缩小的话那么这个地方呢会报错会报错,所以咱们首先第一个呢来过一会呢来定一个学生类,咱们一块来看啊。 那么学生类呢目前啊呃定义了两个属性,一个是学号啊,一个是学号呢,那么另外 一个是他的什么呀啊他的名字啊他的名字。呃咱们为了方便呢我这样啊过一会呢会给他初始化一下啊,随机的初始化。那么接下来咱们来看一下有一个代码啊, 咱们知道 system out print learn 这个方法呢可以怎么办?可以输出对象,包括八个基本类型啊,都可以进行输出,还包括字符串,那么其实这行代码是什么效果呢?大家来看一下啊,等同于等同于啊,下面两行代码,第一个 把参数 o, 这是一个对象,把它呢向它发一个消息,你转换成支付串,然后呢怎么做呢?我就输出啊,得到的支付串,比如说在 object 里里面呢, 定义了这个 twostring 方法,而 object 类呢是所有类的子类,所以说所有的对象都会具有啊,自动继承啊 twostring 这个方法, 那么在输出的时候呢,其实就是说通过 tostin 啊得到它的字符串的十六定制值,然后呢得到一个输出, 那么这样的话该怎么去应用呢?咱们来看啊, 那么我构建一个对象,为了方便呢,我把他的学号设置为一名字呢,设置为 a, b, c, 但是这个呢应该是添加构造方法,呃,我目前这个方法呢,不是很严谨啊,所以咱们这样先去这样来完成啊,接下来呢去输出一下 啊,咱们这个对象 s, 看看结果是什么样啊?代码保存,同样学生类呢,也需要保存好,看一下运行结果。 大家看到输出值呢,是这么一串值,是类名加上一个十六进制的一个啊字符串,那么这个值是在哪呢?比如说咱们刚才说了啊,是 就相当于啊,像 s 对象他继承而来的这个 toos 确定方法,咱们把它呢来做一个输出 啊,看到我的第二行怎么样去输出这个 s 二,你会发现呢,这两个输出啊,就会是相同的,会输输出呢两个相同的字符串 啊,大家可以看到是很明显是一样的啊,这两个这两个字符串是相同的,说明啊,咱们的效果是相同的,比如说还是验证刚才的代码 是吧?向对象,哎,向对象呢,发了一个消息,转换成字符串,再去输出这个字符串,那么 tos 训方法呢?咱们可以按一下 ctrl 啊,点击这个什么呀啊,点击这个方法 去查看代码啊,之前也讲过如何去查看原代码啊,咱们今天呢,这个地方就不是咱们的重点,咱们就不去啊,讲解了, 咱们的重点在哪呢?在这个地方啊,就说既然说啊,在负类子负类中, object 定义了 toostrain, 不适合啊子类来使用,那怎么办?咱们要去覆盖,怎么去覆盖呢?咱们看一下 eclipse 帮助大家啊,实现的一个方法, 我要去覆盖啊,字符串类的那个方法呢? tostring 好了,看一下菜单,上次菜单里面呢,有一个什么呢?有一个叫 override message 啊,是这个选项啊, 这是要生存代码,所以都在 souls 菜单里边,咱们去选择什么呢?叫 toolstring 方法, 选择一个,确定咱们去覆盖这个方法。覆盖方法呢,咱们这次完成的比较简单,怎么办呢?咱们就用学号加上名字,这样的话刚好是一个字符串,把它的状态值呢啊,都去做一个输出,为了方便呢,我怎么办呢? 我再加上一个分割符啊,加上一个逗号啊,逗号。那咱们看一下在覆盖之后,那怎么办呢? 在外部用户啊,去调用这个 twostring 的时候啊,是使用的 object 类的 twostring 还是学生类啊?覆盖的啊,这个 twostring 方法,那么咱们看一下运行结果, 大家看到这两侧很明显都输出的是什么呀?是咱们 覆盖后的结果啊,这也验证了咱们在刚开始啊啊说的那句话,有时候怎么办呢?在对外部用户来说,那么你怎么办呢?你使啊,使用的是子类中啊覆盖后的方法,而不是负类的啊同名方法。 那么希望这个视频呢,让大家对方法的覆盖啊有一个更好的认识,同时呢能够学会在 eclipse 里边啊,如何去 啊自动啊,通过菜单呢,帮助咱们覆盖方法。那好,今天的视频呢,到此结束,感谢大家的收看,再见!