Java周总结7.20day

news2024/11/13 15:14:42

一,异常

异常 :指的是程序在运行过程中报错,然后停止运行,控制台显示错误。

注意事项:异常本身是一个类,出现异常会创建一个异常类的对象并抛出,

public class DemoTest { 
    public static void main(String[] args) {
 System.out.println("开始");
 System.out.println(1/0);
 System.out.println("结束");
     }
 }

在测试类中,打印1/0会报错,java.lang.ArithmeticException: / by zero  大概意思就是不能除以0;

1.2 异常体系

对于异常体系来说,帮助我们寻找问题  java.lang.Throwable

java.lang.Throwable有两个子类 

java.lang.Error java.lang.Exception 
平常所说的异常指 java.lang.Exception
Throwable
  • Error:严重的错误,无法解决,只能避免。
  • Exception:异常,产生后我们可以解决,让程序运行正常。

1.3 异常分类

我们经常遇见的异常指Exception,出现就要解决。

Exception的分类:

写代码时的异常(编译时期异常):没改就一直提示报错。

运行异常(运行时期异常):运行后,控制台显示有异常。

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

         //编译异常 
        //FileInputStream fis=new FileInputStream("D:\\1.txt"); 

        //运行异常
         System.out.println(1/0); 
    }
}    

1.4 异常的产生过程解析

public class Test {
     public static void main(String[] args) { 
        int[] arr = { 34, 12, 67 };
        int num = getElement(arr, 4);
         System.out.println("num=" + num);
         System.out.println("over");
 }

// 对给定的数组通过给定的角标获取元素
    public static int getElement(int[] arr, int index) {
         int element = arr[index];
         return element; 
    }
}

.异常的产生

throw关键字可以抛出一个异常对象,

throw用在方法内,抛出一个异常对象的同时告诉我们错误,然后停止方法运行。

语法   [ throw new 异常类名 ( 参数 );  ]
具体操作:
  1. 创建一个异常类,
  2. 通过throw将这个异常对象在控制台打印出来。
public class Person {
 private String name;
 private int age;

 public Person(String name, int age) {
     this.name = name;
 // 在给年龄赋值时,先判断
if (age < 0 || age > 120){
 // 产生异常 运行异常 
throw new RuntimeException("年龄数据不合法");  
}else {this. Age = age;} 
}
public Person() {}
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public int getAge() { return age; }
public void setAge(int age) { // 在给年龄赋值时,先判断 this. Age = age; } }

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

 /* 案例演示:给Person对象年龄赋值,如果年龄数据不合法,就产生 一个异常 */

    // 创建Person类对象 
    Person p1 = new Person("张三",18);
    System.out.println(p1.getName()+"..."+p1.getAge());

    
    Person p2 = new Person("李四",-18);
    System.out.println(p2.getName()+"..."+p2.getAge());

    }
}

.处理异常

3.1 声明处理异常

声明处理异常:不处理异常,提醒我们有异常,控制台打印异常信息
  语法 
