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基础】泛型的一些总结
什么是泛型 泛型其实可以理解为一种广泛的类型,啥类型都型,当然,这种泛是指定义时可以广泛,但是使用时必须确定类型.也就是说,当不清楚未来使用哪种类型时,定义为泛型.可以支持泛型类,泛型接口,泛型方法, ...
随机推荐
- Java程序设计——学生基本信息管理系统
1.团队课程设计博客链接 http://www.cnblogs.com/handsome321/p/7067121.html 2.个人负责模块说明 本组课题:学生信息管理系统 本人任务:插入.删除学生 ...
- 再起航,我的学习笔记之JavaScript设计模式22(访问者模式)
访问者模式 概念介绍 访问者模式(Visitor): 针对于对象结构中的元素,定义在不改变该对象的前提下访问结构中元素的新方法 解决低版本IE兼容性 我们来看下面这段代码,这段代码,我们封装了一个绑定 ...
- Day-16: 图形界面
Python支持多种图形界面,有:第三方库有Tk.wxWidgets.Qt.GTK等. Python自带的库是支持Tk的Tkinter,无需安装任何安装包,就可以直接使用. 在Python中使用函数调 ...
- mount挂载和交换分区swap
目录 mount挂载 挂载方法 选项 查看设备 卸载命令 文件挂载配置文件fstab 交换文件与分区 swap优先级 三个工具free,df,du 扩展 移动介质 使用光盘 挂载USB设备 mount ...
- 如何查看maven plugin所包含的goal
maven项目的构建生命周期(build lifecycle)由很多阶段组成:从validate到deploy. maven插件中包含goal.这些goal可以被绑定到不同的maven的构建阶段上.g ...
- EntityFramework 6.x多个上下文迁移实现分布式事务
前言 自从项目上了.NET Core平台用上了EntityFramework Core就再没碰过EntityFramework 6.x版本,目前而言EntityFramework 6.x是用的最多,无 ...
- 【框架学习与探究之定时器--Quartz.Net 】
声明 本文欢迎转载,原文地址:http://www.cnblogs.com/DjlNet/p/7572174.html 前言 这里相信大部分玩家之前现在都应该有过使用定时器的时候或者需求,例如什么定时 ...
- [实战演练]python3使用requests模块爬取页面内容
本文摘要: 1.安装pip 2.安装requests模块 3.安装beautifulsoup4 4.requests模块浅析 + 发送请求 + 传递URL参数 + 响应内容 + 获取网页编码 + 获取 ...
- 西邮linux兴趣小组2014纳新免试题(四)
[第四关] 题目 http://findakey.sinaapp.com/ Example: String1:FFFF8 5080D D0807 9CBFC E4A04 24BC6 6C840 49B ...
- oracle 表查询(一)
通过scott用户下的表来演示如何使用select语句,接下来对emp.dept.salgrade表结构进行解说. emp 雇员表字段名称 数据类型 是否为空 备注-------- ...