javaSE基础学习笔记 day18
泛型 (JDK 5.0新特性)
在集合中使用泛型:
- 集合接口或集合类在 JDK 5.0 时都修改为带泛型的结构。
- 在实例化集合时,可指明具体的的泛型类型。
- 指明类型后,在集合接口或集合类中凡是定义的类或接口时,内部结构(如方法,属性,构造器)使用到泛型的位置,都指为实例化时指定的泛型类型。
- 泛型类型必须是类,基本数据类型用包装类来代替。
- 若不指定泛型类型,则默认按照 Object 类处理,但不完全等价。
JDK7.0特性:类型推断
Map<String, Integer> map = new Hashmap<>();
注意:泛型不同的引用之间不能相互赋值。
泛型类 接口
- 静态方法不能使用类或接口的泛型,因为泛型是在类的实例化时才指定的。
- 异常类不能声明为泛型的。
class Person<T>{
private T t;
public T method(T t){}
}
泛型方法
- 可以声明为静态的。
- 在方法中出现了泛型结构,泛型参数与类的泛型参数没有任何关系,换句话说,泛型方法所属类是不是泛型都没关系。
- 需要在方法前显示的声明 < E > 结构。
public <E> E method(E e){}
泛型在继承方面的体现
若 A 类是 B 类的父类,则 G < A > 和 G < B > 没有子父关系,是并列关系,他们的公共父类为G < ? >。
通配符的使用:?
List <Object> list1 = new ArrayList();
List <String> list2 = new ArrayList();
List <?> list3;
//list1 = list2 是错误的,因为不同泛型间引用不能相互赋值
list3 = list1;
list3 = list2;
对于 List < ? > 类型的引用,就不能向其内部添加数据(除了添加 null 以外)。
允许读取数据,读取出来的数据是 Object 类型的。
有限制的通配符:
- ? extends Person :代表 Person 及其所有子类。
- ? super Person:代表 Person 及其所有父类。
File 类及其使用。
File 类的一个对象,代表一个文件或一个文件目录。
File类中涉及到关于文件或文件目录的创建,删除,重命名,修改时间,文件大小等方法,但并未涉及到写入或读取文件内容。如需读取或写入文件内容,必须使用 IO 流。
后续 File 类对象常作为参数传到流的构造器中,指明读取或写入的终点。
构造函数:
- public File(String pathname) :以pathname为路径创建File对象,可以是绝对路径或者相对路径
- public File(String parent,String child):以parent为父路径,child为子路径创建File对象。
- public File(File parent,String child):根据一个父File对象和子文件路径创建File对象
常用方法:
- public String getAbsolutePath():获取绝对路径
- public String getPath() :获取路径
- public String getName() :获取名称
- public String getParent():获取上层文件目录路径。若无,返回null
- public long length() :获取文件长度(即:字节数)。不能获取目录的长度。
- public long lastModified() :获取最后一次的修改时间,毫秒值
- public String[] list() :获取指定目录下的所有文件或者文件目录的名称数组
- public File[] listFiles() :获取指定目录下的所有文件或者文件目录的File数组
- public boolean renameTo(File dest):把文件重命名为指定的文件路径
- public boolean isDirectory():判断是否是文件目录
- public boolean isFile() :判断是否是文件
- public boolean exists() :判断是否存在
- public boolean canRead() :判断是否可读
- public boolean canWrite() :判断是否可写
- public boolean isHidden() :判断是否隐藏
- public boolean createNewFile() :创建文件。若文件存在,则不创建,返回false
- public boolean mkdir() :创建文件目录。如果此文件目录存在,就不创建了。如果此文件目录的上层目录不存在,也不创建。
- public boolean mkdirs() :创建文件目录。如果上层文件目录不存在,一并创建
- public boolean delete():删除文件或者文件夹