欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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