Java零基础入门-异常、线程(完结篇)

一、本期教学目标

  • 掌握如何自定义异常。
  • 自定义异常实战练习。
  • 掌握进程/线程的概念及区别。
  • 理解并发与并行的区别。
  • 掌握如何创建线程。

二、前言

        在上一期,我们是重点学习了异常如何声明、如何捕获、finally如何使用?以及对于多个异常怎么处理,然后处理异常的注意方式等,想必对此也有了一定的了解,接下来我们要学的,就是对异常如何自定义了?这也是在日后项目实战中有一定使用的。系统自带的异常肯定是兼容所有的业务场景的,这就需要使用到自定义异常。

        说完这个,应该还剩些时间,我就要给大家科普下进程与线程吧,这也是重中之重,如果你都分不清,那肯定日后是要被同事嘲笑的。

三、自定义异常

1、概述

自定义异常?顾名思义,DIY异常嘛,我们都知道,java中不同的异常类,分别表示着某一种具体的异常情况,那么在日常业务开发中,我们总会碰到一些jdk内部没有定义的异常,比如年龄为负、考试成绩为负等,那对于这些业务场景,要进行异常处理,那我们应该怎么办?实际开发中对于这些业务想的异常,我们就得自定义它们了。

        说到为啥自定义异常,这我已经给大家解释了,那再问大家个问题,什么是自定义异常?这么问肯定大家都清楚啊,不就是在日常业务开发中,根据自己的业务情况来定异常类。比如我们一个常见的场景,用户注册异常类--若用户名已存在,则进行自定义异常类抛出。

那么接下来,我们就来讲讲该业务场景,先定义一个自定义异常。

  1. 自定义一个编译期的异常:自定义类,并继承于java.lang.Exception。
  2. 自定义一个运行期的异常:自定义类,并继承于java.lang.RuntimeException。

        接下来我就给大家具体演示一下,如何自定义异常吧。

2、实例演示

        比如对于用户注册异常类,要求:模拟登录注册,如果对于用户名重名,则抛出异常,“用户名已被使用!”。

        首先,我们先来定义一个异常类RegisterException。

public class RegisterException extends Exception {//空参构造函数public RegisterException() {}//有参构造public RegisterException(String message) {super(message);}
}

        接着我们来模拟登陆操作,使用数组模拟数据库中存储的数据,并提供当前注册账号是否存在方法用于判断。

public class Register {private static String[] names = {"a", "b", "c", "d"};public static void main(String[] args) {try {checkUserName("a");System.out.println("注册成功!");//如果没有异常就是注册成功} catch (RegisterException e) {//处理异常e.printStackTrace();}}
}

        如下是实现一个模拟登录注册判断用户名是否重复的方法。我这里就不接入实际业务从数据库查询用户信息再进行判重处理了啊。

    private static String[] names = {"a", "b", "c", "d"};  /*** 校验用户名是否重复** @param uname 用户名*/private static boolean checkUserName(String uname) throws RegisterException {for (String name : names) {if (uname.equals(name)) {throw new RegisterException("该" + name + "名字已经被注册了!");}}return true;}

         接下来我们就来执行一下该main函数。我们先调用checkUserName(),然后入参一个重复的用户名,再入参一个不重复的用户名,看看分别有啥情况出现。

         接着我们来入参不在names数组中的名字,看看是否还进行异常抛出。

        总而言之,自定义异常也是为了业务服务,一切仅仅围着业务出发。 

四、多线程

        如上是结束了异常相关的所有知识点了。接着还剩点时间,我就给大家科普一个新概念--多线程。带着大家回忆一下,学习的程序在没有的跳转语句的情况下,语句是从上依次往下执行,对吧,那现在要设计一个程序,要它边打游戏并听歌?同时进行,现实场景手机电脑都支持的操作,对吧,那么对于真正的程序实现,它是怎么样的,这你有真正去了解过么?

1、并发与并行

        提出两个概念,并发与并行。这在操作系统上,也是很好用来解释的,单核或多核

  • 并发:表示两个或多个事情在同一个时间段内发生。
  • 并行:表示指两个或多个事情在同一刻发送(同时发生)。

2、线程与进程

        何为线程?何为进程?这两概念,你们也是需要知道的。

