博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于异常的捕获与异常的抛出的详细例子
阅读量:6429 次
发布时间:2019-06-23

本文共 2777 字,大约阅读时间需要 9 分钟。

一,异常的捕获

语法如下:

1
2
3
4
5
6
7
8
9
10
try
{
//程序代码块
}
catch
(Exceptiontype1 e){
}
catch
(Exceptiontype2 e){
}
...
finally
{
}

catch关键字后面括号中的Exception类型的参数e.Exception就是try代码块传递给catch代码块的变量类型,e就是变量名。如catch代码块中的语句e.getMessage();

1.getMessage()函数:获得异常的性质。

2.toString()函数:给出异常的类型和性质。

3.printStackTrace()函数:指出异常的类型,性质,栈层次及出现在程序中的位置。

在完整的异常处理语句一定要包含finally语句,不管程序有无异常发生,并且不管try-catch之间的语句是否顺利执行完毕,都会执行finally语句。除了以下4种特殊情况:

1.在finally语句块中发生了异常;2.在前面的代码中用了System.exit()退出程序;3.程序所在的线程死亡;4.关闭了CPU

例子1:捕获单个异常:捕获加载空异常时发生的异常

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package 
com.lixiyu;
public 
class 
CatchException {
public 
static 
void 
main(String[] args){
    
try
{
        
System.out.println(
"进入try语句块"
);
        
Class<?>clazz=Class.forName(
""
); 
//得到一个空的Class对象
        
System.out.println(
"离开try语句块"
);
            
}
catch
(ClassNotFoundException e){
                
System.out.println(
"进入catch语句块"
);
                
e.printStackTrace();
                
System.out.println(
"离开catch语句块"
);
            
}
finally
{
                
System.out.println(
"进入finally语句块"
);
            
}
}

例子2:捕获多个异常:对加载数据库驱动和创建数据库连接时所发生的异常分别进行捕获

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package 
com.lixiyu;
import 
java.sql.Connection;
import 
java.sql.DriverManager;
import 
java.sql.SQLException;
public 
class 
CatchExceptionOne {
    
private 
static 
String URL=
            
"jdbc:mysql://localhost:3306/db_database"
;
    
private 
static 
String DRIVER=
"com.mysql.jdbc.Driver"
;
    
private 
static 
String USERNAME=
"mr"
;
    
private 
static 
String PASSWORD=
"mingri"
;
    
private 
static 
Connection conn;
    
public 
static 
Connection getConnection(){
        
try
{
            
Class.forName(DRIVER);
//加载驱动程序
            
conn=DriverManager.getConnection(URL,USERNAME,PASSWORD);
//建立连接
            
return 
conn;
        
}
catch
(ClassNotFoundException e){
//捕获类为发现异常
            
e.printStackTrace();
        
}
catch 
(SQLException e) {
// 捕获SQL异常
            
e.printStackTrace();
        
}
        
return 
null
;
    
}
public 
static 
void 
main(String[] args){
    
CatchExceptionOne.getConnection();
}
}

二,异常的抛出

1.使用throws声明抛出异常

1
2
3
4
5
6
7
8
9
10
11
12
13
package 
com.lixiyu;
public 
class 
Shoot {
static 
void 
pop() 
throws 
NegativeArraySizeException{
//定义方法并抛出NegativeArraySizeException异常
    
int
[]arr=
new 
int
[-
3
];
}
public 
static 
void 
main(String[] args){
    
try
{
        
pop();
    
}
catch
(NegativeArraySizeException e){
        
System.out.println(
"pop()方法抛出的异常"
);
    
}
}
}

2.使用throw语句抛出异常

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package 
com.lixiyu;
public 
class 
UseThrow {
    
final 
static 
double 
PI=
3.14
;
    
public 
void 
computerArea(
double 
r)
throws 
Exception{
    
if
(r<=
0.0
){
        
throw 
new 
Exception(
"程序异常:\n半径"
+r+
"不大于0."
);
//使用throw语句抛出异常
    
}
else
{
        
double 
circleArea=PI*r*r;
        
System.out.println(
"半径是"
+r+
"的圆面积是:"
+circleArea);
    
}
    
}
    
public 
static 
void 
main(String[] args){
        
UseThrow ut=
new 
UseThrow();
        
try
{
            
ut.computerArea(-
200
);
        
}
catch
(Exception e){
            
System.out.println(e.getMessage());
        
}
    
}
}
本文转自lixiyu 51CTO博客,原文链接:http://blog.51cto.com/lixiyu/1307676,如需转载请自行联系原作者
你可能感兴趣的文章
mac 删除文件夹里所有的.svn文件
查看>>
程序制作 代写程序 软件定制 代写Assignment 网络IT支持服务
查看>>
mysql 案例~select引起的性能问题
查看>>
直接读取图层
查看>>
springsecurity 源码解读 之 RememberMeAuthenticationFilter
查看>>
HTML5标准学习 - 编码
查看>>
JS 时间戳转星期几 AND js时间戳判断时间几天前
查看>>
UVa11426 最大公约数之和(正版)
查看>>
SQL练习之求解填字游戏
查看>>
UIApplication
查看>>
12:Web及MySQL服务异常监测案例
查看>>
数据库性能优化之冗余字段的作用
查看>>
DBA_实践指南系列9_Oracle Erp R12应用补丁AutoPatch/AutoControl/AutoConfig(案例)
查看>>
数据库设计三大范式
查看>>
ionic 字体的导入方法
查看>>
内部类详解
查看>>
类加载机制
查看>>
mongodb int型id 自增
查看>>
Java中的4种代码块
查看>>
Ocelot(七)- 入门
查看>>