Java基础总结--泛型总结
-----泛型------JDK1.5出现的机制
1.泛型出现的原因--简化书写,提高安全性
技术的由来是为了解决问题,现在存在该问题,所有的容器定义类型为Object,所以任何对
象均可以放入容器--进行自动向上转型,要将容器的元素拿出来并使用该对象的特有内容时
候--进行强制的向下转型,但是假如进去的对象不是同种类型,强制就会失败--复用降低
早期处理方式:程序员主观控制--不能保证其他人的正确使用
后期处理方式:跟数组的思想一致,在声明的时候指定装入对象的类型,此后只能装该类型
的对象,否则编译就错误---泛型(避免后期安全)
2.泛型的好处
* 将运行时期的安全隐患转化到编译时期
* 遍历取出元素使用之前不用强转类型--直接就是该对象本身,可以直接使用
* 还能提供很多的设计上的便捷
3----什么时候使用---
*当接收的引用的类型不确定的时候使用,指定好类型,直接传入对象的引用,相当于指定了
要接收参数的范围
* 在程序中用到了含有<>的类/接口,就要明确传入的引用的具体类型
* 引用--是类的对象/接口子类对象的引用(E-类/接口)
注意小细节---泛型擦除----
泛型--编译时期的技术(给编译器使用的技术),用于编译时期,确保类型安全,并运行时候
会将泛型去掉,生成的class文件中不带泛型,这个称为泛型的擦除
关于泛型擦除的原因:主要为了兼容以前类加载器,其次在编译期间已经保证类型安全,所
以擦除也没有安全风险
---泛型补偿机制---在类装载器上加一个补偿机制,装载器获取对象的实际类型判断和转化
(getClass()-class),自动的做出强转--而不是程序员自己做强转,所以取出的元素可以直
接的使用
4.泛型的书写格式--java强类型语言,类型不匹配就编译不通过
容器类<对象类型> 容器对象引用 = new 容器类<对象类型>();
ArrayList<String> al = new ArrayList<String>();
6.不同情况下的泛型的使用--在集合框架里面应用最多
---自定义泛型类(没有泛型的时候使用Object-多态实现提高代码复用,存在运行安全隐患)
使用时机:当类中操作的引用类型不确定的时候使用泛型表示
好处:就是在使用对象的特有内容时候不需要进行强转,直接使用,具有更高的安全性,把
问题控制在编译期间
---泛型方法---可以传入任意对象并调用该方法
将泛型定义在方法上面(使用Object也可以实现,两种形式没有大差别)
eg public <W> void show(W w){语句;}
泛型方法注意:
当方法静态的时候不能访问类上定义的泛型,如果静态方法要使用泛型,就将泛型定义在方
法上eg public static <W> void show(W w){语句;}
泛型方法接收的对象,不能使用对象特有的东西,只能使用从Object继承的方法
---泛型接口---
定义一个泛型接口,具体子类实现接口的时候可以指定具体类型/继续使用泛型,指到创建对
象的时候再指定也可以eg:public interface List<E>extends Collection<E>
---泛型上限及体现---
泛型的通配符--?等价于? extends Object未知道的类型--没有返回值
eg:public static void printCollection(Collection<?> coll){语句}
这个也可以使用泛型方法实现--可以对返回值进行操作
eg:public static<T> T void printCollection(Collection<T> coll){语句}
泛型的限定-上限:?extends Person:接收Person以及Person的子类 <= E
元素出来接收用其父类Person接收
eg:public static void printCollection(Collection<? extends Person> coll){语句}
泛型上限的应用:集合里面存储元素时候--存储E及其子类对象的引用
(因为都是按照上限类型运算,不会出现安全隐患。应用较多)
----泛型下限及体现----用的不多
泛型的限定-下限:?super E 接收E类型或其父类类型 >=E
TreeSet(Comparator<? super E> comparator) 比较器对特定元素的排序
泛型下限的应用:对集合中的元素进行取出来的操作
比较器进行比较的时候,要取出元素比较,因为是父类,所以一定可以接收子类对象
---集合框架的查阅技巧---
需要唯一吗:Set
需要唯一+排序 TreeSet
需要唯一+和输入顺序一致LinkedHashSet
----前提不需要唯一List
1.经常增删LinkedList
2.不需要ArrayList
后缀代表所在的集合所属体系,前缀表示集合代表的数据结构
看到Array--联系数组适合查询
看到Link--联系链表适合增删
看到Hash--联系哈希表,唯一性,hashCode()&equals()
看到Tree--联系二叉树,排序,Comparable+Comparator
常见的容器一般都是非线程安全的
Java基础总结--泛型总结的更多相关文章
- 黑马程序员:Java基础总结----泛型(高级)
黑马程序员:Java基础总结 泛型(高级) ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 泛型(高级) 泛型是提供给javac编译器使用的,可以限定集合中的输入类型 ...
- 黑马程序员——JAVA基础之泛型和通配符
------- android培训.java培训.期待与您交流! ---------- 泛型: JDK1.5版本以后出现新特性.用于解决安全问题,是一个类型安全机制. 泛型好处: ...
- Java基础知识--泛型
什么是泛型?为什么使用泛型? 泛型,就是参数化类型.提到参数,最熟悉的就是定义方法时候的形参,然后调用此方法时传递实参.顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也 ...
- Java基础:泛型
Java的泛型是什么呢, 就是类型的參数化,这得类型包含方法參数和返回值.也就是原本该是确定类型的地方换成了变量,把类型的确定时间向后延迟了. 在之前,学过"重载"的概念,重载是什 ...
- 【Java基础】泛型
Num1:请不要在新代码中使用原生类型 泛型类和接口统称为泛型.每种泛型定义一组参数化的类型,构成格式是:类或接口名称,接着用<>把对应于泛型形式类型的参数的实际参数列表括起来.比如:Li ...
- 黑马程序员——【Java基础】——泛型、Utilities工具类、其他对象API
---------- android培训.java培训.期待与您交流! ---------- 一.泛型 (一)泛型概述 1.泛型:JDK1.5版本以后出现的新特性,用于解决安全问题,是一个类型安全机制 ...
- Java基础之泛型——使用二叉树进行排序(TryBinaryTree)
控制台程序. 1.实现针对容器类的基于集合的循环 为了让容器类类型的对象能够在基于集合的for循环中可用,类必须并且只需要满足一个要求——必须实现泛型接口java.lang.Iterable<& ...
- java基础之 泛型
泛型(Generic type 或者generics)是对 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类.可以把类型参数看作是使用参数化类型时指定的类型的一个占位符,就像方法 ...
- Java基础 Day14 泛型
//为什么要使用泛型 //1.解决元素存储的安全性的问题 //2.解决获取元素时,须要类型转换的问题 //未使用泛型 package org.tizen.test; import java.util. ...
- 【Java基础】泛型的一些总结
什么是泛型 泛型其实可以理解为一种广泛的类型,啥类型都型,当然,这种泛是指定义时可以广泛,但是使用时必须确定类型.也就是说,当不清楚未来使用哪种类型时,定义为泛型.可以支持泛型类,泛型接口,泛型方法, ...
随机推荐
- session和cookie介绍以及session简单应用
介绍http协议与TCP协议: http协议:是短连接,关闭浏览器的时候断开与服务器的连接 TCP协议:是长连接,连接一直存在 http协议是在TCP协议 ...
- (转载)Oracle12g安装图解与安装过程常见问题注意事项
首附转载地址:http://jingyan.baidu.com/article/f96699bbab21c0894e3c1bf8.html 首先,点击"setup",建议以管理员身 ...
- Spring - 运行时获取bean(ApplicationContextAware接口)
默认情况下,我们的bean都是单例模式(即从容器初始化到销毁只保持一个实例).当一个bean需要引用另外一个bean,我们往往会通过bean属性的方式通过依赖注入来引用另外一个bean.那么问题就来了 ...
- 深入理解分布式调度框架TBSchedule及源码分析
简介 由于最近工作比较忙,前前后后花了两个月的时间把TBSchedule的源码翻了个底朝天.关于TBSchedule的使用,网上也有很多参考资料,这里不做过多的阐述.本文着重介绍TBSchedule的 ...
- MyBatis学习(六)MyBatis关联映射之一对多映射
数据库中一对多通常使用主外键关联,外键应该在多方,即多方维护关系. 下面举一个简单实例来看看MyBatis怎么处理一对多的关系. 1.创建一个项目,导入所需jar包,导入db.properties配置 ...
- 基于c编写的关于随机生成四则运算的小程序
基于http://www.cnblogs.com/HAOZHE/p/5276763.html改编写的关于随机生成四则运算的小程序 github源码和工程文件地址:https://github.com/ ...
- Java的垃圾回收
Java的垃圾回收 System.gc()和Runtime.gc()用来请求JVM启动垃圾回收 try与return的问题 任何调用try 或者catch中的return语句之前,都会先执行final ...
- BZOJ1207_打鼹鼠_KEY
[HNOI2004]打鼹鼠 Time Limit: 10 Sec Memory Limit: 162 MB Description 鼹鼠是一种很喜欢挖洞的动物,但每过一定的时间,它还是喜欢把头探出到地 ...
- 为什么你需要将代码迁移到ASP.NET Core 2.0?
随着 .NET Core 2.0 的发布,.NET 开源跨平台迎来了新的时代.开发者们可以选择使用命令行.个人喜好的文本编辑器.Visual Studio 2017 15.3 和 Visual Stu ...
- java 方法重载overload
一.方法的重载 方法名一样,但参数不一样,这就是重载(overload). 所谓的参数不一样,主要有两点:第一是参数的个数不一样,第二是参数的类型不一样.只要这两方面有其中的一方面不一样就可以构成方法 ...