异常,线程

第一章:异常:
什么是异常?
异常就是我们生活中不正常的意思,在程序执行中,出现的非正常情况,最终会导致JVM的非正常停止,这就是程序的异常.
在JAVA等面向对象的编程语言当中,异常本身是一个类,产生异常就是创建异常对象,并抛出了一个异常对象,JAVA的处理方式是中断处理,
判断我们的代码中是否希望“捕获这种异常”;
是的话:就去执行,捕获异常的代码;
否的话:就在控制台打印异常信息,并结束程序:
JAVA异常体系结构及分类:
Throwable(顶层的异常父类) 祖师爷级别的选手:
Error(错误):不希望程序捕获并处理,因为无法处理.
Exception(异常):希望程序捕获并处理的异常情况;
RuntimeException(运行时异常):java不要求强制捕获这种异常,这种异常是通过一些判断可以避免的异常
第二章:异常的处理 基本方式try…catch语句及执行流程
基本语法:
Try{
//………………
}catch(异常类名 变量名){
//如果try中出现了异常类名的异常.这里会被捕获;
他的几种出现方式:
1.try…..catch
2.try……catch……catch……catch…
3.try…catch…..finally….
4.try…catch…catch….catch….finally…
5.try….finally
执行流程:
异常的处理,常见的几种异常:
1).空指针异常:NullPointerException(运行时异常)
String s = null;
System.out.println(s.length());//编译通过,运行时抛出:NullPointerException
//最好要先做非空判断,然后再做其它处理
String s = null;
if(s != null){
System.out.println(s.length());
}
2).数组下标越界异常:ArrayIndexOutOfBoundsException(运行时异常)
int[] arr = {1,2,3};
System.out.println(arr[3]);//编译通过,运行时抛出:ArrayIndexOutOfBoundsException
//最好先判断索引是否有效
int[] arr = {1,2,3};
if(3 < arr.length){
System.out.println(arr[3]);
}
3).数字转换异常:NumberFormatException(运行时异常)
String str = “24a”;
int age = Integer.parseInt(str);

4).算术运算异常:ArithmeticException(运行时异常)
    int a = 10;
    int b = 0;
    System.out.println(a / b);//编译通过,运行时抛出:ArithmeticException

5).转换异常:ParseException(编译期异常)--必须要捕获,否则编译错误
    String str = "2018-08-08";
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    try{
        Date date = sdf.parse(str);
    }catch(ParseException e){
        .....
    }

异常的处理:声明抛出异常throws:
public static int sum(int[] arr) throws
这个throws只能在方法外,
如果throws后面的是“编译期异常”,调用的代码必须要使用try…catch…或者继续抛出,否则编译错误。如果throws后面的是“运行时异常”,调用处可以不处理,编译可以通过,但不建议。
异常的处理:抛出异常throw:
格式:
throw new NullPointerException(“哥们,你给我传了一个空指针,你太坏了….”);
throw:用在方法里,throws在方法外,二者之间的区别:
如果throw抛出的是一个“运行时异常”,调用处可以不处理;
如果throw抛出了一个“编译期异常”,方法声明处必须显示的使用throws声明此异常,调用处
也必须处理,否则编译错误;
第三章:自定义异常
1).自定义异常的步骤:
A).自定义异常类–继承自Exception或者它的某个子类
(RuntimeException/非RuntimeException(建议));
B).建议:添加一个String参数的构造方法,用于设置“异常信息”
2).示例代码:
1).定义异常类:
public class AgeException extends Exception{
public AgeException(String msg) {
super(msg);
}
}
2).使用异常类:
public class Student {
private int age;

public void setAge(int age) throws AgeException {
    if (age < 15 || age > 50) {
        throw new AgeException("年龄错误,必须在15到50岁之间!");
    }
    this.age = age;
}

}
3).测试代码:
public class Demo {
public static void main(String[] args) {
Student stu = new Student();

    try {
        stu.setAge(100);
    } catch (AgeException e) {
        System.out.println("异常信息:" + e.getMessage());
    }

}

}

