异常:
定义:异常通俗来讲,其实就是你写出bug来了,编译器给你报错了。
public static void main(String[] args)throws Exception {
int z=10/0;
}
这个代码虽然说是可以运行,但是编译器会报错。
因为10不能去除以0。
异常分为两种,一种是运行时异常,另一种时编译时异常(就是运行到那就不会再运行了),然后异常都是一个类异常new出来的对象我们去接收就行了。
首先我们要知道异常类最大的爹是Exception,然后往下细分出很多,这里不举例api文档有。
编译时异常:
跟这个差不多。
捕获异常:
我们一个是发现了异常并解决异常(温柔的方式)。另一种是直接让你编译时异常(暴力的方式),让你程序直接崩掉,有点像c++中的assert。
温柔的方式:
我们需要将可能出现异常的代码写在try里边然后再用catch去捕获异常
try {
int i=10/0;//出现异常会去new一个异常类
}catch (RuntimeException e) //e去捕获了new出来的异常类
{
System.out.println("10不能去除以0");//打印为什么错了
}
这个方法不会让你的程序停止,会继续运行。
暴力的方式:
暴力的方式就是我们向上抛出异常
这个图应该很形象,但是这是编译器自己弄识别的,但是我们也可以自己去创建一个异常。
我们就来举个栗子:首相我们来个场景,我们需要去获取一个0-120的年龄,由用户自己输入,然后如果输入错了就直接抛出异常并终止程序。
public static void get(int a)throws Exception//2.去获取到异常
{
if(a>=0&&a<=120)
{}
else {
throw new Exception("请输入0-120的数字");//1.创建一个异常向上抛出
}
}
public static void main(String[] args) throws Exception{ //4.获取主方法代码存在的异常
Scanner sc=new Scanner(System.in);
get(sc.nextInt());//3.获取到了异常并且抛出异常
}
因为这个异常时一级一级传的,最终要到jvm里边,所以我们需要这样写。这就是另一种场景,但是作为用户你不想让程序崩掉,想以温柔的方式提醒,并且改正,这时候需要怎么办呢?
我们就可以这样设计:
public static void get(int a)throws Exception
{
if(a>=0&&a<=120)
{}
else {
throw new Exception("请输入0-120的数字");
}
}
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
while(true)
{
try {
get(sc.nextInt());//去get一个年龄
break; //get到了就退出循环
} catch (Exception e) {
System.out.println("请重新输入");
}
}
}
这种方法还是非常喵~的。最简单的两种方法就搞好了。
常见异常方法:
getMessage:
就是返回你带参构造的那串字符,所以我们就可以这样用了
打印的就是你传入的字符。
printStackTrace:
就是打印原本的异常(就是红字的那种异常),并且不让你的程序崩掉。举个栗子:
还需运行下面的代码
自定义异常:
我们其实也可以去写一个异常类,比如我们在get年龄的时候我们可以自己去造一个,这样也可以提高代码的可读性。
class getageException extends RuntimeException//继承运行异常类
{
public getageException() {
}
public getageException(String message) {
super(message);
}
}
public class exception {
public static void get(int a)throws Exception
{
if(a>=0&&a<=120)
{}
else {
throw new getageException("请输入0-120的数字");
}
}
public static void main(String[] args) throws Exception{
Scanner sc=new Scanner(System.in);
while(true) {
try {
get(sc.nextInt());
break;
} catch (getageException e) {
System.out.println(e.getMessage());
}
}
}
}
其实我感觉有点鸡肋在这种场景,写法上有点装b,你为什么不直接用个循环呢?
比如这样写:
但是你不得不承认,他在z=10/0;这种场景很好用!~
标签:10,Exception,Java,添砖,int,我们,异常,public From: https://blog.csdn.net/zgwnb666/article/details/139297555