1.在JDK5中新增了自动包装和自动解包功能:
当编译器发现程序再应该使用包装类对象的地方却使用基本数据类型的数据时
,编译器将自动把该数据包装为该基本数据对应的包装类的对象,这个过程成为自动包装。
如类型参数T所接收的是int、double或char等基本数据类型时,T所代表的类型自动包装成
Integer、double、character等类型
当编译器发现在使用基本类型数据的地方却使用了包装类的对象,则会把该包装类对象解包,
从中取出所包含的基本类型数据,这个过程称为自动解包。如一个对象是包装类型Integer、
double或character等类型时,那么可直接将这个元素赋值给一个基本类型的变量
2.当一个泛型有多个类型参数时,每个类型参数在泛型中都应该是唯一的。如不能定义形如
Map<K,K>形式的泛型,但可以定义Map<K,v>形式的泛型
3.泛型方法:
要定义泛型方法,只需将泛型的类型参数<T>置于方法返回值类型前即可。在java中任何方法
(包括静态方法和构造方法)都可声明为泛型方法。泛型方法除了定义不同,
调用时与普通方法相同
4.在调用泛型方法时,为了强调是泛型方法,也可将实际类型放在尖括号内作为方法名的前缀
app12_2.<String>display(str);app12_2.<Integer>display(num);
5.推荐使用返回值类型和参数类型一致的泛型方法。java泛型方法广泛使用在方法返回值和
参数均是容器类对象
6.说明:一个static方法,无法访问泛型类的类型参数,所以如果static方法需要使用泛型能力
必须使其成为泛型方法
7.在使用泛型类时,必须在创建泛型对象的时候指定类型参数的实际值,而调用泛型方法时,
通常不必指明参数的类型,因为编译器有个功能为类型参数推断,此时编译器会找出具体的
类型。类型推断支队赋值操作有效,其他时候并不起作用
8.设计泛型方法的目的主要是针对具有容器类型参数的方法的。
泛型方法与泛型类之间的一个重要区别是:对于泛型方法,不需要把实际的类型传递给
泛型方法;但泛型类恰恰相反,即必须把实际的类型参数传递给泛型类
9.限制泛型的可用类型:
在定义泛型类时,默认可以使用任何类型来实例化一个泛型类对象,但java语言也可以在用
泛型类创建对象时对数据类型做出限制。其语法如下:
class ClassName<T extends anyClass>
其中anyClass是指某个类或接口
该语句表示T是ClassName类的类型参数,且T有一个限制,即T必须是anyClass类或是继承了
anyClass类的子类或是实现了anyClass接口的类。
这意味着该类创建对象时,类型实际参数必须是anyClass类或其子类或是实现了anyClass接口
的类。且无论anyClass是类或接口。在进行泛型限制时都必须使用extends关键字
10.说明:在定义泛型类时若没有使用extends关键字限制泛型的类型参数时,默认是Object
类下的所有子类,即<T>和<T extends Object>是等价的
11.在使用<T extends anyClass>定义泛型类时,若anyClass是接口,那么创建泛型对象时,
若给出的类型参数不是实现接口anyClass的类,则编译不能通过。
例如我们定义了泛型类class LIstGeneral<T extends List>,因List是接口,所以在用该类创建
泛型对象时的实际参数必须是实现List接口的类。
12.java.util.LinkedList与java.util.ArrayList均是实现了接口java.util.List的类
ListGeneral<LinkedList> x = new ListGeneral<LinkednList>();
ListGeneral<ArrayList> y = new ListGeneral<Arrat=ynList>();
但由于HashMap没有实现List接口,所以以下语法是错误的
ListGenneral<HashMap> z = new ListGeneral<HashMap>();
13.泛型的类型通配符和泛型数组的应用:
泛型通配符?其重要作用有两个方面:
一是用于可重新赋值但不可修改其内容的泛型对象;
二是用在方法的参数中,限制传入不想要的类型实参
14.当需要在一个程序中使用同一个泛型对象名去引用不同泛型对象时,就需要使用通配符"?"
创建泛型类对象,但条件是被创建的这些不同泛型对象的类型实参必须是某个类或继承该类的
子类又或是实现某个接口的类。也就是说,只知道通配符"?"表示某个类或是继承该类的子类
又或是实现某个接口的类,但具体是什么类型不知道
15.下列语句是用泛型类创建泛型类对象:
泛型类名<? extends T> o =null;//声明泛型类对象o
16.直接用通配符<?>创建泛型对象,有两个特点
1)具有通用性,即该泛型类的其他对象可以赋值给通配符“?”创建的泛型对象,因为“?”
等价于“?extends Object”
2)用通配符“?”创建的泛型对象,只能获取或删除其中的信息,但不可为其添加新的信息
17.通配符有上限通配和下限通配
由于T被认为是类型参数“?”的上限,所以“?extends T”也被称为上限通配
“?super T”表示是T或T的一个未知父类型,T表示类型参数“?”的下限,所以被称为
下限通配
18.引用通配符的主要目的是支持泛型中的子类,从而实现多态
19.泛型方法的目的主要是为了适用于多种不同类型或支持多态,则应选用通配符
20.JVM在编译时对泛型进行安全检查,所以强调这几点
1)不能使用泛型的类型参数T创建对象。如T obj = newT()这是错误的
2)在泛型中可以使用类型参数T声明一个数组,但不能使用类型参数T创建数组对象
21.不能在静态环境中使用泛型类的类型参数T。例如:
public class Test<T>{
public static T obj;
public static void m(T obj);
{ }
static {T obj2;}}
22.异常类不能是泛型的,即泛型类不能继承java.lang.Throwable类。
如public class MyException<T>extends Exception{}是错误的
23.继承泛型类与实现泛型接口
被定义为泛型的类或接口可被继承与实现。例如:
public class ExtendClass<T1>
{ }
class SubClass<T1,T2,T3>extends ExtendClass<T1>
24.在定义泛型接口时,泛型接口也可被实现:
interface Face<T1>
{ }
class SubClass<T1,T2>implements Face<T1>
{ }

