JAVA语法异常——编译时异常和运行时异常,异常的作用

文章讨论了Java中的编译时异常和运行时异常,解释了它们的定义、处理方式以及异常在调试和方法通信中的作用。通过示例代码展示了NullPointerException的产生原因及解决方法,强调了正确处理异常对于程序健壮性的重要性。
摘要由CSDN通过智能技术生成

1.编译时异常

在编译阶段必须要手动处理,否则代码报错。

编译阶段:

java不会运行代码,只会检查语法是否错误,或者做一些性能的优化。

 修改报错方法如下:

原因: parse方法的底层有ParseException。

2.运行时异常

代码出错导致程序出现异常

特点:在编译时不需要处理,是代码运行时出现异常。

 运行结果如下:数组越界异常。

 总结:

        1.编译时异常:

                除了 RuntimeExcpetion 和他的子类,其他都是编译时异常。
编译阶段需要进行处理,作用在于提醒程序员。
        2.运行时异常:

                 RuntimeException 本身和所有子类,都是运行时异常。
编译阶段不报错,是程序运行时出现的。   一般是由于参数传递错误带来的问题。

3.异常的作用

作用一:异常是用来查询 bug 的关键参考信息


作用二:异常可以作为方法内部的一种特殊返回值,以便通知调用者底层的执行情况
 

a.作用一示例如下:

Student 类:

package YiChang.YiChangZuoYong;

public class Student {
    private  String name;
    private int age;


    public Student() {
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    /**
     * 获取
     * @return name
     */
    public String getName() {
        return name;
    }

    /**
     * 设置
     * @param name
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 获取
     * @return age
     */
    public int getAge() {
        return age;
    }

    /**
     * 设置
     * @param age
     */
    public void setAge(int age) {
        this.age = age;
    }

    public String toString() {
        return "Student{name = " + name + ", age = " + age + "}";
    }
}

ExceptionDemo2 测试类:

package YiChang.YiChangZuoYong;

public class ExceptionDemo2 {
    public static void main(String[] args) {

        Student [] arr = new Student[3];
        String name = arr[0].getName();
        System.out.println(name);

    }
}

运行结果:

解析:数组内部存储的时引用数据类型,默认初始化值为 null null null(三个null)

 Exception in thread "main" java.lang.NullPointerException: Cannot invoke "YiChang.YiChangZuoYong.Student.getName()" because "arr[0]" is null
    at YiChang.YiChangZuoYong.ExceptionDemo2.main(ExceptionDemo2.java:7)

b.作用一实例如下

Student2类:

package YiChang.YiChangZuoYong;

public class Student2 {
    private  String name;
    private  int age;

    public Student2() {
    }

    public  Student2 (String str){
        String[] arr = str.split("-");
        this.name = arr[0];
        this.age = Integer.parseInt(arr[1]);

    }

    public Student2(String name, int age) {
        this.name = name;
        this.age = age;
    }

    /**
     * 获取
     * @return name
     */
    public String getName() {
        return name;
    }

    /**
     * 设置
     * @param name
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 获取
     * @return age
     */
    public int getAge() {
        return age;
    }

    /**
     * 设置
     * @param age
     */
    public void setAge(int age) {
        this.age = age;
    }

    public String toString() {
        return "Student2{name = " + name + ", age = " + age + "}";
    }
}

ExceptionDemo3 类:

package YiChang.YiChangZuoYong;

public class ExceptionDemo3 {
    public static void main(String[] args) {
        Student2 stu = new Student2("张三,23");
        System.out.println(stu);
    }
}

运行结果如下:

解析

 “ - ” 表示切割, 但是  Student2 stu = new Student2("张三,23");中的"张三,23"字符串为一个整体当作一个参数,并没有实现切割。

即:arr 0 :   张三,23,

但是  this.age = Integer.parseInt( arr [ 1 ] );     

arr [ 1 ]  无法获取元素 (Index 1 out of bounds for length 1).

如何修改Bug呢?

只需将   "-"    改为    ","  即可。

 此时运行结果:

 C.作用二示例如下:

在Studnet类中加入即可

package YiChang.YiChangZuoYong;

import FanXin.FanXinDemo2.Parent;

public class ExceptionDemo4 {

    public static void main(String[] args) {
        Student s1 = new Student();
        //年龄:(同学) 18-40岁
        s1.setAge(50);//就知道了50赋值失败
                    
    }
}

s1.setAge(50);//就知道了50赋值失败
            //选择1:自己悄悄处理
            //选择2:打印在控制台(默认情况下)

运行结果:

 

1. 什么是 Java 异常Java 异常是指程序执行期间可能发生的错误或异常情况,例如除以零、数组越界、空指针引用等。当这些异常发生Java 虚拟机会抛出一个异常对象,并且程序的执行流程将被中断。 2. Java 异常处理机制有哪些关键字和语句? Java 异常处理机制包括以下关键字和语句: - try:用于包含可能会抛出异常的代码块。 - catch:用于捕获指定类型的异常,并在捕获到异常执行相应的处理代码。 - finally:用于包含无论是否发生异常都需要执行的代码块。 - throw:用于抛出指定的异常对象。 - throws:用于声明可能会抛出指定类型异常的方法。 3. Java 中的异常分为哪几类? Java 中的异常分为两大类:Checked Exception 和 Unchecked Exception。 Checked Exception 是指在编译就能够检查出来的异常,例如 IOException、ClassNotFoundException 等。程序必须显式地处理这些异常,否则编译不通过。 Unchecked Exception 是指在运行时才能检查出来的异常,例如 NullPointerException、ArrayIndexOutOfBoundsException 等。程序可以选择处理这些异常,但不处理也不会导致编译错误。 4. 请简要说明 try-catch-finally 的执行流程。 当程序执行到 try 块Java 会尝试执行其中的代码。如果在 try 块中抛出了异常,则会将异常对象传递给 catch 块进行处理。catch 块会匹配异常类型,如果匹配成功,则执行相应的处理代码。如果 catch 块处理完异常后,程序需要继续执行,则会执行 finally 块中的代码。如果 finally 块中也抛出了异常,则该异常会覆盖 try 或 catch 块中的异常。 如果 try 块中没有抛出异常,则 catch 块不会被执行。如果 finally 块中抛出异常,则该异常会覆盖 try 块中的异常。 5. 什么是异常链? 异常链是指在处理异常,将一个异常对象作为另一个异常的原因,并将它们组合成一个异常链。这样做的好处是,在抛出异常可以同传递多个异常信息,从而更加清晰地表示异常发生的原因。 6. 请简要说明 try-with-resources 的作用和使用方法。 try-with-resources 是 Java 7 中引入的语法,用于自动关闭实现了 AutoCloseable 接口的资源。在 try 块中声明需要使用的资源,Java 会在 try 块执行完毕后自动关闭这些资源,无需手动调用 close 方法。 try-with-resources 的语法如下: ``` try (Resource1 r1 = new Resource1(); Resource2 r2 = new Resource2()) { // 使用资源 } catch (Exception e) { // 处理异常 } ``` 7. 请简要说明 Java 中的文本 IO。 Java 中的文本 IO 主要包括两种类:Reader 和 Writer。Reader 用于读取字符流,而 Writer 用于写入字符流。 Java 中常用的 Reader 类包括 InputStreamReader、FileReader 和 BufferedReader,常用的 Writer 类包括 OutputStreamWriter、FileWriter 和 BufferedWriter。这些类提供了各种方法来读取和写入字符流,并且可以处理多种编码格式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杪商柒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值