异常 线程

异常

异常_概念及作用:
异常;就是程序在运行的时候.出现了非正常情况,jvm遇到无法处理的情况.导致不能允许下去,这种情况叫做异常.
通常jvm遇到这种情况;会打印出一段信息,是什么原因导致的,然后结束程序.
异常处理的作用;就是我们的代码遇到这种问题之后,跳出这段代码,进行下面的程序,
这就需要我们程序员知道是什么因素导致的,从而进行处理,
异常_异常产生的过程解析
1.Jvm 执行时遇到这种代码,
2.Jvm要进行识别出来.
3.Jvm在throwable中找到这种代码,并且创建其对象 ,
4.判断我们的代码是否可以进行捕捉这种异常
是, 我们进行处理,可以进行以下程序.
否,进行进行打印并且结束这个程序(这个是我们不希望出现的).
异常_Java异常体系结构及分类
Thorwahle,是顶层的异常父类,继承它的有error,和exception
*Error(错误);*是指运行出现的错误,不可进行改变的,我们只能进行避免.好比绝症 不希望程序捕获,因为程序无法进行处理
Exception(异常);程序在出现错误时,程序员可进行捕获,并且,可以进行处理,并且不影响程序的继续运行,是必须进行处理的,,希望可以进行处理,
Runtimeexception(运行时期的异常);java中没有必要对这种异常进行处理,我们可用一些判断进行避免这个问题的出现
除runtimeexception以为的其他异常(编译时异常);java中必须此异常进行处理,这种异常不能通过判断进行处理,我们只能进行处理,要不程序 无法进行下去,
Arraytool 是对其最大值
异常的处理_基本方式try…catch语句及执行流程:
基本语法;
Try {
可能出现的异常,
}catch (异常类 异常名){
如果try出现了异常,这里将进行捕获,并且进行处理.
}
这里写图片描述
这里写图片描述
异常的处理_常见的几种异常:
1.空指针异常 nullpointerException (运行时异常)
String s = null
System.out.printlin(s);

这里写图片描述
2**.数组下角标越界异常;**ArrayIndexOutofBoundsException(运行时异常)
int [] arr = {1,2,3};
System.out.println(arr[3]); // 会发生数组下角标越界异常,
//最好先进行判断,是否有效 .
int [] arr = {1,2,3};
if (3 < arr.length){
Ststem.out.println(arr[3]);
}
3 数组转化异常; numberformateception(运行时异常)
String s = “123a”;
System.out.println(s);会出现 数组转换异常 ;
4. 算数运算异常; ArithmeticException(运行时异常)
int a = 10; int b = 0 ;
System.out.println(a/b); //编译可以通过但是 运行时 会出现错误;A ritheticException
5转换异常; parseException (编译异常) 必须要进行捕获, 否则编译会出现错误;
String s = “1998-08-08”;
SlimpleDateFormat sdf = new SlimpleDateFormat (“yyyy-MM-dd”);
try {
Date da = sdf . parse(s);
}catch(ParseException s )(
System.out.println( “嘿 ,小伙子 ,你转化错误了.”);
)
异常的处理_try…catch…catch…语句及执行流程
无异常的处理流程;
这里写图片描述
有异常的处理流程;
这里写图片描述
异常的处理_声明抛出异常throws:

这里写图片描述

注意:如果throws后面的是“编译期异常”,调用的代码必须要使用try…catch…或者继续抛出,否则编译错误。如果throws后面的是“运行时异常”,调用处可以不处理,编译可以通过,但不建议

异常的处理_抛出异常throw
这里写图片描述
注意:如果throw抛出的是一个“运行时异常”,调用处可以不处理;
如果throw抛出了一个“编译期异常”,方法声明处必须显示的使用throws声明此异常,调用处
也必须处理,否则编译错误;

异常的处理_Objects类的非空判断:

class Student{
        private String name;//要求姓名不能为:null
        ....
        public Student(String name){
            /*
            if(name == null){
                throw new NullPointerException("...");
            }
            if(...){
            }*/

            this.name = Objects.requireNonNull(name);//省去一个一个的非空判断
    }
}
main(){
    Student stu = new Student("张三");
    Student stu2 = new Student(null);
}
throws:表示“声明”此方法可能会产生某种异常,如果产生,请JVM将此异常对象抛给调用者。如果没有产生异常,则正常执行完毕。
        public static void sum() throws NullPointerException{
            ...
        }
throw:表示立即“抛出一个异常对象”
        public static void sum(){
           if(...){
            throw new NullPointerException("...");
           }
        }

异常的处理_try…catch…finally语句:

这里写图片描述
Disconnected from the target VM, address: ‘127.0.0.1:55325’, transport: ‘socket’ 表示 目标与虚拟机断开连接.
自定义异常_概述:
自定义异常; 在java异常库里面不能够提供异常类,只能我们自己去定义,来提供我们自己的需求.
自定义的类需要继承 父类 Throwable. (RuntimeException/非RuntimeException(建议));
添加一个String参数的构造方法,用于设置“异常信息”
这里写图片描述
这里写图片描述
这里写图片描述

线程

多线程_进程与线程
进程; 进程是操作系统的概念,一个独立的运行的程序,就是一个程序
线程; 线程是由进程创建的,一个进程可以创建任意多的线程,每个线程都包含一些代码,线程中的代码会同主进程或者其他线程同时进行,
多进程;在某个时间段内,同时运行多个程序;
多线程;一个程序可以启动多个线程, 也就是说, 多个代码可以同时进行,可以提高程序的运行效率.
也就是 点线面的关系., 面试有无数条线组成的, 而线是由无数个点组合而成. 这只是宏观的
在微观上面.还是有差距的 ,具体之后再说.

多线程_并发与并行:
并行;线程同时开始运行
并发;多个线程同时访问一个资源;
制作多线程
1).制作多线程程序,必须在设计阶段就要确定下来:哪些代码需要以独立的线程运行,从而来
制作线程类。
2).步骤:
1).定义线程类,继承自Thread
2).重写run()方法;
3).启动线程:
1).创建一个线程对象;
2).调用对象的start()方法启动线程;
这里写图片描述
这里写图片描述

多线程_创建线程类_关于线程的几个说明:
1).匿名内部类的方式实现线程:
new Thread(){
public void run(){
for (int i = 0; i < 1000; i++) {
System.out.println(“从控制台接收数据…..”);

}
}
}.start();
2).重写的是run().但启动线程调用的是:start()
3).对于一个“线程对象”,只能调用一次start(),不能多次调用start();
MyThrad t = new MyThread();
t.start();

t.start();//编译通过,运行时异常

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值