首页 > 编程语言 >【Java】Java 异常处理

【Java】Java 异常处理

时间:2023-05-11 16:46:33浏览次数:40  
标签:Java 处理 void System println 异常 public out

1、什么是异常?

将程序执行中发生的不正常情况称为“异常”

2、Java程序在执行过程中所发生的异常事件可分为两类

java.lang.Error:一般不编写针对性的代码进行处理

java.lang.Exception:可以进行异常的处理

Error:Java虚拟机无法解决的严重问题。如:JVM系统内部错误、资源 耗尽等严重情况。比如:StackOverflowError和OOM。一般不编写针对性 的代码进行处理。

package com.err;

/*
 * Error:Java虚拟机无法解决的严重问题。如:JVM系统内部错误、资源 耗尽等严重情况。比如:StackOverflowError和OOM。一般不编写针对性 的代码进行处理
 */
public class DemoErr {
    public static void main(String[] args) {
        // 1.java.lang.StackOverflowError 栈溢出
        // main(args);
        
        // 2.java.lang.OutOfMemoryError 堆溢出
        Integer[] array = new Integer[1024*1024*1024];
    }
}
DemoErr.java

 

 

执行结果:

 

Exception: 其它因编程错误或偶然的外在因素导致的一般性问题,可以使 用针对性的代码进行处理  

  编译时异常:IOException、  FileNotFoundException、  ClassNotFoundException

  运行时异常:NullPointerException、 ArrayIndexOutOfBoundsException、  ClassCastException、 NumberFormatException、 InputMismatchException

package com.err;

import java.util.Date;
import java.util.Scanner;

public class DemoRunExcept {

    // NullPointerException 空指针异常
    public void NullPointerE() {
        Integer[] array = null; // 空指针举例
        System.out.println(array[0]);
    }

    // ArrayIndexOutOfBoundsException 角标越界
    public void ArrayIndexE(){
        int[] array = new int[2]; // 数组角标越界举例
        System.out.println(array[2]);
    }

    // ClassCastException 类型转换异常
    public void ClassCastE() {
        Object obj = new Date();
        String str = (String)obj;
        System.out.println(str);
    }

    // NumberFormatException 数字转换异常
    public void NumberFormatE() {
        String num = "123a";
        int number = Integer.parseInt(num);
        System.out.println(number);
    }

    // InputMismatchException 输入不匹配
    public void InputMisE() {
        Scanner scanner = new Scanner(System.in);
        int score = scanner.nextInt(); // 键盘输入abc
        System.out.println(score);
    }

    public static void main(String[] args) {
        DemoRunExcept demoRunExcept = new DemoRunExcept();
        demoRunExcept.NullPointerE();
        demoRunExcept.ArrayIndexE();
        demoRunExcept.ClassCastE();
        demoRunExcept.NumberFormatE();
        demoRunExcept.InputMisE();


    }

}
DemoRunExcept.java

 

执行结果:

 ……

 

 3、解决异常的方法

  ① 遇到错误就终止程序 的运行

  ② 编写程序时,对错误进行处理(如:抛出提示信息等)

 

4、异常处理 

1)try-catch-finally  <真正的将异常给处理掉>

try 块:用于捕获异常 <try 后必须存在catch和finally其中之一或全部 >

catch 块:用于处理try捕获到的异常

  <catch不会被执行的情况:① try语句没有被执行; ② try语句未触发异常 ③ 异常类型不匹配 >

finally 块:无论是否捕获或处理异常,finally块里的语句都会被执行;

  <当try块中或者catch块中遇到return语句时,先执行完finally中的代码,再执行return语句且不会执行finally后续代码>

  <finally不会被执行的情况:① try语句没有被执行; ② try内包含exit等终止程序的操作>

 语法:

try{

  // 可能出现异常的代码

  }catch(异常类型1 变量1){

  // 异常类型1处理方式

  }catch(异常类型2 变量2){

  // 异常类型2处理方式

  }

  ...

  finally{

  // 无论有无异常一定会执行的代码

  }
