千锋教育-做有情怀、有良心、有品质的IT职业教育机构
位置:首页 > 行业动态

千锋长沙零基础Java培训课程分享之泛型介绍

时间:2018-03-09 15:39:23  |  来源:千锋长沙培训机构  |  作者:千锋  

   千锋长沙零基础Java培训的老师又来发福利啦,这次是关于泛型的知识哦!

图片1.jpg

  泛型(Generic type 或者 generics)是对 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类。可以把类型参数看作是使用参数化类型时指定的类型的一个占位符,就像方法的形式参数是运行时传递的值的占位符一样。

  可以在集合框架(Collection framework)中看到泛型的动机。例如,Map 类允许您向一个 Map 添加任意类的对象,即使特别常见的情况是在给定映射(map)中保存某个特定类型(比如 String)的对象。

  因为 Map.get() 被定义为返回 Object,所以一般必须将 Map.get() 的结果强制类型转换为期望的类型,如下面的代码所示:

  Map m = new HashMap();

  m.put("key", "blarg");

  String s = (String) m.get("key");

  要让程序能过,必须将 get() 的结果强制类型转换为 String,并且希望结果真的是一个 String。但是有可能某人已经在该映射中保存了不是 String 的东西,这样的话,上面的代码将会抛出 ClassCastException。

  理想情况下,您可能会得出这样一个观点,即 m 是一个 Map,它将 String 键映射到 String 值。这可以让您消除代码中的强制类型转换,同时获得一个附加的类型检查层,该检查层可以防止有人将错误类型的键或值保存在集合中。这就是泛型所做的工作。

  泛型的好处

  Java 语言中引入泛型是一个较大的功能增强。不仅语言、类型系统和编译器有了较大的变化,以支持泛型,而且类库也进行了大翻修,所以许多重要的类,比如集合框架,都已经成为泛型化的了。这带来了很多好处:

  类型安全。 泛型的主要目标是提高 Java 程序的类型安全。用知道使用泛型定义的变量的类型限制,编译器可以在一个高得多的程度上验证类型假设。没有泛型,这些假设就只存在于程序员的头脑中(或者如果幸运的话,还存在于代码注释中)。

  Java 程序中的一种流行技术是定义这样的集合,即它的元素或键是公共类型的,比如“String 列表”或者“String 到 String 的映射”。靠在变量声明中捕获这一附加的类型信息,泛型允许编译器实施这些附加的类型约束。类型错误现在就可以在编译时被捕获了,而不是在运行时当作 ClassCastException 展示出来。将类型检查从运行时挪到编译时有助于您容易找到错误,并可提高程序的可靠性。

  消除强制类型转换。 泛型的一个附带好处是,消除源代码中的许多强制类型转换。这使得代码加可读,并且减少了出错机会。

  尽管减少强制类型转换可以降低使用泛型类的代码的罗嗦程度,但是声明泛型变量会带来相应的罗嗦。比较下面两个代码例子。

  该代码不使用泛型:

  List li = new ArrayList();

  li.put(new Integer(3));

  Integer i = (Integer) li.get(0);

  该代码使用泛型:

  List li = new ArrayList();

  li.put(new Integer(3));

  Integer i = li.get(0);

  在简单的程序中使用一次泛型变量不会降低罗嗦程度。但是对于多次使用泛型变量的大型程序来说,则可以累积起来降低啰嗦程度。

  潜在的性能收益。 泛型为较大的优化带来可能。在泛型的初始实现中,编译器将强制类型转换(没有泛型的话,程序员会指定这些强制类型转换)插入生成的字节码中。但是多类型信息可用于编译器这一事实,为未来版本的 JVM 的优化带来可能。

  由于泛型的实现方式,支持泛型(几乎)不需要 JVM 或类文件改。所有工作都在编译器中完成,编译器生成类似于没有泛型(和强制类型转换)时所写的代码,只是能确保类型安全而已。

  想要学习多的Java知识的话,还是来千锋教育吧!

上一篇:长沙Java培训分享:Java常见面试题答题经验
下一篇:长沙Java培训带你深入了解Java语言的不同学习方向

课程咨询

千锋开发者联盟QQ群

JavaEE学习交流群:343013298

HTML5学习技术交流群: 314548237

UI技术学习交流群:159532533

PHP学习交流群:517739045

  • 深圳科技园校区:深圳市南山区科苑南路高新技术产业园R3-B栋5层
    深圳大学城校区:深圳市南山区留仙大道1201号大学城创客小镇16栋2楼、3楼
    咨询电话:0755-86681178/9-801
    面授课程:iOS课程培训、Android课程培训、HTML5课程培训、好程序员特训营
  • 北京天丰利校区:北京市海淀区宝盛北里西区28号天丰利商城4层
    北京沙河校区:北京市昌平区沙阳路18号北京科技职业技术广场服务楼2层、南区服务楼2层
    咨询电话:400-654-7778 010-82790226/7-801
    面授课程:iOS课程培训、Android课程培训、HTML5课程培训、UI课程培训、好程序员特训营
  • 上海地址:上海市宝山区同济支路199号智慧七立方3号楼2-4层
    咨询电话:400-627-7899 021-65025129-601
    面授课程:iOS课程培训、Android课程培训、HTML5课程培训、好程序员特训营
  • 郑州地址:郑州市金水区纬五路21号河南教育综合楼6楼、7楼
    咨询电话:0371-55911950 400-654-7778
    面授课程:iOS课程培训、Android课程培训、HTML5课程培训、UI课程培训
  • 广州地址:广州市天河区元岗路310号智汇park创意园E座5层
    咨询电话:020-22119207 400-654-7778
    面授课程:iOS课程培训、Android课程培训、HTML5课程培训
  • 大连地址:大连市高新园区软件园路2号B8座
    咨询电话:0411-39026086 400-654-7778
    面授课程:iOS课程培训、Android课程培训、HTML5课程培训
  • 武汉地址:武汉市东新区光谷大道77号金融港B26栋9楼
    咨询电话:027-59905909 027-59905908 027-59905902
    面授课程:iOS课程培训、Android课程培训
  • 成都地址:成都市一环路西二段17号四川旅游青羊校区内
    咨询电话:028-83178771 028-61967740
    面授课程:iOS课程培训、Android课程培训、HTML5课程培训、UI课程培训
  • 西安地址:西安市二环南路西段60号永安大厦4层
    咨询电话:029-85260160 029-85261030 029-85260960
    面授课程:iOS课程培训、Android课程培训、HTML5课程培训
  • 杭州地址:浙江省杭州市江干区九堡旺田书画城A座4层
    咨询电话:0571-86893632 010-82790226/7-801
    面授课程:iOS课程培训、Android课程培训
  • 青岛校区地址:青岛市市南区金坛路17号青岛职业技术南校区实训楼A4层
    咨询电话:0532-80910752/3 010-82790226/7-801
    面授课程:iOS课程培训、Android课程培训
  • 千锋学员专属客户端
    “锋向标”扫描下载

  • 千锋教育微信号
    扫描加好友

关闭