------- android培训、java培训、期待与您交流! ----------
一、泛型
1.泛型:JDK1.5版本以后出现新特性。用于解决安全问题,是一个类型安全机制。
2.泛型好处:
1.将运行时期出现问题ClassCastException,转移到了编译时期
方便于程序员解决问题。让运行时问题减少,安全
2,避免了强制转换麻烦。
3.泛型格式:通过<>来定义要操作的引用数据类型。
4.什么时候写泛型呢?
通常在集合框架中很常见,
只要见到<>就要定义泛型。
其实<>就是用来接收类型的。
当使用集合时,将集合中要存储的数据类型作为参数传递到<>中即可。
泛型在程序定义上的体现
1.泛型类:将泛型定义在类上
什么时候定义泛型类?
当类中要操作的引用数据类型不确定的时候。
classTool<Q>
{
private Q obj;
public void setObject(Q obj)
{
this.obj = obj;
}
public Q getObject()
{
return obj;
}
}
泛型类定义的泛型,在整个类中有效。如果被方法使用,
那么泛型类的对象明确要操作的具体类型后,所有要操作的类型就已经固定了。
2.泛型方法:将泛型定义在方法上
什么时候定义泛型方法?
当方法操作的数据类型不确定的时候。
public<T> void show(T t)
{
System.out.println("show:"+t);
}
3.静态方法泛型:
特殊之处:
静态方法不可以访问类上定义的泛型。
如果静态方法操作的应用数据类型不确定,可以将泛型定义在方法上。
public static <W> voidmethod(W t)
{
System.out.println("method:"+t);
}
4.泛型接口:
interface Inter<T>
{
void show(T t);
}
class InterImpl<T> implements Inter<T>
{
public void show(T t)
{
System.out.println("show:"+t);
}
}
泛型限定
?通配符,也可以理解为占位符。
泛型的限定:
? extends E:可以接收E类型或者E的子类型,上限。
? super E:可以接收E类型或者E的父类型,下限
上限什么时候用:往集合中添加元素时,即可以添加E类型对象,又可以添加E的子类型。
下限什么时候用:当从集合中获取元素进行操作的时候,可以用当前元素的类型接收,也可以用当前元素的父类型接收。
二、高级for循环
格式:
for(数据类型变量名 :被遍历的集合(Collection)或者数组)
{
}
传统for和高级for有什么区别呢?
高级for有一个局限性。必须有被遍历的目标。
建议在遍历数组的时候,还是用传统for。因为传统for可以定义角标。
import java.util.*;
class ForEachDemo
{
public static voidmain(String[] args)
{
ArrayList<String>al = new ArrayList<String>();
al.add("abc1");
al.add("abc2");
al.add("abc3");
for(String s : al)
{
System.out.println(s);
}
System.out.println(al);
int[] arr = {3,5,1};
for(int x=0; x<arr.length; x++)
{
System.out.println(arr[x]);
}
for(int i : arr)
{
System.out.println("i:"+i);
}
HashMap<Integer,String>hm = new HashMap<Integer,String>();
hm.put(1,"a");
hm.put(2,"b");
hm.put(3,"c");
Set<Integer>keySet = hm.keySet();
for(Integer i :keySet)
{
System.out.println(i+"::"+hm.get(i));
}
for(Map.Entry<Integer,String>me : hm.entrySet())
{
System.out.println(me.getKey()+"------"+me.getValue());
}
}
}
三、可变参数(...)
用到函数的参数上,当要操作的同一个类型元素个数不确定的时候,可用这个方式,这个参数可以接受任意个数的同一类型的数据。
方法的可变参数:
在使用时注意:可变参数一定要定义在参数列表最后面,否则编译失败。
四、静态导入
StaticImport 静态导入
当类名重名时,需要指定具体的包名。
当方法重名是,指定具备所属的对象或者类。
importstatic java.util.Arrays.*;//导入的是Arrays这个类中的所有静态成员。
importstatic java.lang.System.*;//导入了System类中所有静态成员。
import staticjava.util.Collections.*;//导入了Collections类中的所有静态成员
注意:如果没有写static,导入的是类;如果写static,导入的是某一类中所有的静态成员。
------- android培训、java培训、期待与您交流! ----------