  • 进程:表示指一个内存中运行的应用程序,每个进程都有一个独立的内存空间,一个应用程序可以同时运行多个进程;进程也是程序的一次执行过程,是系统运行程序的基本单位;系统运行一个程序即是一个进程从创建、运行到消亡的过程。
  • 线程:线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程。一个进程中是可以有多个线程的,这个应用程序也可以称之为多线程程序。

        简而言之:一个程序运行后至少有一个进程,一个进程中可以包含多个线程。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode刷题记(一):1~30题

1. 两数之和 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你可以…

vscode 重命名很慢或失败 vscode renames are slow

网上问题, 插件问题(我遇见的排除,不是)被其他程序占用问题,(我这边是这个) 解决方案: 打开【资源管理器】,使用火绒 或其他软件,查看文件夹 or 文件 被哪个…

【面试八股总结】传输控制协议TCP(二)

参考资料 :小林Coding、阿秀、代码随想录 一、TCP报文段首部 TCP 虽然是面向字节流的,但 TCP 传送的数据单元却是报文段。 一个 TCP 报文段分为首部和数据两部分,TCP 报文段首部的前 20 个字节是固定的,后面有 4n 字节是根据需要…

使用 FinalShell 进行远程连接(ssh 远程连接 Linux 服务器)

目录 前言 基本使用教程 新建远程连接 连接主机 自定义命令 路由追踪 前言 后端开发,必然需要和服务器打交道,部署应用,排查问题,查看运行日志等等。一般服务器都是集中部署在机房中,也有一些直接是云服务器&am…

LLM - 大语言模型 基于人类反馈的强化学习(RLHF)

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://blog.csdn.net/caroline_wendy/article/details/137269049 基于人类反馈的强化学习(RLHF,Reinforcement Learning from Human Feedback),结合 强化学习(RL) 和 人类反馈 来优化模型的性能。这种方法主要包…

抖音视频关键词批量下载工具|视频爬虫采集软件

抖音视频批量提取工具,搜索即下载,轻松获取所需视频! 正文: 想要轻松获取抖音上的精彩视频吗?现在,有了我们的抖音视频批量提取工具,一切变得简单易行!Q:290615413无论是针对特定关…

【opencv】教程代码 —videoio(2)将两个视频的每一帧逐一读取并计算其PSNR 和MSSIM...

本教程开始介绍的源代码将对每一帧执行PSNR测量,并且只对PSNR低于输入值的帧进行SSIM测量。为了可视化的目的,我们在OpenCV窗口中展示两幅图像,并将PSNR和MSSIM值打印到控制台。期望看到如下内容: video-input-psnr-ssim.cpp 将两…

Matlab|基于关键场景辨别算法的两阶段鲁棒微网优化调度

目录 主要内容 部分代码 结果一览 下载链接 主要内容 该模型主要求解的是微网两阶段鲁棒优化调度问题,与目前大部分用CCG算法不同,模型创新性的采用关键场景辨别法,通过少量的迭代辨别出最恶劣的场景,针对光伏出力的…

Flutter 开发学习笔记(3):第三方UI库的引入

文章目录 前言初始化程序Icon导入如何导入 Toast消息提示框引入简单封装简单使用 Charts图表导入新建pages文件夹存放page简单代码实现效果 总结 前言 Flutter已经发布了有10年了,生态也算比较完善了。用于安卓程序开发应该是非常的方便。我们这里就接入一些简单的…

3D怎么看模型内部结构---模大狮模型网

在3D建模和设计过程中,了解模型的内部结构是十分重要的。这不仅有助于审美和设计,还能够帮助我们更好地理解模型的构造和特性。模大狮将介绍一些方法和技巧,帮助您探索3D模型的内部结构。 一、使用切片工具 切片模型:通过切片工具…

Polardb MySQL 产品架构及特性

一、产品概述; 1、产品族 参考:https://edu.aliyun.com/course/3121700/lesson/341900000?spma2cwt.28120015.3121700.6.166d71c1wwp2px 2、polardb mysql架构优势 1)大容量高弹性:最大支持存储100T,最高超1000核CPU&#xff0…

ensp华为AC+AP上线配置

AR1配置&#xff1a; <Huawei>system-view # 进入系统视图<Huawei>sysname R1 # 设备重命名[R1]dhcp enable # 开启DHCP功能[R1]interface GigabitEthernet0/0/0 # 进入接口 [R1-GigabitEthernet0/0/0]ip address 192.168.0.1 23 # 配置接口地址 [R1-GigabitE…