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

特点:适合操作文本文件







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章