Debug调试:
bug指程序当中遇到的一些错误异常,Debug指调试bug,找到bug对其解决;debug可以让代码逐行执行,查看代码执行的过程,调试程序中出现的bug或异常。
public class DebugClass {
public static void main(String[] args) {
// 鼠标单击行号的右边可以打断点,打完断点后,鼠标右击弹框选择调试Debug,点击完Debug后程序就停留在断点的第一行,此时需要点击控制台箭头进行调试,其中各个按钮的意思:
// F8: 每点击一次,执行一步
// F7: 进入到方法中
// shift + F8:跳出方法
// Ctrl + F5: 重新执行debug调试
// Ctrl + shift + F5:退出debug调试模式
int a = 1;
int b = 2;
int c = a + b;
System.out.println(c); // 3
}
}
异常的概念:
在程序中,异常指程序在执行过程中,出现的非正常的情况,会导致jvm的非正常停止。
在java中异常本身就是一个类,产生异常就是创建异常对象并抛出一个异常对象。java处理异常的方式是中断处理。
异常不是语法错误,语法错误编译不通过。
异常体系:
异常机制其实是帮助我们找到程序中的问题,异常的根类是:java.lang.Throwable,其下有两个子类:java.lang.Error(不能被处理)与java.lang.Exception(异常,处理后程序可以继续执行 )
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
// Throwable类:是java语言中所有错误或异常的超类
// Exception: 编译期异常(写代码时就会报的异常),它下面有个类:RuntimeException:运行期异常,指java程序运行过程中出现的问题。我们把异常处理掉程序可以继续运行。
// Error: 错误:一个程序不被允许的错误,想要程序运行,就必须得解决掉这个错误。
public class ExceptionClass {
public static void main(String[] args) /*throws ParseException*/ {
// 一、异常处理:
// 把字符串格式的日期解析为Date的日期;parse这个方法本身会抛异常,需要处理,这里有两种处理方式:
// 1.选中parse后Alt+回车,选择添加异常方法签名,此时main方法后面会新增throws ParseException将异常抛出,交给虚拟机处理
// 2.选中parse后Alt+回车,选中带有try/catch的一项,处理后程序可以正常执行。
SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd");
try {
// try中写可能出现异常的代码,运行期间报错也不会导致程序停止。
Date dt = sd.parse("2000-12-12");
} catch (ParseException e) {
throw new RuntimeException(e);
}
// 二、错误处理:
int[] arr = new int[100000000];
// int[] arr2 = new int[100000000000]; // 过大的整数: 100000000000,超出int范围报错
// 三、异常过程的解析:异常的产生过程解析(分析异常的怎么产生,如何处理异常),见下面数组索引越界异常图:
}
}
数组索引越界异常如:
处理异常:
java中处理异常会用到这几个关键字:try、catch、finally、throw、throws
throw 抛出异常:
import java.util.Objects;
// throw: 将指定的异常在指定的方法中抛出,使用格式:throw new xxxException()
// 注意:1.throw关键字必须写在方法的内部 2.后面new对象必须是Exception或者Exception的子类对象
// 3.抛出指定的异常对象后,需要对异常对象处理(方式一:throw关键字创建的是RuntimeException或者是RuntimeException的子类时,可以不处理,默认给jvm处理;方式二:如果创建的是编译异常,那么必须通过throws或try/catch处理)
public class ThrowClass {
public static void main(String[] args) {
// 调用方法测试:
int[] arr1 = new int[]{
1,2,3};
System.out.println(arr1[1]); // 2
System.out.println(arr1[3]); // ArrayIndexOutOfBoundsException属于运行期异常,无需处理
int[] arr2 = null;
System.out.println(arr2[1]); // NullPointerException属于运行期异常,无需处理
}
// 定义一个获取数据元素的方法:
public static int getArrayElement(int[] arr, int index) {
if (arr == null) {
throw new NullPointerException("数组不能为空!");
}
// java中Objects对象有一个静态方法,可以对对象是否为空进行判断
Objects.requireNonNull(arr);
Objects.requireNonNull(arr, "数组不能为空!"