黑马程序员技术交流社区

标题: java总结-异常 [打印本页]

作者: 温立华    时间: 2013-3-8 16:48
标题: java总结-异常
异常:分为两类:1、 未检查异常,不需要检查的异常,程序员在编写代码时,只要细心就可以避免。对于象除数不能为0,或者格式不对,类似这样的异常。2、 检查异常,对于可能出现这种异常的代码,必须要编写代码来处理。对于文件的操作,构造与文件相关的对象时,大都属于这类异常。注意的是:与在普通代码块、实例代码块、静态代码中定义的变量类似,在try块或者catch块或者finally块中也可以定义变量,也属于块变量,它的生命周期也都局限在这个块中,在块的外边是不可见的。将可能出现异常问题的代码放置在try块中,如果没有异常出现,则正常执行代码;一旦异常问题出现,程序的执行马上转入到catch块中进行处理,而对于try块中的后续代码不再执行。即使在catch处理完毕,程序的执行也不会回到try块中。而是按照顺序结构继承向下执行。这样就使得即使在程序的执行流程中某部分代码出现了异常问题,整个程序仍然可以正常往下执行。如何自定义用户自己的异常类?自定义异常类,要继承异常的根类:Exception换页在一个方法中,如果出现了异常情况或者可能出现异常情况,如何做?1、 在方法体内,通过throw关键字,构造一个异常对象,向上抛出,抛给调用该方法的方法。2、 在方法头部,通过throws关键字,抛出异常名称。如何使用java中的异常处理机制?在编写代码的过程,正常情况下,不用刻意编写可能出现异常的处理代码,当智能编辑器提示时,摁ctrl+1,会提示有两种处理方式:一种是抛出给调用该段代码的方法,一种是代码本身处理。用哪种方式根据需要,如果在一个普通方法中,可以抛出,也可以处理。但这段代码要是处在主方法中,则必须处理,不能继承抛出。一般情况下,无论在哪种方法中,尽量处理为主,抛出为辅。package com.xt;
import com.help.Me;
public class Test{
public static void main(String[] args) throws MyException{
// MyClass mc = new MyClass();// int divide = mc.m1(110);


Test t1 = new Test();
// try// {// t1.callMethod();// } catch (MyException e)// {换页// // TODO Auto-generated catch block// // e.printStackTrace();// Me.writeLine(e.getMessage());// } finally// {// Me.writeLine("调用callMethod方法之后...");// }
t1.callMethod();
Me.writeLine("调用callMethod方法之后...");
}
public void callMethod() throws MyException{
MyClass mc = new MyClass();int div = mc.m1(110);

Me.writeLine("div: " + div);}}
class MyException extends Exception{
public MyException(){super();// TODO Auto-generated constructor stub}
public MyException(String arg0){super(arg0);// TODO Auto-generated constructor stub}
}
class MyClass{
int m1(int a
int b) throws MyException换页{if (b == 0){throw new MyException("除数为0");
}return a / b;}
}Java中的Io流分为三类:1、 字节流2、 字符流3、 对象流一、 字节流:
package com.xt;
import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStream;
import com.help.Me;
public class Test{
public static void main(String[] args){// String path1 = "C:\\Users\\Administrator\\Desktop";String path2 = "C:/Users/Administrator/Desktop\\javaweb2.doc";
File file = new File(path2);InputStream input = null;int len = 0;
换页try{input = new FileInputStream(file);
} catch (FileNotFoundException e){e.printStackTrace();}
try{len = input.available();// 可以通过引用得到所关联的文件的字节数} catch (IOException e){// TODO Auto-generated catch blocke.printStackTrace();}
byte[] b = new byte[len];
try{input.read(b);
} catch (IOException e){// TODO Auto-generated catch blocke.printStackTrace();}
try{input.close();} catch (IOException e){// TODO Auto-generated catch blocke.printStackTrace();}Me.writeLine(new String(b));
}}以字节流的方式写内容到文件中。换页File file = new File("c:/gao.txt");
OutputStream out = null;
// 将1到30的阶乘写到文件中StringBuilder sb = new StringBuilder();for (int i = 1; i{sb.append(i).append("!=\t").append(Me.factorial(i)).append("\n");}
String str = sb.toString().trim();
try{out = new FileOutputStream(file);
out.write(str.getBytes());
out.close();
} catch (FileNotFoundException e){// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e){// TODO Auto-generated catch blocke.printStackTrace();} finally{Me.writeLine("The end!");}

/** 抽象类的引用=具体子类对象 接口的引用=具体实现对象*/
// 赋值号的左边,赋值号的右边
// 赋值号右边的对象所在的类,与左边的引用一定有关系。是接口的实现类或换页者是抽象类的子类。
Aa aa = new AaImpl();Ia ia = new IaImpl();
/** 赋值号的左边可以是各种引用,具体类的,抽象类的,接口的, 但是赋值号的右边,一定是个具体类的对象,不论通过何种方式生成的对象。* 例如:通过工厂方法: NumberFormat nf = NumberFormat.getInstance();*/NumberFormat nf = NumberFormat.getInstance();Me.writeLine(nf.getClass().getName());
List list = Arrays.asList(new Integer[] { 123});

Me.writeLine(list.getClass().getName());Me.writeLine(list);换页



作者: 张卫刚    时间: 2013-3-8 17:18
总结的不错,我也复习下




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2