java异常处理throws完成异常抛出详解
已检查异常抛出
对于已检查异常(checked exceptions),编译器强制要求捕获并处理可能发生的异常,不处理就不能通过编译。但调用的方法没有能力处理这种异常,对于这种情况,可以在方法声明处使用throws子句来声明抛出异常,而是调用层次向上传递,谁调用这个方法,这个异常就由谁来处理。如:在service层读取文件,如果文件不存在,则需要将文件不存在的这条信息反馈给用户。要求在service层将此异常向上抛,用户层调用services层获取此条信息,反馈给用户。示例代码如下:
创建类ReadFile为业务类,该类中方法 readTxtFile需要读取硬盘上的文件,操作文件时会抛出IOException,但业务类并不能将发生异常信息推送给前端用户,此时将异常向上抛,延迟到调用方进行处理。
public class ReadFile {
public void readTxtFile(String filePath) throws IOException {
String encoding = "GBK";
File file = new File(filePath);
InputStreamReader read = new InputStreamReader(
new FileInputStream(file), encoding);//考虑到编码格式
BufferedReader bufferedReader = new BufferedReader(read);
String lineTxt = null;
while ((lineTxt = bufferedReader.readLine()) != null) {
System.out.println(lineTxt);
}
}
}
在方法中使用throws IOException向上抛出异常,异常种类为IO操作异常。main方法为调用方,调用方通过try catch获取异常,并将异常输出至控制台,代码如下
public static void main(String[] args) {
ReadFile readFile = new ReadFile();
try {
readFile.readTxtFile("d://temp1.txt");
} catch (IOException e) {
e.printStackTrace();
System.out.println(e.toString());
}
}
执行结果如下:
自定义异常抛出
在编程过程我们会根据业务规则,将一些不符合业务规则的操作也可以定义为异常。这时我们就需要使用到自定义异常,如果在实现方法中无法处理这种异常,这些异常还需向上抛出。
Java 可通过继承的方式编写自己的异常类,自定义异常类均继承自 Exception 类,个可完成异常类编写。如:用户登录时再service层有一个方法,用户名不存在或者密码不正确,均为异常,这时就需要用户自定义异常。该方法是业务层方法,无法将异常直接反馈给操作用户,需要通过交互层(如:controller)调用该方法时,捕获此种异常并将该异常返回给前端。具体示例代码如下:
首先定义简单的自定义异常类LoginException,代表是登录异常类。Exception 是所有异常类的父类,该类中已经封装了异常信息输出、异常发生位置描述等方法,提供复用。
LoginException类继承异常类Exception
public class LoginException extends Exception {
public LoginException(String message){
super(message);
}
}
编写业务代码Login,定义方法loginDemo,该方法抛出异常LoginException,根据业务规则抛出异常
public class Login {
public void loginDemo(String userName, String psw) throws LoginException {
if (!userName.equals("张三")) {
throw new LoginException("用户名错误!");
} else if (!psw.equals("000000")) {
throw new LoginException("密码错误!");
}
System.out.println("登录成功!");
}
}
调用代码为:
public static void loginDemo(String name,String psw){
Login login = new Login();
try {
login.loginDemo(name,psw);
} catch (LoginException e) {
e.printStackTrace();
}
}
执行结果为
对于上述简单的异常处理,我们一般直接使用throw new Exception(""),无需定义新的异常类,代码可以修改如下:
public class Login {
public void login(String userName, String psw) throws Exception {
if (!userName.equals("张三")) {
throw new Exception("用户名错误!");
} else if (!psw.equals("000000")) {
throw new Exception("密码错误!");
}
System.out.println("登录成功!");
}
}
结论
在软件开发的很多场景中,方法并不具有处理异常的能力,如在业务层代码或取的异常,需要将异常的信息通过交互层的代码反馈给使用者(当然也可以通过方法返回值进行反馈,但这种返回只能是简单的)。
异常向上抛出是指在方法中产生异常或获取异常后并不做任何处理,而是将“皮球”踢给调用方,调用方继续踢给它的下一级调用方,还是自己处理那是调用方的事情。向调用方抛出异常在方法的声明处使用throws关键字,后面跟要抛出异常的类型,也可以是多种类型异常,不同的异常用逗号隔开。
如:test方法执行时可能会抛出三种异常
public static void test(int a) throws TestAException, TestBException,TestCException{
//业务代码
}
在向上抛出异常时,通常会使用到throw,就是在一个方法的内部,当异常发生时抛出一个自定义的异常。
以上就是java异常处理throws完成异常抛出详解的详细内容,更多关于java异常throws完成异常抛出的资料请关注编程网其它相关文章!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341