第四章:多线程_进程与线程:
1).什么是“进程”:“进程”是操作系统的概念,一个独立运行的程序,就是一个“进程”。
2).什么是“线程”:“线程”是由“进程创建”的,一个进程可以创建任意多的线程,每个线程都包含
一些代码。线程中的代码会同主进程或者其他线程“同时运行”。
3).什么是“多进程”:在某个时间段内,同时运行多个程序;
4).什么是“多线程”:一个程序可以同时启动多个线程,也就意味着可以使多段代码“同时运行”,可
以提高程序的运行效率。
我们之前写的程序都是:单线程程序–后面的代码总是等前面的代码执行完毕才能执行。
要使我们的程序可以“同时做多件事”,就需要制作多线程程序。
14.第四章:多线程_并发与并行:
1).什么是并行:多个线程同时开始运行;
2).什么是并发:多个线程同时访问同一资源(CPU)。
15.第四章:多线程创建线程类继承Thread及匿名对象的方式:
1).制作多线程程序,必须在设计阶段就要确定下来:哪些代码需要以独立的线程运行,从而来
制作线程类。
2).步骤:
1).定义线程类,继承自Thread
2).重写run()方法;
3).启动线程:
1).创建一个线程对象;
2).调用对象的start()方法启动线程;
3).示例代码:
1).定义线程:
public class MyThread extends Thread {
@Override
public void run() {
for (int i = 0; i < 1000; i++) {
System.out.println(“从网络接收外部数据….”);

    }
}

}
2).启动线程:
public static void main(String[] args) {
//先启动线程
MyThread t = new MyThread();
t.start();//启动线程,后,主方法继续向下运行

for (int i = 0; i < 1000; i++) {
    System.out.println("从控制台接收数据.....");

}

}

多线程_创建线程类_关于线程的几个说明:
1).匿名内部类的方式实现线程:
    new Thread(){
        public void run(){

for (int i = 0; i < 1000; i++) {
System.out.println(“从控制台接收数据…..”);

}
}
}.start();

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

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

总结 (峰哥)

总结:
01.能够辨别程序中异常和错误的区别
1).错误:Error : 异常中不建议捕获的重大错误;内存溢出;
2).异常:Exception:希望我们程序捕获并处理的异常情况,处理后程序可以继续运行下去。
02.说出异常的分类
Exception:
|–RuntimeException(运行时异常):程序可以不处理。
|–除RuntimeException外其它的异常(编译期异常):程序必须处理,否则编译错误。
03.说出虚拟机处理异常的方式
1).执行有异常的代码;
2).JVM要识别出异常;
3).JVM到类库中找到对应的异常类,并创建对象;
4).判断代码中是否捕获(catch)这种异常:
是:执行catch
否:在控制台打印异常信息,结束程序;
04.列举出常见的三个运行期异常
1).NullPointerException
2).ArrayIndexOutOfBoundsException
3).ArithmeticException
05.能够使用try…catch关键字处理异常
try{
//可能出现异常的代码
}catch(异常类名 变量名){
//如果try中出现”异常类名”的异常时,执行这里
}
06.能够使用throws关键字处理异常
public static void show() throws NullPointerException{

}

07.能够自定义异常类
public class AgeException extends RuntimeException{
public AgeException(String msg){
super(msg);
}
}

08.能够处理自定义异常类
//1.使用自定义异常:
class Student{
private int age;
public void setAge(int age){
if(age < 15 || age > 50){
throw new AgeException(“年龄不符合!”);
}
this.age = age;
}
}
//2.测试:
main(){
Student stu = new Student();
try{
stu.setAge(100){
}catch(AgeException e){
System.out.println(e.getMessage());
}
}
09.说出进程的概念
1).什么是“进程”:“进程”是操作系统的概念,一个独立运行的程序,就是一个“进程”。
10.说出线程的概念
2).什么是“线程”:“线程”是由“进程创建”的,一个进程可以创建任意多的线程,每个线程都包含
一些代码。线程中的代码会同主进程或者其他线程“同时运行”。

11.能够理解并发与并行的区别
1).什么是并行:多个线程同时开始运行;
2).什么是并发:多个线程同时访问同一资源(CPU)。

12.能够开启新线程
1).制作线程:
class MyThread extends Thread{
public void run(){
//线程中做的事情写在这里
}
}
2).启动线程:
main(){
MyThread t = new MyThread();
t.start();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值