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. java计时器Timer

    基于java的计时器,定时发送消息 package timer; import java.lang.reflect.Array; import java.text.ParseException; im ...

  2. idea 改变片段内相同变量的快捷键

    在 win系统中 shift+F6 在 ios系统中Fn+shift+F6

  3. MySql 字符串时间转换

    MySql中经常遇到字符串格式时间转换成时间类型的情况: SELECT STR_TO_DATE('Jul 20 2013 7:49:14:610AM','%b %d %Y %h:%i:%s:%f%p' ...

  4. Rfost的自我介绍+软工五问

    自我介绍+软工五问 问题 解答 这个作业属于哪个课程 网工1934-软件工程 这个作业要求在哪里 作业要求 这个作业的目标 让学生对软件工程有个初步的了解,同时掌握基础的markdown语法和博客园的 ...

  5. Ansys-CHEMKIN-pro表面反应机制输入(Surface Kinetics Input)规则

    chemkin表面反应机制文件(Ansys-CHEMKIN-pro表面反应机制输入) 1. 文件包含表面活性位(相).表面组分,固相组分.固相,热力学数据,反应机制: 2. 顺序:物质名称,活性位数据 ...

  6. day47-Mysql初识

    1.数据库的演变过程-- 文件存储(不同用户之间数据格式不一致,杂乱)==> 软件开发目录规范(限定了储存的具体位置,不能网络通信)==>数据库 数据库就是一款基于网络通信操作文件的应用程 ...

  7. git操作回顾,从零入手

    1.可在极狐或者git上直接通过http克隆项目,或者通过ssh密钥,这样就不用每次上传代码需要输入密码和验证 ssh密钥参考如下 (80条消息) git如何生成ssh密钥 git生成配置ssh密钥k ...

  8. LVS负载均衡 2022年4月

    1. 负载均衡技术简介 2 1.1 负载均衡类型3 1.2 LVS简介4 1.3 Keepalived简介5 2. 负载均衡搭建主要步骤 6 2.1 LVS+Keepalived的负载均衡系统搭建6 ...

  9. 【Python】Python3环境安装

    编译安装 安装依赖 yum install wget gcc make zlib-devel openssl openssl-devel readline-devel wget "https ...

  10. 引用本地的layUI

    <script src="/public/vendor/layui-v2.5.6/layui.all.js"></script>