补五月四号java基础知识
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基础知识的更多相关文章
- Android学习笔记(四) JAVA基础知识回顾
一.接口 1)接口中定义的方法都是public权限,并且默认为public,而不是default. 2)接口的实现(implements)是特殊的继承,类似于父类子类的关系,可以向上转型(非常重要). ...
- Java基础知识总结(超级经典)
Java基础知识总结(超级经典) 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实现.用具体的java ...
- 毕向东—Java基础知识总结(超级经典)
Java基础知识总结(超级经典) 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实现.用具体的java ...
- java基础知识一览(二)
一.java基础知识 1.一个文件中只能有一个public的类,因为他的类名要求和文件名相同. 2.classpath变量可以设置其它目录下的类. 例如:类文件所在目录是:F:\Javajdk,那么没 ...
- 黑马毕向东Java基础知识总结
Java基础知识总结(超级经典) 转自:百度文库 黑马毕向东JAVA基础总结笔记 侵删! 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部 ...
- java基础知识小总结【转】
java基础知识小总结 在一个独立的原始程序里,只能有一个 public 类,却可以有许多 non-public 类.此外,若是在一个 Java 程序中没有一个类是 public,那么该 Java 程 ...
- 学习android学习必备的java基础知识--四大内部类
学习android必备的java基础知识--四大内部类 今天学习android课程,因为我的主专业是JAVA,但是兴趣班却有这其他专业的同学,学习android 需要具备一些java的基础知识,因此就 ...
- java基础知识回顾之---java String final类普通方法
辞职了,最近一段时间在找工作,把在大二的时候学习java基础知识回顾下,拿出来跟大家分享,如果有问题,欢迎大家的指正. /* * 按照面向对象的思想对字符串进行功能分类. * ...
- java 基础知识二 基本类型与运算符
java 基础知识二 基本类型与运算符 1.标识符 定义:为类.方法.变量起的名称 由大小写字母.数字.下划线(_)和美元符号($)组成,同时不能以数字开头 2.关键字 java语言保留特殊含义或者 ...
- Java 基础知识总结
作者QQ:1095737364 QQ群:123300273 欢迎加入! 1.数据类型: 数据类型:1>.基本数据类型:1).数值型: 1}.整型类型(byte 8位 (by ...
随机推荐
- layui 点击显示与点击隐藏
主要有lay-filter属性,靠这个属性监听 <div class="layui-col-xs12 layui-col-sm4 layui-col-md4"> < ...
- LeetCode 刷题感想之动态规划
在 LeetCode/剑指Offer 上刷了500题左右了,应该写一篇文章总结一下自己的感想.因为我自己是测试,所以从测试角度来写感受吧. 先说动态规划. 什么是动态规划?是经典算法思想之一,是自底向 ...
- Linux系列---【yum安装已下载好的rpm包】
yum安装已下载好的rpm包 先进入已下载好的rpm包的目录,然后执行下面的命令 yum localinstall xxx.rpm
- C语言程序设计基础 实验3 函数
C语言程序设计基础 实验3 函数 一.实验目的 1. 理解函数的本质:模块化,实现代码复用 2. 掌握函数定义.声明.调用的语法 3. 理解并掌握函数的形参.实参,以及函数调用和返回的过程 4. ...
- 实验二 K-近邻算法及应用
博客班级 https://edu.cnblogs.com/campus/ahgc/machinelearning 作业要求 https://edu.cnblogs.com/campus/ahgc/ma ...
- Nginx版本。
Nginx官网提供了三个类型的版本Mainline version:Mainline 是 Nginx 目前主力在做的版本,可以说是开发版Stable version:最新稳定版,生产环境上建议使用的版 ...
- Integer类自动拆箱,装箱解析
1.自动拆箱 例1: int i1 = 10; Integer i2 = new Integer(10); System.out.println(i1 == i2); 这个结果是true i1为基本数 ...
- 记录Nginx配置
1 # Proxy to the Airsonic server location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_hea ...
- java获取前端的token并验证与拦截器
请求时获取token并验证 public class MyInterceptor implements HandlerInterceptor { //方法执行前进行拦截 @Override publi ...
- topN算法问题
问题: 如何在10亿个整数中找出前1000个最大的数? 小顶堆堆排序 首先,我们需要构建一个大小为N(1000)的小顶堆,小顶堆的性质如下:每一个父节点的值都小于左右孩子节点,然后依次从文件中读取10 ...