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. 实验8 python库应用编程与体验

    3.实验任务3 from turtle import * def square(size=50, rgb='orange'): '''绘制正方形 参数size指定边长 参数rgb指定画笔颜色 如果没有 ...

  2. selenium webdriver 无法选中元素,修改元素属性可见

    <ul data-v-6529428e="" class="el-dropdown-menu el-popper filter-dropdown el-dropdo ...

  3. 面向对象ooDay8

    精华笔记: 接口: 是一种数据类型(引用类型) 由interface定义 只能包含常量和抽象方法(所有数据默认都是常量,所有方法默认都是抽象的) 接口不能被实例化 接口是需要被实现/继承的,实现/派生 ...

  4. SpringBoot - Lombok使用详解5(@log、@Buinder、@SneakyThrows、@Synchronized)

    七.Lombok注解详解(5) 12,@log (1)该注解用在类上,可以省去从日志工厂生成日志对象这一步,直接进行日志记录,具体注解根据日志工具的不同而不同.不同的日志注解总结如下(上面是注解,下面 ...

  5. oracle 将以逗号分隔的列拆成多行的的方法

    原表如下 select * from hs_acct.custattach a where a.client_id='888827395'; 将列拆分成多行的语句 select * from ( -- ...

  6. intellij idea修改背景图片

    上方菜单栏选择 File -> settings -> plugins,搜索Backgroung Image Plus插件 下载之后restart 菜单栏上选择view   设置好后选择O ...

  7. 使用Sales_data 类

    添加两个Sales_data 对象 因为Sales_data 类没有提供任何操作,所以我们必须自己编码实现输入.输出和相加的功能.假设已知Sales_data 类定义于 Sales_data.h 文件 ...

  8. JQUERY选择器大全(转载)

    在Web应用程序中,大部分的客户端操作都是基于对象的操作,要操作对象就必须先获取对象,jQuery提供了强大的选择器让我们获取对象.我人为地将jQuery选择器分为两大部分:选择对象和筛选条件.选择对 ...

  9. bytes转化为字典

    import requestsurl='https://su.ke.com/api/listtop?type=resblock&resblock_id=2311062653496924& ...

  10. SQLServer游标(Cursor)简单例子

    DECLARE @username nvarchar(50),@password nvarchar(50),@num int--声明游标变量 DECLARE myCursor CURSOR FOR s ...