FOR初学者 IO流,泛型,异常难点总结

IO流:

四个顶层抽象类:

字节流:      字节流可以操作任何数据,但是操作纯文本时容易出现乱码

OutputStream(字节输出流)----->FileOutputStream(具体操作类);

InputStream(字节输入流)----->FileInputStream(具体操作类);

字符流:     字符流用于操作纯文本数据

1.     Reader(字符输入流)--->InputStreamReader(转换流:把字节流转化成字符流)--->FileReader(具体操作流)--->BufferedReader(高效流)

2.      Writer(字符输出流)---->OutputStreamWriter(转换流:把字符流转化成字节流)--->FileWriter(具体操作流)--->BufferedWriter(高效流)

File类-->FileReader/Writer类-->outputStreamWriter/inputStreamReader类||BufferedWriter/BufferedReader类

File file = new File("路径");//File最常见的构造

FileReader fr = new FileReader(file);//普通流构造时里面放的是File类型的对象

BufferedReader br = new BufferedReader(fr)//高效流构造时里面放的是普通流

* BufferedReader高效字符流特殊方法

* public String readLine()  一次读一行,如果读到末尾返回null

* BufferedWriter高效字符流特殊方法

* public void newLine()  换行

异常体系:exception和Error都继承于祖类throwable,

exception又分为RunTimeException与非RunTimeException

FOR初学者 IO流,泛型,异常难点总结_第1张图片

异常的处理方式

父类没有的异常子类肯定没有,

捕获异常:  try/catch

//单异常处理

try{

System.out.println(1/0);

}catch(ArithmeticException e) {

System.out.println("MDZZ!");

}

//多异常处理:(一次捕获,多个catch处理)先检测try中哪个出现了异常,然后执行对应catch中的语句,由于java是中断异常处理机制,所以直接执行下面的非异常处理机制的语句

try{

Dateparse= date.parse(s);

System.out.println(1/0);

}catch(ParseException e) {

System.out.println("这是parse异常");

e.printStackTrace();

}catch(ArithmeticException e){

System.out.println("这是数学异常");

System.out.println("MDZZ");

e.printStackTrace();

}

//控制台上输出的是:这是parse异常...................还有显示的位置

//上面的代码也可以修改成另一种形式(不通用)

try{

Dateparse= date.parse(s);

System.out.println(1/0);

}catch(ParseException e|ArithmeticException e) {//不可能两个异常都产生,最多只能产生一个异常,因为产生异常之后中断处理,就不会再执行try里面的语句了

System.out.println("这是parse异常");

e.printStackTrace();

}

声明抛出异常

publicvoidmethod()throwsParseException{//方法后面加throws+可能出现的异常,声明如果出现异常就将异常抛出,谁调用谁去处理异常,调用者也可以选择继续抛出,交给JVM来处理! 如果在定义方法是没有声明抛出,那么在方法中出现的异常会直接交给JVM处理!

String s ="2010-11-28";

DateFormat date =newSimpleDateFormat("yyyy-MM!dd");

Dateparse= date.parse(s);

System.out.println(1/0);

}

自定义异常:

定义格式:如果是编译期异常,则继承exception,如果是运行期异 常则继承RuntimeException,

注意:自定义异常需要手动抛出,使用throw抛出

1.创建异常对象:普通的创建对象

2.抛出异常:使用throw,结束之后表示产生了一个异常

3.处理异常:使用throws或者try/catch来处理

publicclassDemo {

publicstaticvoidmain(String[] args)throwsParseException {

Scanner sc =newScanner(System.in);

//自定义异常的练习

inti = sc.nextInt();

if(i<50>){

Over50 o50 =newOver50();

throwo50;//手动抛出异常

}

System.out.println("呵呵");

}

classOver50extendsRuntimeException{//定义了over50运行异常类

}

泛型

1.概述:用来灵活地将数据类型应用到不同的类、方法、接口当中。将数据类型作为参数传递

2.特点: 泛型的使用只有在创建对象时,数据类型时才能够确定,在编译成class文件时会被擦除,在运行时期会被补偿

泛型类:直接在类名后加<变量,通常为E或者T>

使用:创建对象时确定类型

泛型方法:

//简单的将任意类型的一个t打印出来

publicvoidmethod(T t){

System.out.println(t.toString());

}

泛型接口:

定义格式:直接在接口后面加;

//定义泛型接口

publicinterfaceMyInterface{

publicabstractvoidmethod(T t);

}

//泛型接口的使用

1.定义类时,实现接口,此时将接口中的数据类型确定下来,这时的类是没有泛型的,其所有类型都已经确定下来了.

classDemo1implementsMyInterface{

publicvoidmethod(String s) {

}

}

2.定义类时,实现接口,此时接口中的数据类型还没有确定下来,这时的类也应该要有泛型,其所有类型要等创建对象的时候才能被定下来.

classDemo1implementsMyInterface{

publicvoidmethod(T t) {

}

}

你可能感兴趣的:(FOR初学者 IO流,泛型,异常难点总结)