ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

OOP - 琐碎

2022-08-12 03:01:20  阅读:175  来源: 互联网

标签:初始化 Comparator 方法 C++ 类型 OOP 泛型 琐碎


  1. 初始化:Java的对象不像是C++的引用,毕竟引用不空,而更像是指针。C++的语言规范(有些编译器就)不支持直接初始化数据成员,而是用一种初始化列表的形式。P.S. 现代C++提供了大括号初始化语法的统一。这也许是因为结构体(包括数组)在C++里可能是在栈上,因为总是先申请了对象空间,然后才对这块内存进行构造的,因而数据成员最好是在地化(为此,还专门重载了new操作符:new (ptr) Type)地构造,如果是赋值初始化的话,可能存在额外的数据拷贝。而Java所有的对象都在堆上,只涉及引用(指针)的赋值与否不再重要。另外,C++中如果存在初始化列表,那么对应数据成员的列表初始化或者类内(直接赋值)初始化就不再被调用了,而Java则会按顺序依次做一遍(默认初始化为0、false和null,然后按在代码中出现的顺序执行field初始化和初始化块,最后执行构造函数体。
  2. 桥方法:桥方法是Java在继承体系中实现协变返回类型与解决覆盖泛型方法对动态绑定的影响的机制,因为所有的对象至少都是Object类的,因而总能实现类型擦除与强制类型转换。返回值类型协变是编译器仅给自己开放的权限,实际上,JVM就是将返回值类型也作为重载因子的。
  3. 泛型类型擦除所产生的限制:
    31. 只能用var o = (Type<ParamType>[]) new Type<?>[10]的方式构造泛型类型的数组(不推荐),推荐使用泛型容器。因为擦除后的对象不具有类型信息,可以存放任意类型的元素。而泛型容器类型本身指定和记录着元素的类型。好比是,数组是一种不具备这种泛型类型记录能力的原始的容器。
    32. 无法构造泛型参数“类型”的对象或者数组,毕竟泛型类型还可能是抽象的。用于构造对象的具体类型只能通过参数传入,而现在,我们有lambda表达式与函数式接口协助。
    33. 同样也无法抛出泛型类型的对象,即便它扩展自Throwable也不行。原因也许在于捕获机制对精确到更具体的类型的追求。
  4. 接口:Java 8和9之后,已经可以为仅作为abstract方法集合的接口添加static和private的方法了,二者取代了之前的util和helper的额外定义。对于非static即instance方法,在需要新增public方法的时候,必要加default标记并提供方法定义以兼容旧的应用代码,否则,就类似于C/C++中未定义符号的情况了。
  5. Comparable<>(compareTo)与Comparator<>(compare):Comparable是sort方法排序默认被排序元素实现了的接口,而Comparator是需要额外提供的。Comparator类的方法分为三类:
    51. compare,一个instance方法(abstract),Comparator作为functional interface,仅此一个抽象方法。
    52. 一些static,类似于工厂方法,可用于生成Comparator对象。
    53. 一些instance方法(default):用于Comparator对象的拼接。

标签:初始化,Comparator,方法,C++,类型,OOP,泛型,琐碎
来源: https://www.cnblogs.com/qqiwei/p/16578460.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有