总结:今天了解了JDK5的自动包装和自动解包

泛型方法的使用以及注意事项

泛型类类接口的限制,以及可限制的泛型类

通配符的使用和注意事项

继承泛型类以及实现泛型类接口

补五月四号java基础知识的更多相关文章

  1. Android学习笔记(四) JAVA基础知识回顾

    一.接口 1)接口中定义的方法都是public权限,并且默认为public,而不是default. 2)接口的实现(implements)是特殊的继承,类似于父类子类的关系,可以向上转型(非常重要). ...

  2. Java基础知识总结(超级经典)

    Java基础知识总结(超级经典) 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实现.用具体的java ...

  3. 毕向东—Java基础知识总结(超级经典)

    Java基础知识总结(超级经典) 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实现.用具体的java ...

  4. java基础知识一览(二)

    一.java基础知识 1.一个文件中只能有一个public的类,因为他的类名要求和文件名相同. 2.classpath变量可以设置其它目录下的类. 例如:类文件所在目录是:F:\Javajdk,那么没 ...

  5. 黑马毕向东Java基础知识总结

    Java基础知识总结(超级经典) 转自:百度文库 黑马毕向东JAVA基础总结笔记    侵删! 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部 ...

  6. java基础知识小总结【转】

    java基础知识小总结 在一个独立的原始程序里,只能有一个 public 类,却可以有许多 non-public 类.此外,若是在一个 Java 程序中没有一个类是 public,那么该 Java 程 ...

  7. 学习android学习必备的java基础知识--四大内部类

    学习android必备的java基础知识--四大内部类 今天学习android课程,因为我的主专业是JAVA,但是兴趣班却有这其他专业的同学,学习android 需要具备一些java的基础知识,因此就 ...

  8. java基础知识回顾之---java String final类普通方法

    辞职了,最近一段时间在找工作,把在大二的时候学习java基础知识回顾下,拿出来跟大家分享,如果有问题,欢迎大家的指正. /*     * 按照面向对象的思想对字符串进行功能分类.     *      ...

  9. java 基础知识二 基本类型与运算符

    java  基础知识二 基本类型与运算符 1.标识符 定义:为类.方法.变量起的名称 由大小写字母.数字.下划线(_)和美元符号($)组成,同时不能以数字开头 2.关键字 java语言保留特殊含义或者 ...

  10. Java 基础知识总结

    作者QQ:1095737364    QQ群:123300273     欢迎加入! 1.数据类型:  数据类型:1>.基本数据类型:1).数值型: 1}.整型类型(byte  8位   (by ...

随机推荐

  1. PLC入门笔记6

    计数器指令及其应用 计数器指令介绍 很多场合需要进行计数操作.例如电机启动次数.生产线物料经过次数.位置传感器传送的脉冲次数等. 计数器分为普通和高速两种. 比PLC扫描频率远小于用普通,接近或大于用 ...

  2. Spring Boot中开启Spring Security

    Spring Boot中开启Spring Security Spring Security是一款基于Spring的安全框架,主要包含认证和授权两大安全模块,和另外一款流行的安全框架Apache Shi ...

  3. heimaJava-网络编程

    Java 网络编程 概念 网络编程可以让程序与网络上的其他设备中的程序进行数据交互 网络通信基本模式 常见的通信模式有如下两种形式,Client-Server(CS),Browser/Server(B ...

  4. url not set

    UrI not set 原因与处理方法 今天下午跑代码时发现,上午能跑的代码下午跑不了了.一直报 Url not set错误. 出现这个问题的主要原因,是因为代码中的@ConfigurationPro ...

  5. 【jupyter notebook】配置基于ecs云平台的jupyter notebook远程使用

    学校提供了ecs云服务器进行高性能运算 分配到了云主机后想在上面搭好jupyter notebook服务器方便远程使用,在此记录整个流程和遇到的问题 本文档适用于常规的jupyter notebook ...

  6. 【原创】windows环境下Java串口编程

    由于工作中遇到需要读取SBG Ellipse N系列的惯导模块数据,为了方便操作,我选择在Windows下进行串口开发.串口使用RS232. Ellipse-N RS232的引脚定义 开始我尝试使用的 ...

  7. 基于C语言的小学生四则运算出题器

    一.实验目的以及项目来源: 目的: 1.帮助老师产出随机的海量四则运算符的运算题目. 2.每次题目的产出均为随机,增强同学的四则运算能力. 项目来源: 项目来源于软件开发与创新课程的结对编程,对100 ...

  8. 002基本的Dos命令

    002基本的Dos命令 1.开启Dos控制台的几种方式 几种打开CMD的方式: 直接在菜单中搜索"命令提示符". Win+R,输入cmd.(推荐) 在任意文件夹下面,按住Shift ...

  9. 九九乘法表打印记一次al面试

    for (int i = 1; i <= 9; i++) { for (int j = 1; j <= i; j++) { System.out.print(i + "x&quo ...

  10. vue3 ThreeJS 引入obj模型过暗的问题

    当我单纯地用MTLLoader引入材质, OBJLoader引入模型并添加到场景中时, 发现模型非常得暗. 需要将环境光的强度设置到3.5左右看起来才比较正常. 但正常情况下环境光的值不应该超出1.  ...