语法

 

 

 示例

package com.err;

public class DemoTry {

    public static void main(String[] args) {
        try{
            Integer[] array = null; // 空指针举例
            System.out.println(array[0]);
        }catch(NullPointerException npe){
            npe.printStackTrace();
            System.out.println("catch");
        }finally{
            System.out.println("over~");
        }

    }
}

 

 执行结果:  

 

 2)throw 语句抛出异常 

throw 捕获之后再抛出, 将异常抛出给调用方法,未对异常做出处理

throw要么和try-catch-finally语句配套使用,要么与throws配套使用

throw (异常对象);
语法

 

 

package com.err;

public class DemoTry {

    public void DemoThrowMethod(){
        try{
            Integer[] array = null; // 空指针举例
            System.out.println(array[0]);
        }catch(NullPointerException npe){
            throw npe;
        }finally{
            System.out.println("over~");
        }

    }
public static void main(String[] args) { DemoTry demoTry = new DemoTry(); demoTry.DemoThrowMethod(); } }

 

 执行结果:

 

3)throws 出现异常的一种可能性,并不一定会发生这些异常

throws 抛出且不处理异常 ,可以单独使用

[(修饰符)](返回值类型)(方法名)([参数列表])[throws(异常类)]{
}
语法

 

package com.err;

import java.io.IOException;

public class DemoTry {

    public void DemoThrowsMethod() throws NullPointerException, Exception {

        Integer[] array = null; // 空指针举例
        System.out.println("throws");
        System.out.println(array[0]);
    }

    public static void main(String[] args) {
        DemoTry demoTry = new DemoTry();
        try {
            demoTry.DemoThrowsMethod();
        } catch (Exception e) {
            System.out.println(e);
            e.printStackTrace();
        }
    }
}

 

执行结果:

 

 

4)手动抛出异常

手动的生成一个异常对象,并抛出(throw)  <仅抛出异常不进行出,所以需要捕获获取 若未捕获会出现:java: 未报告的异常错误java.lang.Exception; 必须对其进行捕获或声明以便抛出>

package com.err;

import java.io.IOException;

public class DemoTry {

    public void DemoThrowsMethod() throws NullPointerException, Exception {
        throw new Exception("自定义异常");//手动抛出异常
    }

    public static void main(String[] args) {
        DemoTry demoTry = new DemoTry();
        try {
            demoTry.DemoThrowsMethod();
        } catch (Exception e) {
            System.out.println(e);
            e.printStackTrace();
        }
    }
}

 

执行结果

 

5)自定义异常

1、通过继承 Exception 来实现自定义异常
2、自定义异常类的类名命名为 XXXException
<class><自定义异常名><extends><Exception>{
    ……
}
语法

 

package com.err;

// 通过继承 Exception 来实现自定义异常
class MyException extends Exception {
    // 无参的默认构造方法
    public MyException(){
        super();
    }

    // 以字符串的形式接收一个定制的异常消息,并将该消息传递给超类的构造方法。
    public MyException(String s){
        super(s);
    }
}

public class DemoMyException {
    public static void main(String[] args) {
        try {
            throw new MyException("抛出自定义异常");
        } catch (MyException e) {
            System.out.println(e);
            e.printStackTrace();
        }
    }
}

 

执行结果

 

 

 

 

 

 


 

拓展1:异常打印

try{……} catch(Exception e){……}

 

System.out.println(e):这个方法打印出异常,并且输出在哪里出现的异常;

e.printStackTrace():打印出异常,但是它还将显示出更深的调用信息

 

package com.err;

public class DemoTry {

    public void DemoThrowMethod(){
        try{
            Integer[] array = null; // 空指针举例
            System.out.println(array[0]);
        }catch (NullPointerException npe){
            System.out.println(npe);
            System.out.println("========分割线========");
            npe.printStackTrace();
        }finally{
            System.out.println("over~");
        }

    }