修饰符 返回值类型 方法名(参数) throws 异常类名1,异常类名2…{ // 可 以抛出一个,也可以多个 }
public class DemoTest {
     public static void main(String[] args) throws Exception {

        //method01();
        //method02(1);
          method03(1); 

          System.out.println("结束"); 

}

    // 处理多个异常 抛最大的一个异常 
    public static void method03(int num) throws Exception {
         if (num == 1) { 
             throw new ParseException("解析异常",10);
         } else { 
             throw new IOException("IO异常"); 
    } 
}

    // 处理多个异常 分别抛出多个异常 
    public static void method02(int num) throws ParseException,IOException{ 
        if (num == 1) { 
            throw new ParseException("解析异常",10); 
        } else { 
            throw new IOException("IO异常"); 
    } 
}

    // 处理单个异常 
    public static void method01() throws ParseException{
    // 将异常标识出来,表示当前方法不处理异常 
    // 产生一个异常 
    throw new ParseException("解析异常",10);// 编译异常 
    // throw new ArrayIndexOutOfBoundsException("索引越 界异常");// 运行异常 
    } 
}

3.2 捕获处理异常

捕获处理异常语法:
                                
try{ 
    编写可能会出现异常的代码 
}catch(异常类型 e){
     处理异常的代码 
    //记录日志/打印异常信息/继续抛出异常 
}
执行 :
  1. 如果try中出现了异常,那么会执行行catch的代码,再向下
  2. 如果try没有出现,那就不会执行。
注意
  •  try和catch不能单独出现
public class DemoTest { 
    public static void main(String[] args){ 
        try{
            System.out.println("try开始"); 
            FileInputStream fis=new FileInputStream("D:\\2.txt"); 
            //创建异常对象并抛出 throw new FileNotFoundException("");                         
            System.out.println("try结束"); 
        }catch (IOException e){ 
        // 打印信息 
        //System.out.println("出现了异常");
        //System.out.println(e.getMessage());
        //System.out.println(e.toString());
         e.printStackTrace();// 打印异常的跟踪栈信息
        }

}
Throwable 类中定义了一些查看方法 :
  1. public String getMessage(): 获取异常的描述信息 , 原因 ( 提示给用户的时
    , 就提示错误原因。
  2. public String toString(): 获取异常的类型和异常描述信息 ( 不用 )
  3. public void printStackTrace(): 打印异常的跟踪栈信息并输出到控制台。

3.3 finally 代码块

finally :有一些特定的代码无论异常是否发生,都需要执行。另外,因为
异常会引发程序跳转,导致有些语句执行不到。
finally 就是解决这个问题的,在 finally 代码块中存放的代码都是一定会被
执行的。
语法:
try{
可能会出现异常的代码 
}catch(异常的类型 变量名){
 处理异常的代码或者打印异常的信息 
}finally{
 无论异常是否发生,都会执行这里的代码(正常情况,都会执行finally中的 代码,一般用来释放资源) 
}


执行步骤: 
1.首先执行try中的代码,如果try中的代码出现了异常,那么就直接执行 catch()里面的代码,执行完后会执行finally中的代码,然后程序继续往下执行 
2.如果try中的代码没有出现异常,那么就不会执行catch()里面的代码,但是 还是会执行finally中的代码,然后程序继续往下执行 
3.即使catch中有return,finally中的代码还是会执行
public class DemoTest { 
public static void main(String[] args){ 
Scanner sc = null;
 try{sc = new Scanner(System.in);
 String s = sc.nextLine();
 System.out.println(1/0);// 出现异常,throw new ArithmeticException(""); 
}catch (Exception e){
 System.out.println("出现了异常");
 //return;// 结束方法 finally会执行 
//System.exit(0);// 系统退出 finally不会执行 
}finally{ 
    sc.close();// 不会执行 
    System.out.println("关闭..."); 
    }
System.out.println("结束"); 
    } 
}

.自定义异常

  • 异常类的定义
  • 自定义一个编译期异常 : 自定义类 并继承于 java.lang.Exception 。
  • 自定义一个运行时期的异常类 : 自定义类 并继承于 java.lang.RuntimeException 。
下面我们看一道题目
要求:我们模拟注册操作,如果用户名已存在,则抛出异常并提示:亲,该用户名已经被注册。
  1. 首先定义一个注册异常类RegisterException
    public class RegisterException extends RuntimeException { 
        public RegisterException() {}
    
        public RegisterException(String message) {
             super(message);
         } 
    }
  2. 模拟登陆操作,使用数组模拟数据库中存储的数据,并提供当前注册账号是否存在方法用于判断。
    public class DemoTest { 
        public static void main(String[] args){
        // 1.定义一个字符串,表示已经注册的用户名 
        String username = "admin";    
        // 2.创建Scanner对象,获取用户输入的用户名 
        Scanner sc = new Scanner(System.in); 
        System.out.println("请输入您要注册的用户名:"); 
        String name = sc.next();
        // 3.判断 
        if (username. Equals(name)){ 
            // 产生注册异常 
            try {
                throw new RegisterException("亲,该用户名已经 被注册。"); 
            } catch (RegisterException e) {
                 System.out.println(e.getMessage()); 
            } 
            }else{
                 System.out.println("恭喜您,注册成功"); 
            }
            System.out.println("结束"); 
        } 
    }    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1939081.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python—爬虫爬取电影页面实例

下面是一个简单的爬虫实例&#xff0c;使用Python的requests库来发送HTTP请求&#xff0c;并使用lxml库来解析HTML页面内容。这个爬虫的目标是抓取一个电影网站&#xff0c;并提取每部电影的主义部分。 首先&#xff0c;确保你已经安装了requests和lxml库。如果没有安装&#x…

海思arm-hisiv400-linux-gcc 交叉编译rsyslog 记录心得

需要编译rsyslog,参考海思3536平台上rsyslog交叉编译、使用-CSDN博客和rsyslog移植&#xff08;亲测成功&#xff09;_rsyslog交叉编译-CSDN博客 首先下载了要用到的一些库的源码&#xff0c;先交叉编译这些库 原来是在centos6上交叉编译的&#xff0c;结果编译时报缺少软件要…

使用vue3模拟element-ui中el-tabs的实现

一. 最终实现 组件没有背景颜色, 为了凸显组件文字,才设置了背景颜色 二. 使用 <wq-tabs v-model"activeName" style"background:grey; padding: 20px"><wq-tab-pane label"User" name"first">User</wq-tab-pane&g…

多任务高斯过程数学原理和Pytorch实现示例

高斯过程其在回归任务中的应用我们都很熟悉了&#xff0c;但是我们一般介绍的都是针对单个任务的&#xff0c;也就是单个输出。本文我们将讨论扩展到多任务gp&#xff0c;强调它们的好处和实际实现。 本文将介绍如何通过共区域化的内在模型(ICM)和共区域化的线性模型(LMC)&…

驱动LSM6DS3TR-C实现高效运动检测与数据采集(10)----融合磁力计进行姿态解算

驱动LSM6DS3TR-C实现高效运动检测与数据采集.10--融合磁力计进行姿态解算 概述视频教学样品申请源码下载硬件准备DataLogFusion磁力计校准过程初始化磁力计MFX_Arithmetic_Init卡尔曼滤波算法演示 概述 MotionFX库包含用于校准陀螺仪、加速度计和磁力计传感器的例程。 将磁力计…

【网络】windows和linux互通收发

windows和linux互通收发 一、windows的udp客户端代码1、代码剖析2、总体代码 二、linux服务器代码三、成果展示 一、windows的udp客户端代码 1、代码剖析 首先我们需要包含头文件以及lib的一个库&#xff1a; #include <iostream> #include <WinSock2.h> #inclu…

swiftui中onChange函数的使用,监听变量的变化

在 SwiftUI 中&#xff0c;onChange 修饰符用于在指定值发生变化时执行某些操作。它允许你监听一个状态或绑定值的变化&#xff0c;并在变化发生时运行一些代码。这个功能非常适合需要对状态变化做出响应的场景。 使用示例&#xff1a; struct AppStorageTest: View {State p…

友力科技数据中心搬迁方案

将当前运行机房中的所有设备、应用系统安全搬迁至新数据中心机房&#xff0c;实现平滑切换、平稳过渡&#xff0c;最大限度地降低搬迁工作对业务的影响。 为了确保企事业单位能够顺利完成数据中心机房搬迁工作&#xff0c;我们根据实际经验提供了4个基本原则&#xff0c;希望能…

【Linux】编辑器vscode与linux的联动

1.vscode简单学习 vscode是编辑器&#xff0c;可以写各种语言的程序 下载链接&#xff1a;Download Visual Studio Code - Mac, Linux, Windows 来用一下vscode 我们保存了就能在我们的那个文件夹里面看到这个 这个就是编辑器&#xff0c;跟我们的文本文件好像差不多&#…

RPM、YUM 安装 xtrabackup 8 (mysql 热备系列一)包含rpm安装 mysql 8 配置主从

RPM安装 percona-xtrabackup-80-8.0.35-30.1.el7.x86_64.rpm 官网&#xff1a; https://www.percona.com/ 下载地址&#xff1a; https://www.percona.com/downloads wget https://downloads.percona.com/downloads/percona-distribution-mysql-ps/percona-distribution-mysq…

51单片机14(独立按键实验)

一、按键介绍 1、按键是一种电子开关&#xff0c;使用的时候&#xff0c;只要轻轻的按下我们的这个按钮&#xff0c;按钮就可以使这个开关导通。 2、当松开这个手的时候&#xff0c;我们的这个开关&#xff0c;就断开开发板上使用的这个按键&#xff0c;它的内部结构&#xff…

从千台到十万台,浪潮信息InManage V7解锁智能运维密码

随着大模型技术的深度渗透&#xff0c;金融行业正经历着前所未有的智能化变革。从“投顾助手”精准导航投资蓝海&#xff0c;到“智能客服”秒速响应客户需求&#xff0c;大模型以其对海量金融数据的深度挖掘与高效利用&#xff0c;正显著提升金融服务的智能化水准&#xff0c;…

Java:拦截器简介和应用示例(多个拦截器+校验token是否为空)

JAVA 拦截器 简介 拦截器和过滤器均可以拦截http请求&#xff0c;过滤器偏向于基础设施工作&#xff0c;拦截器偏向于业务&#xff0c;拦截器允许在执行Controller之前做验证预处理&#xff0c;在Controller执行之后对返回对象做加工处理。可以用于&#xff1a;权限检查、日志…

2014年全国大学生数学建模竞赛C题生猪养殖管理(含word论文和源代码资源)

文章目录 一、部分题目二、部分论文三、部分源代码四、完整word版论文和源代码 一、部分题目 2014高教社杯全国大学生数学建模竞赛题目 C题 生猪养殖场的经营管理 某养猪场最多能养10000头猪&#xff0c;该养猪场利用自己的种猪进行繁育。养猪的一般过程是&#xff1a;母猪配…

第3关 -- Git 基础知识

任务1: 破冰活动&#xff1a;自我介绍 任务2: 实践项目&#xff1a;构建个人项目 MeiHuaYiShu

【BUG】已解决:ModuleNotFoundError: No module named ‘_ctypes‘

已解决&#xff1a;ModuleNotFoundError: No module named ‘_ctypes‘ 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c;我是博主英杰&#xff0c;211科班出身&#xff0c;就职于医疗科技公司&#xff0c;热衷分享知识&#xff0c;武汉城…

【Langchain大语言模型开发教程】记忆

&#x1f517; LangChain for LLM Application Development - DeepLearning.AI 学习目标 1、Langchain的历史记忆 ConversationBufferMemory 2、基于窗口限制的临时记忆 ConversationBufferWindowMemory 3、基于Token数量的临时记忆 ConversationTokenBufferMemory 4、基于历史…

双笼转子感应电机建模仿真(2):任意速旋转坐标系下xy/xy数学模型及仿真模型

1.概述 2. 双笼转子三相感应电机数学模型 2.1. 定子基准下ABC/qd数学模型 2.2. 任意速旋转坐标系下xy/xy数学模型 2.3. 空间矢量数学模型 3. 双笼转子三相感应电动机仿真模型 3.1 基于任意速xy/xy坐标系数学模型(1)~(5)的仿真模型 3.2. 基于任意速xy/xy坐标系中瞬态等效电…

MATLAB图像处理分析基础(一)

一、引言 MATLAB软件得到许多数字图像处理学生、老师和科研工作者的喜爱&#xff0c;成为数字图像处理领域不可或缺的工具之一&#xff0c;其与其他软件相比有以下诸多显著优点。首先&#xff0c;MATLAB 拥有强大的内置函数库&#xff0c;涵盖了图像读取、显示、处理及分析的全…

OpenCV 遍历Mat,像素操作,使用TrackBar 调整图像的亮度和对比度 C++实现

文章目录 1.使用C遍历Mat,完成颜色反转1.1 常规遍历方式1.2 迭代器遍历方式1.3指针访问方式遍历&#xff08;最快&#xff09;1.4不同遍历方式的时间对比 2.图像像素操作&#xff0c;提高图像的亮度3.TrackBar 进度条操作3.1使用TrackBar 调整图像的亮度3.2使用TrackBar 调整图…