JAVA基础学习笔记_异常

文章目录

异常

应该知道出了异常怎么处理

  • java.lang.Throwable
    • Error(错误,硬件出错或内存不足,不是程序员能解决的)
    • Exception(异常)
      • RuntimeException(运行时异常),代码出错导致程序出现的问题
      • 其他异常(编译时异常),提醒程序员检查本地信息
        java--(编译)-->字节码文件(class)---(运行)-->运行结果

异常的作用

  • 异常是查询bug的关键信息
  • 异常可以作为方法内部的一种特殊返回值,以便通知调用着底层的执行情况

处理异常的方式

  • 默认处理,将异常异常信息打印在控制台

  • 捕获异常(自己处理),好处就是可以让程序继续执行不停止为了不让程序停止

  • 抛出异常,在方法中出现异常,就没有继续运行的意义了,抛出处理告诉调用者出错了

    public static void main(String[] args) {
    int[] arr = {1,2,3,4,5};
    try {
    System.out.println(arr[10]);
    }
    catch (ArrayIndexOutOfBoundsException e) {
    System.out.println(e);
    }
    }

异常中的常见方法

  • e.getMessage()

  • e.toString()

  • e.printStackTrace()

    public static void main(String[] args) {
    int[] arr = {1,2,3,4,5};
    try {
    System.out.println(arr[10]);
    }
    catch (ArrayIndexOutOfBoundsException e) {
    String message = e.getMessage();//Index 10 out of bounds for length 5
    System.out.println(message);
    String string = e.toString();//java.lang.ArrayIndexOutOfBoundsException: Index 10 out of bounds for length 5
    System.out.println(string);
    e.printStackTrace();
    //输出信息最为详尽
    //java.lang.ArrayIndexOutOfBoundsException: Index 10 out of bounds for length 5at com.itheima.exception.exception.main(exception.java:7)
    }
    }

捕获异常

你比如说,这个信息是用户来输入的,如果不抛出异常捕获异常,不能用户输入错一次,我们整个java程序就停了吧,那还搞什么网页

复制代码
public static void main(String[] args) {
	//创建键盘录入对象
	Scanner sc = new Scanner(System.in);
	//创建女朋友对象
	GirlFriend girlFriend = new GirlFriend();
	while (true) {
		try {
			//接受女友姓名
			String name = sc.nextLine();
			//设置女友姓名
			girlFriend.setName(name);
			//接受女友年龄
			int age = sc.nextInt();
			//设置女友年龄
			girlFriend.setAge(age);
			break;
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	System.out.println(girlFriend);
}

public class GirlFriend {
    String name;
    int age;

    public GirlFriend() {
    }

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

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

    /**
     * 设置
     * @param name
     */
    public void setName(String name) {
        if(name.length()>10||name.length()<3){
            throw new RuntimeException();
        }
        this.name = name;
    }

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

    /**
     * 设置
     * @param age
     */
    public void setAge(int age) {
        if(age<18){
            throw new RuntimeException();
        }
        this.age = age;
    }

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

自定义异常

自定义的异常类继承RuntimeException就可以了

注意要重写空参构造和带参构造,不仅是这里注意,所有的类继承父类都不能忘写构造方法

相关推荐
leikooo4 小时前
用餐厅和盘子理解栈和堆
java·数据结构·链表·rust
Ivanqhz6 小时前
激活函数在 Transformer 中的作用及各种变体简述
java·linux·数据库·人工智能·深度学习
by209996 小时前
学会使用std::string类,并理解其内部是如何管理字符串的详细阐述(上)
c++·笔记·字符串·类和对象·string
沙漠之主6 小时前
C++编程教学设计资料:从入门到实战的完整课程方案
java·前端·c++
FPGA小徐6 小时前
PA1 基础设施(2)深度解析:NEMU 中 ITRACE、MTRACE、FTRACE、IRINGBUF、ETRACE、DIFFTEST 全解析
java·服务器·网络
青柠之夏cc7 小时前
AI与教育:个性化学习助手让“因材施教“成为现实,但代价是隐私?
人工智能·学习
YOLO数据集集合7 小时前
EvoAgent:面向PR研发治理的自进化Multi-Agent Harness系统
java·开发语言·目标检测·agent·自进化
知行EDI7 小时前
知行之桥 MaBang 端口使用指南——Create Order 订单创建篇
java·服务器·数据库
笑鸿的学习笔记7 小时前
C++笔记之大块顺序写
java·c++·笔记
for_ever_love__7 小时前
机器学习入门——手写线性回归与梯度下降
人工智能·python·学习·机器学习·线性回归