java异常捕获
1 异常概述
异常是一个程序执行期间发生的事件,他中断了正在执行的程序
2 异常的抛出和捕获
做一个案例 字符串转int异常
package nb;
public class Naaa {
public static void main(String[] args) {
String a = "tttt";
int age = Integer.parseInt(a);
System.out.println(age);
}
}
报错类型是字符串转数字
"C:\Program Files\Java\jdk-17\bin\java.exe" -Dfile.encoding=UTF-8 -classpath C:\bak\java\java1\out\production\java1 nb.Naaa
Exception in thread "main" java.lang.NumberFormatException: For input string: "tttt"
at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:67)
at java.base/java.lang.Integer.parseInt(Integer.java:668)
at java.base/java.lang.Integer.parseInt(Integer.java:786)
at nb.Naaa.main(Naaa.java:6)
Process finished with exit code 1
3 使用try catch finally 捕捉异常
package nb;
public class Naaa {
public static void main(String[] args) {
try {
String a = "tttt";
int age = Integer.parseInt(a);
System.out.println(age);
}
catch (Exception e){
System.out.println(e);
}
System.out.println(111);
}
}
可以看到异常被抛出了,并且程序顺利执行了异常后面的语句
3.1 finally语句块
无论程序异常是否发生,最终都会执行finally语句
在4种特殊情况finally语句不会被执行
在finally语句块中发生了异常
在前面的代码中使用了System.exit()
程序所在的线程死亡
关闭cpu
4 java常见的异常类
IOException:当发生某种I/O异常时,抛出此异常。此类是失败或中断的I/O操作生成的异常的通用类。
IllegalArgumentException:抛出的异常表明向方法传递了一个不合法或不正确的参数。
NullPointerException:当应用程序试图访问空对象时,则抛出该异常。
SQLException:提供关于数据库访问错误或其他错误信息的异常。
IndexOutOfBoundsException:指示某排序索引(例如对数组、字符串或向量的排序)超出范围时抛出。
NumberFormatException:当应用程序试图将字符串转换成一种数值类型,但该字符串不能转换为适当格式时,抛出该异常。
FileNotFoundException:当试图打开指定路径名表示的文件失败时,抛出此异常。
ClassCastException:当试图将对象强制转换为不是实例的子类时,抛出该异常。
ArrayStoreException:试图将错误类型的对象存储到一个对象数组时抛出的异常。
ArithmeticException:当出现异常的运算条件时,抛出此异常。例如,一个整数“除以零”时,抛出此类的一个实例。
NoSuchMethodException:无法找到某一特定方法时,抛出该异常。
SecurityException:由安全管理器抛出的异常,指示存在安全侵犯。
RuntimeExceptionRuntimeException:是那些可能在Java虚拟机正常运行期间抛出的异常的超类。
5 自定义异常
在程序中自定义异常,大致可以分成3步
创建自定义异常类
在方法中通过throw关键字抛出异常对象
如果在当前抛出异常的方法中处理异常,可以使用try{}catch(){}捕获异常
创建一个自定义异常的案例
package nb;
public class Das {
static int a(int b) throws Exception{
if (b>0){
throw new Exception("全体目光向我看齐");
}
return b;
}
public static void main(String[] args) {
try {
int c = a(1);
System.out.println(c);
}catch (Exception e){
System.out.println(e);
}
}
}
6 在方法中抛出异常
package nb;
public class Sab {
static void a() throws NegativeArraySizeException{
int[] arr = new int[-2];
}
public static void main(String[] args) {
try {
a();
}catch (NegativeArraySizeException e){
System.out.println("抛出异常");
}
}
}
延时案例a出现了异常抛出,在主方法中进行实现,同时也可以继续向上抛出
7 关闭资源
try catch resources能够很轻易的关闭在try catch 中使用的资源
如果资源对象是在try catch语句中声明的,jvm会自动调用close方法关闭资源
举一个案例
package nb;
class Resource implements AutoCloseable{
void a(){
System.out.println("你好");
}
@Override
public void close() throws Exception {
System.out.println("关闭资源");
}
}
public class Pkd {
public static void main(String[] args) {
try(Resource resource = new Resource()){
resource.a();}
catch (Exception e){
e.printStackTrace();
}
}
}
需要注意try的语法更换
标签:java,抛出,捕获,System,cnblog,try,异常,public From: https://blog.csdn.net/qq_62943420/article/details/142893663