    public static void main(String[] args) {
        DemoTry demoTry = new DemoTry();
        demoTry.DemoThrowMethod();

    }
}
示例

 

执行结果:

 

 

参考地址:https://www.cnblogs.com/laizhenghua/articles/13054556.html

标签:Java,处理,void,System,println,异常,public,out
From: https://www.cnblogs.com/phoenixy/p/17390988.html

相关文章

  • Java虚拟机运行时退出运行
    虚拟机启动直接退出运行,是因为某一个类需要加载到IOC容器里创建bean时无法加载进去,这时候需要检查一下是不是有哪些方法或者类没有写完 ......
  • Java内存模型原理,你真的理解吗?(转载)
    内存模型产生背景在介绍Java内存模型之前,我们先了解一下物理计算机中的并发问题,理解这些问题可以搞清楚内存模型产生的背景。物理机遇到的并发问题与虚拟机中的情况有不少相似之处,物理机的解决方案对虚拟机的实现有相当的参考意义。物理机的并发问题硬件的效率问题计算机处......
  • java基础语法
    JAVA基础语法注释单行注释://System.out.println("Helloworld");多行注释:/*System.out.println("Helloworld");System.out.println("Helloworld");System.out.println("Helloworld");*/文档注释:/***@Descr......
  • java 启动参数设置
    nohupjava-Xms512m-Xmx1024m-XX:PermSize=64m-XX:MaxPermSize=512m-jarxxx.jar>>xxx.out2>&1&java虚拟机对外提供的可配置堆区的参数1、-Xms:表示java虚拟机堆区内存初始内存分配的大小,通常为操作系统可用内存的1/64大小即可,但仍需按照实际情况进行分配。有可能真的按......
  • Java生成微信小程序码
    官网文档地址:获取小程序码packagetest;importcom.alibaba.fastjson.JSONObject;importcom.fasterxml.jackson.core.JsonProcessingException;importcom.fasterxml.jackson.databind.ObjectMapper;importorg.apache.http.HttpEntity;importorg.apache.http.client.met......
  • k8s证书续签及异常:You must be logged in to the server
    1、证书续签(k8smaster节点执行):  #备份kubernetes配置sudocp-r/etc/kubernetes/etc/kubernetes_bak#更新证书sudokubeadmcertsrenewall#查看证书过期时间sudokubeadmcertscheck-expiration#删除conf文件sudorm-rf/etc/kubernetes/*.conf#重新生......
  • java代码中fastjson生成字符串和解析字符串的方法和javascript文件中字符串和json数组
    1.java代码中fastjson生成字符串和解析字符串的方法List<TemplateFull>templateFulls=newArrayList<TemplateFull>();JSONArrayjsonArr=newJSONArray();jsonArr.addAll(templateFulls);StringjsonStr=jsonArr.toJSONString();System.out.pr......
  • java代理模式及动态代理类
    1.     代理模式代理模式的作用是:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。代理模式一般涉及到的角色有:抽象角色:声明真实对象和代理对象的共同接口;代理角色:......
  • JavaWeb之Servlet本质
    Servlet:服务器和Wepapp开发者之间的协议,sun公司已经规范了Servlet协议,Wepapp开发者只需要去实现规范接口类和对应的配置文件即可,Servlet底层是面向接口编程,用反射机制实例化一个类后再向下转型成Servlet类(因为Wepapp开发者实现规范好,只需到对应的文件中调用各个方法)菜鸟教程的解......
  • Java 9模块化关键字及应用场景
    一、背景SpringBoot3.0最低要求jdk17,为跟上节奏储备知识。二、简介关键字描述应用场景module定义一个模块代码隔离,依赖控制,代码可重用性openmodule定义一个像java9之前的开放模块像Java的旧版本那样允许完全反射exports...to指定模块的一部分对外提供......