Java编程思想重点整理笔记.docVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Java编程思想重点整理笔记

目录 1. Java中的多态性理解(注意与C++区分) 1 2. is-a关系和is-like-a关系 4 3. 运行时类型信息(RTTI + 反射) 4 4. 代理模式与Java中的动态代理 11 5. 即时编译器技术 — JIT 14 6. 访问控制权限 15 7. 组合和继承之间的选择 16 8. final关键字 16 9. 策略设计模式与适配器模式的区别 17 10. 内部类 17 11. String类型 — 不可变 18 12. 序列化控制 22 ? 1. Java中的多态性理解(注意与C++区分) Java中除了static方法和final方法(private方法本质上属于final方法,因为不能被子类访问)之外,其它所有的方法都是动态绑定,这意味着通常情况下,我们不必判定是否应该进行动态绑定—它会自动发生。 final方法会使编译器生成更有效的代码,这也是为什么说声明为final方法能在一定程度上提高性能(效果不明显)。 如果某个方法是静态的,它的行为就不具有多态性: class StaticSuper { public static String staticGet() { return Base staticGet(); } public String dynamicGet() { return Base dynamicGet(); } } class StaticSub extends StaticSuper { public static String staticGet() { return Derived staticGet(); } public String dynamicGet() { return Derived dynamicGet(); } } public class StaticPolymorphism { public static void main(String[] args) { StaticSuper sup = new StaticSub(); System.out.println(sup.staticGet()); System.out.println(sup.dynamicGet()); } } 输出: Base staticGet() Derived dynamicGet() 构造函数并不具有多态性,它们实际上是static方法,只不过该static声明是隐式的。因此,构造函数不能够被override。 在父类构造函数内部调用具有多态行为的函数将导致无法预测的结果,因为此时子类对象还没初始化,此时调用子类方法不会得到我们想要的结果。 class Glyph { void draw() { System.out.println(Glyph.draw()); } Glyph() { System.out.println(Glyph() before draw()); draw(); System.out.println(Glyph() after draw()); } } class RoundGlyph extends Glyph { private int radius = 1; RoundGlyph(int r) { radius = r; System.out.println(RoundGlyph.RoundGlyph(). radius = + radius); } void draw() { System.out.println(RoundGlyph.draw(). radius = + radius); } } public class PolyConstructors { public static void main(String[] args) { new RoundGlyph(5); } } 输出: Glyph() before draw() RoundGlyph.draw(). radius = 0 Glyph() after draw() RoundGlyph.RoundGlyph(). radius = 5 为什么会这样输出?这就要明确掌握Java中构造函数的调用顺序:

文档评论(0)

docindpp + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档