-----泛型------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基础总结--泛型总结的更多相关文章

  1. 黑马程序员:Java基础总结----泛型(高级)

    黑马程序员:Java基础总结 泛型(高级)   ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 泛型(高级) 泛型是提供给javac编译器使用的,可以限定集合中的输入类型 ...

  2. 黑马程序员——JAVA基础之泛型和通配符

    ------- android培训.java培训.期待与您交流! ---------- 泛型:            JDK1.5版本以后出现新特性.用于解决安全问题,是一个类型安全机制. 泛型好处: ...

  3. Java基础知识--泛型

    什么是泛型?为什么使用泛型? 泛型,就是参数化类型.提到参数,最熟悉的就是定义方法时候的形参,然后调用此方法时传递实参.顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也 ...

  4. Java基础:泛型

    Java的泛型是什么呢, 就是类型的參数化,这得类型包含方法參数和返回值.也就是原本该是确定类型的地方换成了变量,把类型的确定时间向后延迟了. 在之前,学过"重载"的概念,重载是什 ...

  5. 【Java基础】泛型

    Num1:请不要在新代码中使用原生类型 泛型类和接口统称为泛型.每种泛型定义一组参数化的类型,构成格式是:类或接口名称,接着用<>把对应于泛型形式类型的参数的实际参数列表括起来.比如:Li ...

  6. 黑马程序员——【Java基础】——泛型、Utilities工具类、其他对象API

    ---------- android培训.java培训.期待与您交流! ---------- 一.泛型 (一)泛型概述 1.泛型:JDK1.5版本以后出现的新特性,用于解决安全问题,是一个类型安全机制 ...

  7. Java基础之泛型——使用二叉树进行排序(TryBinaryTree)

    控制台程序. 1.实现针对容器类的基于集合的循环 为了让容器类类型的对象能够在基于集合的for循环中可用,类必须并且只需要满足一个要求——必须实现泛型接口java.lang.Iterable<& ...

  8. java基础之 泛型

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

  9. Java基础 Day14 泛型

    //为什么要使用泛型 //1.解决元素存储的安全性的问题 //2.解决获取元素时,须要类型转换的问题 //未使用泛型 package org.tizen.test; import java.util. ...

  10. 【Java基础】泛型的一些总结

    什么是泛型 泛型其实可以理解为一种广泛的类型,啥类型都型,当然,这种泛是指定义时可以广泛,但是使用时必须确定类型.也就是说,当不清楚未来使用哪种类型时,定义为泛型.可以支持泛型类,泛型接口,泛型方法, ...

随机推荐

  1. 201521123028 《Java程序设计》第12周学习总结

    1. 本周学习总结 流与文件 I/O流:Input/Output处理的简称,本质上就是一个数据序列.分为输入流Input Stream和输出流Output Stream. 最基本的可处理数据单位-by ...

  2. 201521123028 《Java程序设计》第11周学习总结

    1. 本周学习总结 关于互斥同步访问 synchronized关键字 -wait.notify和notifyAll Lock和Condition方法 -condition.await() //类似ob ...

  3. Linux系统常用的文件查看及处理命令

    常用的文本查看及处理命令 1.cat命令 (1).作用 连接文件并打印到标准输出设备上,cat经常用来显示文件的内容. (2).用法 1):用法:cat  (参数) 文件 2):常用参数 -n或-nu ...

  4. python之面向对象2

    一.类命名空间与对象.实例的命名空间    常见一个类就会创建一个类的名称空间,用来储存类中定义的所有名字,这些名字成为类的属性  而类有两种属性:静态属性和动态属性 静态属性就是直接在类中定义的变量 ...

  5. 作为一个C#程序员, 你应该上手Kotlin

    Kotlin最近火了, 在Google IO大会 Kotlin宣布Kotlin将会成为Android官方开发语言之后, Kotlin这样一个JVM上的新*(其实从诞生到现在已经有5年历史的)语言. 终 ...

  6. Angular2开发拙见

    本文集中讲讲笔者目前使用ng2来开发项目时对其组件的使用的个人的一些拙劣的经验. 先简单讲讲从ng1到ng2框架下组件的职责与地位: ng1中的一大特色--指令,分为属性型.标签型.css类型和注释型 ...

  7. Javascript中的noscript

    引言: 在浏览器日常火爆的时代,个大浏览器几乎都想占主导地位,争个你死我活,所以现在的各大浏览器都支持javascript脚本语言,但是在童鞋们,我们假设一下,万一哪个用户出于安全,把浏览器的java ...

  8. Application->ProcessMessages();

    Application.ProcessMessages的用法意义   在循环中加Application.ProcessMessages是可以防止其他控件没响应,举个例子容易明白:假如你的窗体上有两个按 ...

  9. 【转】 IntelliJ IDEA像Eclipse一样打开多个项目

    http://blog.csdn.net/zht666/article/details/47831893 我们做项目实际中经常会遇到这样的情况,创建一个common项目(Maven项目)作为公用项目, ...

  10. uva1267 Network

    https://vjudge.net/problem/UVA-1267 题意: 有一棵树,上面有一个放着水源的点s,给出一个数k,这个水源可以覆盖路径长度到s不超过k的叶子节点.现在需要把所有的叶子节 ...