javase基础学习第七天

今天学习的内容很少,只有异常跟多线程,代码不多重要的是理解
时间2022/4/16

异常

概念:
程序出现了不正常的状态就是异常
分类
Throwable
Error(错误)
错误和我们程序员一般没有关系,通常是硬件问题

Exception(异常)
	编译时异常:
		除了运行时异常其他都是编译时异常
		代码上会有红色波浪线报错
	运行时异常:
		RuntimeException以及他的子类
		代码上没有提示

以前常见的异常:
编译时异常:
解析异常 ParseException
文件找不到异常 FileNotFoundException
运行时异常:
索引越界异常 ArrayIndexOutOfBoundsException
空指针异常 NullPointerException
类型转换异常 ClassCastException
并发修改异常 ConcurrentModificationException

如何解决异常:
1.运行时的异常不需要专门解决,一般是因为代码写错了,只要修改代码即可。
2.编译时的异常是程序检测可能会出问题的代码,有红色波浪线,所以我们必须要解决报错。

方式一:throws声明抛出异常
定义在方法后面,加上throws 后面跟上要抛出的异常名字,注意这里的抛出是抛给方法的调用者,谁调用这个方法就要去解决这个问题。

方式二:利用try…catch捕获异常
格式: try{
可能出现异常的代码
}catch(异常类型 异常变量名){
}catch(异常类型 异常变量名){
}
try里面没有出现异常,就不会执行catch语句
try里面如果出现了异常,就会执行对应的catch语句
当trycatch执行结束后,异常就相当于就已经解决了,程序可以继续往后执行

两种办法有什么区别:
throws声明抛出异常:没有解决异常,把问题抛给了别人。
trycatch捕获异常:解决了异常,异常就已经被解决程序能够继续正常向后执行。

异常的注意事项:
1.一个try可以写多个catch, 上面的catch捕获的异常不能是下面的父类。
2.方法重写子类的方法不能抛出比父类更多的异常。

catch里面的方法:
getMessage() : 获取异常的产生原因
toString() : 获取异常的类型和产生原因
printStackTrace() :直接打印异常的类型和产生原因还有产生位置。

finally语句块:
finally可以加在try语句的最后
finally里面的代码是一定会执行的代码(除非退出虚拟机)System.exit(0);

如何产生异常:
格式:
throw new 异常类型();

自定义异常:
自定义就是自己定义一种异常类型
比如我们年龄如果是赋值错误就要产生异常,刚才产生的是一个普通异常,这个是不合适的
我想要产生年龄越界异常,java有这个异常?当然没有
我们想要自定义一个异常类型,就先看看java中的异常是怎么定义的.我们模仿就可以了

多线程

名词解释:
进程和线程:
一个进程就是我们应用软件的一次启动
一个线程是进程中的一条执行单元
并发和并行:
并发是指一个时间段中有几个程序都处于已启动到完毕之间,但任一个时刻点上只有一个程序在运行。
并行是指多个程序是在同一时刻点上是一起执行的。
计算机的一个CPU就是通过并发的方式在运行多个线程

开启多线程的方式:
继承Thread
步骤:
1.定义类继承Thread
2.重写run()方法
3.在测试类中创建子类对象
4.调用start()方法开启线程

实现Runnable接口
1.创建子类实现Runnable接口
2.重写run()方法
3.在测试类中创建子类对象
4.创建线程Thread的对象

两种方式有什么区别:
两种方式开启线程功能上是一样的效果

区别就在于继承和实现的区别:
继承:java的类是单继承
实现:java的类是多实现

为什么要开启多线程:
多线程可以提高程序效率

线程的常用方法:
开启线程:
start() :开启一个新线程(每个线程对象只能开启一次新线程)

和线程名字相关的方法:
setName() :给线程设置名字
getName() :获取线程的名字
static currentThread() :获取当前正在执行的线程对象

线程睡觉:
static sleep(时间) :让当前线程睡觉指定时间(谁执行sleep谁就睡觉,时间单位是毫秒)

匿名内部类开启线程写法
使用匿名内部类完成继承Thread的写法:

Thread t = new  Thread(){
            @Override
            public void run() {
                for (int i = 0; i < 100; i++) {
                    System.out.println("Thread"+i);
                }
            }
        };
        t.start();

使用匿名内部类完成实现Runnable的写法:

Runnable r = new Runnable() {
            @Override
            public void run() {
                for (int i = 0; i < 100; i++) {
                    System.out.println("Runnable" + i);
                }
            }
        };
        Thread t2 = new Thread(r);
        t2.start();
  new Thread(new Runnable(){
            @Override
            public void run() {
                System.out.println("开启线程");
            }
        }).start();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

皇家小黄

创作不易!!!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值