Collections,泛型,File,IO流,字节/符输入输出流
1.Collections集合帮助类
2.泛型
泛型是一种编译时的一种概念,就是为了能够避免发生类型转换异常。
所谓的泛型就是说在定义方法,类,参数时指定为通用类型,使用这些方法或者类时,需要把通用类型指定为具体的数据类型。
定义泛型的语法:
类名<数据类型> 对象名称=new 类名();
类名<数据类型> 对象名称=new 类名<数据类型>();
作用:
1.消除类型转换
2.自动解包装
3.限制参数类型的范围
<?>:表示任何数据类型都可以
<? extends 类名>:只允许当前类或者当前类的子类
<? super 类名>:只允许当前类或者当前类的父类
<? extends 接口>:只允许实现了该接口的类
4.泛型方法
语法:
[访问修饰符] 泛型 返回类型 方法名称(参数列表){
}
用法1:
<T>:允许所有的泛型调用
<T extends 类名>:允许当前类以及当前类的子类调用
<T extends 接口>:允许实现了该接口的类调用
<T extends 类名&接口>:
5.类的泛型
ArrayList<String> list=new ArrayList();
不能new泛型类的对象
1. 泛型:就是在定义类、接口、方法、方法参数或成员变量时,指定它的操作对象的数据类型为一个参数(这个参数叫类型参数)。
在具体使用类、接口、方法、方法参数或成员变量时,将这个参数用具体的某一数据类型来代替。
2. 泛型的好处:它在编译时进行类型安全检查,并且在运行时所有的转换都是强制的、隐式的。提高了代码的重用率。
3. 定义语法: 类型参数的名称建议使用:E、K、V、T。在泛型类或接口中就可以把类型参数当作一种特定的类类型来使用。
class 类名<类型参数的名称> { …}
interface 接口名<类型参数的名称> { …}
class Test<T>{
public T get(int i){}
public static <C> void (C c){}
}
4. 当某个类的父类是泛型类时:这个子类要把类型参数传递给父类;也可以把子类定义成特定于指定类型的,这个子类就不再是泛型类了。
当某个类实现的接口是泛型接口时:具体子类要把类型参数传递给所实现的接口;也可以把具体子类定义成特定于指定类型的。
class TT<T> extends Test<T>{}
class TTT extends Test<Integer>{}
5. 有界类型参数:在指定类型参数时可以通过“T extends 父类名”来指定一个上界
class C<T extends Number>{
}
6. 泛型类中的任何实例方法本质上都是泛型方法。只有静态方法需要显式定义成泛型方法,定义语法:
访问控制符 [修饰符] <类型参数列表> 返回值类型 方法名(参数列表)
class Test<T>{
public T get(int i){}
public static <C> void (C c){}
}
7. 当使用泛型类或接口声明属性、局部变量、参数类型或返回值类型时,可使用通配符来代替类型参数。
通配符上界:<? extends Number>表示这个类型参数必须是Number类或其子类的实例。
通配符下界:<? super Integer>表示这个类型参数必须是Integer类或其父类的实例。
class Test{
private List<?> list;
public void test(List<? extends Number> list){}
}
8. 擦除:JDK1.5以前的版本中没有泛型,为了保证对以前版本的兼容,Java采用了被称为擦除的方式来处理泛型。
当Java代码被编译成字节码时,泛型类型的定义信息会被删除(擦除)
9. 泛型的局限
1) 不能使用基本类型的类型参数: 因为,在擦除时基本类型无法用Object类来代替。可以使用基本类型的包装类来代替它们。
2) 静态成员无法使用类型参数:因为静态成员独立于任何对象,是在对象创建之前就已经存在了,此时,编译器根本还无法知道它使用的是哪一个具体的类型。
3) 不能使用泛型类异常: Java代码中不能抛出也不能捕获泛型类的异常。
4) 不能使用泛型数组:这是Java语法的规定。 Generic<Integer> arr[] = new Generic<Ingeger>[10];//error
5) 不能实例化参数类型对象:也就是说,不能直接使用泛型的参数类型来构造一个对象。
public class A<T>{ T a = new T(); //编译报错 }
3.File类
4.IO流的原理
IO流就是让Java程序和数据源通过数据通道以流的形式进行数据的输入和输出操作。
5.IO流的分类
按流向分:
输入流:程序可以从中读取数据的流
输出流:程序能向其中写入数据的流
按数据传输单位分:
字节流:以字节为单位传输数据的流
字符流:以字符为单位传输数据的流
按功能分:
节点流:用于直接操作目标设备的流
过滤流:是对一个已存在的流的连接和封装,通过对数据的处理为程序提供更为强大、灵活的读写功能。
6.字节输入流InputStream
特点:擅长对视频,音频,二进制文件的操作,不适合操作文本文件,而且在读取中文时,会出现乱码,因为它是以
字节的形式读取数据的。
子类:FileInputStream
使用步骤:
step1:创建输入流类对象,并且指定要操作的文件
step2:调用read方法读
step3:循环读
step4:输出内容
step5:关闭IO流类对象,释放资源
7.字节输出流OutputStream
子类:FileOutputStream
使用步骤:
step1:创建FileOutputStream对象,并指定数据源
step2:调用write方法写数据
step3:写完数据,调用flush方法刷新
step4:关闭IO流类对象.
8.字符输入输出流
Reader--->FileReader
Writer--->FileWriter
特点:适合操作文本文件
2.泛型
泛型是一种编译时的一种概念,就是为了能够避免发生类型转换异常。
所谓的泛型就是说在定义方法,类,参数时指定为通用类型,使用这些方法或者类时,需要把通用类型指定为具体的数据类型。
定义泛型的语法:
类名<数据类型> 对象名称=new 类名();
类名<数据类型> 对象名称=new 类名<数据类型>();
作用:
1.消除类型转换
2.自动解包装
3.限制参数类型的范围
<?>:表示任何数据类型都可以
<? extends 类名>:只允许当前类或者当前类的子类
<? super 类名>:只允许当前类或者当前类的父类
<? extends 接口>:只允许实现了该接口的类
4.泛型方法
语法:
[访问修饰符] 泛型 返回类型 方法名称(参数列表){
}
用法1:
<T>:允许所有的泛型调用
<T extends 类名>:允许当前类以及当前类的子类调用
<T extends 接口>:允许实现了该接口的类调用
<T extends 类名&接口>:
5.类的泛型
ArrayList<String> list=new ArrayList();
不能new泛型类的对象
1. 泛型:就是在定义类、接口、方法、方法参数或成员变量时,指定它的操作对象的数据类型为一个参数(这个参数叫类型参数)。
在具体使用类、接口、方法、方法参数或成员变量时,将这个参数用具体的某一数据类型来代替。
2. 泛型的好处:它在编译时进行类型安全检查,并且在运行时所有的转换都是强制的、隐式的。提高了代码的重用率。
3. 定义语法: 类型参数的名称建议使用:E、K、V、T。在泛型类或接口中就可以把类型参数当作一种特定的类类型来使用。
class 类名<类型参数的名称> { …}
interface 接口名<类型参数的名称> { …}
class Test<T>{
public T get(int i){}
public static <C> void (C c){}
}
4. 当某个类的父类是泛型类时:这个子类要把类型参数传递给父类;也可以把子类定义成特定于指定类型的,这个子类就不再是泛型类了。
当某个类实现的接口是泛型接口时:具体子类要把类型参数传递给所实现的接口;也可以把具体子类定义成特定于指定类型的。
class TT<T> extends Test<T>{}
class TTT extends Test<Integer>{}
5. 有界类型参数:在指定类型参数时可以通过“T extends 父类名”来指定一个上界
class C<T extends Number>{
}
6. 泛型类中的任何实例方法本质上都是泛型方法。只有静态方法需要显式定义成泛型方法,定义语法:
访问控制符 [修饰符] <类型参数列表> 返回值类型 方法名(参数列表)
class Test<T>{
public T get(int i){}
public static <C> void (C c){}
}
7. 当使用泛型类或接口声明属性、局部变量、参数类型或返回值类型时,可使用通配符来代替类型参数。
通配符上界:<? extends Number>表示这个类型参数必须是Number类或其子类的实例。
通配符下界:<? super Integer>表示这个类型参数必须是Integer类或其父类的实例。
class Test{
private List<?> list;
public void test(List<? extends Number> list){}
}
8. 擦除:JDK1.5以前的版本中没有泛型,为了保证对以前版本的兼容,Java采用了被称为擦除的方式来处理泛型。
当Java代码被编译成字节码时,泛型类型的定义信息会被删除(擦除)
9. 泛型的局限
1) 不能使用基本类型的类型参数: 因为,在擦除时基本类型无法用Object类来代替。可以使用基本类型的包装类来代替它们。
2) 静态成员无法使用类型参数:因为静态成员独立于任何对象,是在对象创建之前就已经存在了,此时,编译器根本还无法知道它使用的是哪一个具体的类型。
3) 不能使用泛型类异常: Java代码中不能抛出也不能捕获泛型类的异常。
4) 不能使用泛型数组:这是Java语法的规定。 Generic<Integer> arr[] = new Generic<Ingeger>[10];//error
5) 不能实例化参数类型对象:也就是说,不能直接使用泛型的参数类型来构造一个对象。
public class A<T>{ T a = new T(); //编译报错 }
3.File类
4.IO流的原理
IO流就是让Java程序和数据源通过数据通道以流的形式进行数据的输入和输出操作。
5.IO流的分类
按流向分:
输入流:程序可以从中读取数据的流
输出流:程序能向其中写入数据的流
按数据传输单位分:
字节流:以字节为单位传输数据的流
字符流:以字符为单位传输数据的流
按功能分:
节点流:用于直接操作目标设备的流
过滤流:是对一个已存在的流的连接和封装,通过对数据的处理为程序提供更为强大、灵活的读写功能。
6.字节输入流InputStream
特点:擅长对视频,音频,二进制文件的操作,不适合操作文本文件,而且在读取中文时,会出现乱码,因为它是以
字节的形式读取数据的。
子类:FileInputStream
使用步骤:
step1:创建输入流类对象,并且指定要操作的文件
step2:调用read方法读
step3:循环读
step4:输出内容
step5:关闭IO流类对象,释放资源
7.字节输出流OutputStream
子类:FileOutputStream
使用步骤:
step1:创建FileOutputStream对象,并指定数据源
step2:调用write方法写数据
step3:写完数据,调用flush方法刷新
step4:关闭IO流类对象.
8.字符输入输出流
Reader--->FileReader
Writer--->FileWriter
特点:适合操作文本文件
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.