java进阶
程序员文章站
2022-05-03 23:37:51
自定义异常类java提供的异常类,不够我们使用,需要自己定义一些异常类格式: public class XXXException extends Exception / RuntimeException{ 添加一个空参数的构造方法 添加一个带异常信息的构造方法 }注意: 1. 自定义异常类一般都是以Exception结尾,说明该类是一个异常类 2. 自定义异常类,必须得继承Exception或者RuntimeException...
自定义异常类
java提供的异常类,不够我们使用,需要自己定义一些异常类
格式:
public class XXXException extends Exception / RuntimeException{
添加一个空参数的构造方法
添加一个带异常信息的构造方法
}
注意:
1. 自定义异常类一般都是以Exception结尾,说明该类是一个异常类
2. 自定义异常类,必须得继承Exception或者RuntimeException
继承Exception:那么自定义得异常类就是一个编译期异常,如果方法内部抛出了编译期异常,就必须处理这个异常,要么throws,要么try...catch
继承RuntimeException:那么自定义得异常类就是一个运行期异常,无需处理,交给虚拟机处理(中断处理)
public class RegisterException extends Exception /*RuntimeException*/ {
public RegisterException(){
super();
}
// 查看源码发现,所有得异常类都会有一个带异常信息的构造方法,方法内部会调用父类带异常信息得构造方法,让父类来处理这个异常信息
public RegisterException(String message) {
super(message);
}
}
自定义异常类练习
要求:我们模拟注册操作,如果用户名已存在,则抛出异常并提示:亲,该用户名已经被注册。
- 分析
1. 使用数组保存已经注册过得用户名(数据库)
2. 使用Scanner获取用户输入的注册用户名(前端,页面)
3. 定义一个方法,对用户输入的注册用户名进行判断
遍历存储已经注册过的用户名的数组,获取每一个用户名
使用获取到的用户名和用户输入的用户名比较
true:
用户名已经存在,抛出RegisterException异常,告知用户"亲,该用户名已经被注册";
false:
继续遍历比较
如果循环结束了,还没有找到重复的用户名,提示用户"恭喜您,注册成功!";
- main方法
static String[] usernames = {"张三","李四","王五"};
public static void main(String[] args) /*throws RegisterException*/ {
Scanner sc = new Scanner(System.in);
System.out.println("请输入您要注册的用户名");
String username = sc.next();
checkUsername(username);
}
1. 自定义异常类继承Exception:
public static void checkUsername(String username) /*throws RegisterException*/ {
for (String name : usernames) {
if (name.equals(username)){
try {
throw new RegisterException("亲,该用户名已经被注册");
} catch (RegisterException e) {
e.printStackTrace();
return; // 结束方法
}
}
}
System.out.println("恭喜您,注册成功!");
}
2. 自定义异常类继承RuntimeException:
public static void checkUsername(String username) {
for (String name : usernames) {
if (name.equals(username)){
throw new RegisterException("亲,该用户名已经被注册"); // 抛出运行期异常,无需处理,交给JVM处理,中断处理
}
}
System.out.println("恭喜您,注册成功!");
}
并发与并行
- 并发:指两个或多个事件在同一个时间段内发生。 交替执行 类似一个人吃两个馒头
- 并行:指两个或多个事件在同一时刻发生(同时发生)。 同时执行 类似两个人吃两个馒头
进程与线程
硬盘:永久存储ROM
内存:所有的应用程序都需要进入到内存中执行 临时内存RAM
点击应用程序执行,进入到内存中,占用一些内存执行,进入到内存的程序叫【进程】。
任务管理器 --> 结束进程 那么就把进程从内存中清除了
cpu:*处理器 对数据进行计算,指挥电脑中软件和硬件干活
cpu的分类:
AMD
Inter Inter Core(核心) i7 8866 4核心8线程
8线程:同时执行8个任务
腾讯电脑管家:点击运行,会进入到内存中,就是一个【进程】
病毒查杀 清理垃圾 电脑加速
由代码编写 由代码编写 由代码编写
【线程】 【线程】 【线程】
cpu cpu cpu
点击功能(病毒查杀,垃圾清理,电脑加速)执行,就会开启一条应用程序到cpu的执行路径,
cpu就可以通过这个路径执行功能,这个路径有一个名字,叫【线程】
【线程属于进程,是进程中的一个执行单元,负责程序的执行】
- 多线程
单核心单线程cpu:
cpu在多个线程之间做高速的切换,轮流执行多个线程,效率低,切换速度(1/n毫秒)
4核心8线程:
有8个线程,可以同时执行8个线程,8个线程在多个任务之间做高速的切换,速度是单线程cpu的8倍(每个任务执行到的机率都被提高了8倍)
多线程好处:
1. 效率高
2. 多个线程之间互不影响
线程调度
- 分时调度:所有线程轮流使用CPU的使用权,平均分配每个线程占用CPU的时间
- 抢占式调度:优先让优先级高的线程使用CPU,如果线程的优先级相同,那么会随机选择一个(线程随机性)。
Java使用的是抢占式调度。
本文地址:https://blog.csdn.net/weixin_42411963/article/details/109562241
上一篇: JAVA集合——HashMap的简述
推荐阅读
-
java方法类实例用法总结
-
详解Java高级特性之反射
-
java连接mysql和sqlserver2008代码_MySQL
-
Java笔试题:给定一个ReadOnlyClass的对象roc,能否把这个对象的age值改成30?
-
Java面向对象(三):Java权限修饰符—static关键字
-
深入理解Java虚拟机--Java类加载机制
-
Java基础教程(3)--回顾HelloWorld
-
Java图形用户界面设计(Swing)的介绍
-
java基础之编译器注解
-
Linux部署Java-Web,mvn package出现COMPILATION ERROR :Failed to execute goal org.apache.maven.plugins:mave