今天阴天多云,天气渐冷,不关窗户就会打喷嚏,秋意浓哦😊,那么来总结今天学习了什么
JAVA基础:多态(polymorphic)
直接贴代码好了
1 |
|
为了实现运行期的多态,或者说是动态绑定,需要满足三个条件。
即有类继承或者接口实现、子类要重写父类的方法、父类的引用指向子类的对象。
JAVA基础:重写(Overriding)
1 |
|
上面的例子中,dog对象被定义为Dog类型。在编译期,编译器会检查Dog类中是否有可访问的bark()方法,只要其中包含bark()方法,那么就可以编译通过。 在运行期,Hound对象被new出来,并赋值给dog变量,这时,JVM是明确的知道dog变量指向的其实是Hound对象的引用。 所以,当dog调用bark()方法的时候,就会调用Hound类中定义的bark()方法。
这就是所谓的动态多态性。
JAVA基础:JAVA中只有值传递???
1 |
|
所以说,Java中其实还是值传递的,只不过对于对象参数,值的内容是对象的引用。
总结: 无论是值传递还是引用传递,其实都是一种求值策略(Evaluation strategy)。在求值策略中,还有一种叫做按共享传递(call by sharing)。 其实Java中的参数传递严格意义上说应该是按共享传递。
按共享传递,是指在调用函数时,传递给函数的是实参的地址的拷贝(如果实参在栈中,则直接拷贝该值)。 在函数内部对参数进行操作时,需要先拷贝的地址寻找到具体的值,再进行操作。如果该值在栈中,那么因为是直接拷贝的值,所以函数内部对参数进行操作不会对外部变量产生影响。 如果原来拷贝的是原值在堆中的地址,那么需要先根据该地址找到堆中对应的位置,再进行操作。因为传递的是地址的拷贝所以函数内对值的操作对外部变量是可见的。
简单点说,Java中的传递,是值传递,而这个值,实际上是对象的引用。
而按共享传递其实只是按值传递的一个特例罢了。所以我们可以说Java的传递是按共享传递或者说Java中的传递是值传递。
以上是GitHub项目大佬的论点,我感觉那么不管是堆里边new的地址值还是copy副本的值都是数值,所以传递的是数值,区分的关键是确定好是否有一个副本出现。
JAVA基础:内存的分配
JAVA基础:组合(Composition)
详细可以看这个博客,是《java编程思想》的提炼。第7章:复用类
1 |
|
JAVA基础:继承(Inheritance)
书上的代码在每个类中都写了main方法感觉很奇妙,书上说是为了方便对代码进行单元测试。记得之前有个Junit的单元测试工具,只是有印象。代码这样写还是挺奇妙的,最后一句话还添加了对前一个类的main方法调用,嗯,很灵活,长见识了。😊
而且!书中还说要慎用继承这个特性!
1 |
|
JAVA基础:代理
代理:java并没有提供对它的直接支持.这是继承与组合之间的中庸之道.因为我们将一个成员对象置于所要构造的类中(就像组合),但与此同时我们在新类中暴露了该成员对象的所有方法(就像继承)—-《JAVA编程思想》P130
其实就是在一个类中新建了另一个类的实例,通过这个实例来调用方法使用方法,这样就不用直接写代码了(这样叫解耦??),另外IDEA对代理可以自动生成代码,很给力,书中竟然也有提到,我是大四才用到IDEA,书中自有黄金屋啊!!!
1 |
|
JAVA基础:toString()
这个小朋友是怎么回事呢,toString()在需要的时候需要自己写,而且是重写,每一个非基本类型对象都有一个toString()方法。
` “source = “ + source; `
这样一个String类型的source与一个 “” 括起来的内容加起来,需要把引用类型的对象用toString()方法来变成字符串,然后传递给sout函数输出。
可以看看组合那段代码。
RE:foobar2000
搜索cue文件的时候发现用foobar2000可以打开,啊,有多久没有用这个播放器了,初中的时候下载后用了很长一段,后来换笔记本就忘记了。 很好的播放器,可以方便得分割cue这样的CD文件,理解不深入,逛了逛论坛发现还有很多插件可以提升质感,我是下载了汉化版,功能很棒了,后续有时间在研究吧。
今日总结
不满意今天得用工程度,中午还是打了游戏,连着玩了两盘,垃圾游戏,然后睡觉睡到了下午四点多,没有锻炼,blabla。。。
好的方面是起码在做事,会学习,心态也平稳多了,很抱歉前几天对自己那么消极,也让爸妈很担心。相信自己呦!
明天除了看Java再看看html吧,然后得出去跑跑步了,好几天都没跑步,还有记得吃药!