黑马程序员-泛型
来源:互联网 发布:saas源码 java 编辑:程序博客网 时间:2024/06/06 20:05
---------------------- android培训、java培训、期待与您交流! ----------------------
可变参数:重载和重写的区别:重写不能缩小访问权限,不能抛出新的异常。
a) ...位于变量类型和变量名之间前后有无空格都可以
b) 注意:可变参数一定要定义在参数列表的最后面。
c) 其实是数组参数的一种简写形式。不用每次传参数时手动new一个数组了。只要将要操作的元素作为参数传递即可,隐式的将这些参数封装成了数组。
oreach输出
格式:for(数据类型变量名:被遍历的集合或数组变量)
对集合进行遍历:
只能对集合进行遍历,不能对集合进行操作
迭代除了遍历,还可以remove集合中的元素
如果是ListIterator,还可以在遍历过程中对集合进行增删改查
传统for和高级for的区别:
高级for有一个局限性,必须有被遍历的目标
传统for循环可以定义角标。
静态导入 import static
泛型:
用于解决安全问题,是一个安全机制。提供给java编译器使用。可以限定输入的类型,让编译器挡住非法的类型的输入,编译器编译带类型的集合时会去除掉“类型”信息,使程序的运行效率不受影响。对于参数化的泛型类型,.getClass()方法的返回值和原始类型完全一样,只要跳过编译器,就可以往某个泛型集合中加入其它类型的数据,例如:用反射得到集合,再调用其add()方法即可。
好处:将运行时期出现的问题,转移到了编译时期,方便问题解决。
避免了强制转换操作。
规则:
1、参数化类型与原始类型兼容
参数化类型可以引用一个原始化类型的对象,编译报警告,如:
Collectioncoll<String> = new ArrayList();
原始类型可以引用一个参数化类型的对象,编译报警告,如:
Collection coll = newArrayList<String>();
2、参数化类型不考虑类型参数的继承:即当左右两边都有泛型时,要一致。
ArrayList<String> arr= new ArrayList<Object>();
ArrayList<Object> arr= new ArrayList<String>();
3、在创建数组实例时,数组元素不能使用参数化的类型,如:
ArrayList<String> arrlist[] =new ArrayList<String>();
4、<T>其中的泛型参数不能是基本数据类型,只能是引用数据类型。
5、定义多个泛型参数时,参数之间用“,”隔开。
6、用类型变量表示异常,称为参数化的异常,可用于方法的throws列表中,但不能用于catch子句中。只能catch具体某个异常,我们可以将捕获的异常封装为参数化的异常然后throw。
通配符:“?”可以匹配任意类型
1、限定泛型上限:<? extends Number>只能是Number或其子类
2、限定泛型下限:<String super ?>只能是String或String的父类
a) 泛型类:
定义在类上的泛型,当类中的要操作的引用数据类型不确定时使用。代替Object完成扩展,泛型类在new对象时指定泛型类型。类上的泛型不能使用于静态方法上,静态方法要使用泛型需要自定义,不受泛型类的类型限制。
不同方法操作的是同一类型:如dao类中
b) 泛型方法:
定义在方法上的泛型,类中的不同方法可操作不同类型的。
格式:泛型<T>放在返回值之前。
如:public static <T> void swap(T[] t ,int x,int y){}
c) 静态泛型方法
静态泛型方法不能访问定义在类上的泛型(类在new对象时才指定泛型类型)
通过反射获得泛型的参数化类型:
直接获得泛型的参数化类型是不行的,但是可以将要获取的带泛型的类型作为函数的参数,通过反射获得该函数对应的Method对象,然后再获德该对象的泛型参数类型数组Type[]。在将数组中的元素强转为ParameteriedType类型,再通过该类的实例获得原始类型和参数化类型。
练习1:
package org.cc.fanxin;
//自定义泛型方法
class FanxinMethod {
public <T> void show(T t) {
System.out.println(t);
}
public static <W> void sop(W w) {//静态方法不能访问类上的泛型
System.out.println(w);
}
}
public class FanxinMethodDemo {
public static void main(String[] args) {
FanxinMethod fx = new FanxinMethod();
fx.show("show sfdsf");
fx.show(34);
FanxinMethod.sop(34);
}
}
练习2:
package org.cc.fanxin;
//自定义泛型类
class FanxinClass<T> {
public void show(T t) {//在方法上使用定义在类上的泛型类型
System.out.println(t);
}
public void sop(T t) {
System.out.println(t);
}
}
public class FanxinClassDemo {
public static void main(String[] args) {
FanxinClass<String> fx = new FanxinClass<String>();
fx.show("chenchao");
fx.sop("sop");
}
}
---------------------- android培训、java培训、期待与您交流! ----------------------
详细请查看:http://edu.csdn.net/heima
- 《黑马程序员》泛型
- 黑马程序员—泛型
- <黑马程序员>泛型
- 黑马程序员-Java泛型
- 黑马程序员_泛型
- 黑马程序员 泛型
- 黑马程序员--泛型
- 黑马程序员-java-泛型
- 黑马程序员_泛型
- 黑马程序员_Java泛型
- 黑马程序员_泛型
- 黑马程序员_泛型
- 黑马程序员-泛型Generic
- 黑马程序员:泛型
- 黑马程序员_泛型
- 黑马程序员--泛型
- 黑马程序员---高新技术 泛型
- 黑马程序员:泛型
- oracle学习
- java中HashMap详解
- 综述协同过滤推荐中存在的常见问题及解决方法
- Max Sequence
- hibernate.jdbc.batch_size和hibernate.jdbc.Fetch_Size
- 黑马程序员-泛型
- 云计算:企业转型云计算五大入门技巧
- 矩阵-斐波那契数列
- 收藏功能
- JTabbedPane实现关闭按钮
- HBase程式設計 實做I/O操作
- Android NDK编程入门笔记
- epoll实践
- bom以及字符编码