美文网首页
Java学习Day12

Java学习Day12

作者: JayMeWangGL | 来源:发表于2019-09-26 12:22 被阅读0次

今日学习内容总结

  • 异常
  • Thread多线程

异常

  • 指的是程序在执行过程中,出现的非正常情况,最终会导致JVM的非正常停止

throw关键字:

  • 可以使用throw关键字在指定的方法中抛出指定的异常
  • 使用格式:throw new xxxException(“异常产生的原因”)
  • 注意:
       1、throw关键字必须写在方法的内部
       2、throw关键字后边new的对象必须是Exception或者Exception的子对象
       3、throw关键字抛出指定的异常对象,我们就必须处理这个异常对象
  • 格式:
throw new NullPointerException("要访问的arr数组不存在");

throw new ArrayIndexOutOfBoundsException("该索引在数组中不存在,已超出范围");
public static void main(String[] args) {
        int[] arr =null;
        method(arr,0);
        int[] a ={1,2,3,4,5};
        method(a,6);
    }
    public static void method(int[] arr,int index){

        if (arr==null){
            throw new NullPointerException("数组为空");
        }
        if(index>arr.length){
            throw new ArrayIndexOutOfBoundsException("索引越界");
        }
    }

throws声明异常

  • 在方法声明时使用
  • 使用格式:修饰符 返回值类型 方法名(参数) throws 异常类名1,异常类名2…{ }

try...catch捕获异常

try{
     编写可能会出现异常的代码
}catch(异常类型  e){
     处理异常的代码
     //记录日志/打印异常信息/继续抛出异常
}
  • 注意:
       1、try中可能会抛出多个异常对象,那么就可以使用多个catch来处理
       2、如果try中产生了异常,那么就会执行catch的异常处理逻辑
        try {
            System.out.println(arr[0]);
        }
        catch (Exception e){
            System.out.println("数组中无数据");
        }

Throwable类

Throwable类中定义了一些查看方法:

  • public String getMessage():获取异常的描述信息,原因(提示给用户的时候,就提示错误原因。
  • public String toString():获取异常的类型和异常描述信息(不用)。
  • public void printStackTrace():打印异常的跟踪栈信息并输出到控制台。

finally

finally的语法:

  • try...catch....finally:自身需要处理异常,最终还得关闭资源。

注意:

  • finally不能单独使用,必须和try一起使用
  • finally一般用于资源释放
  • 如果finally中有return语句,则永远返回finally中的数据

自定义异常类

格式:

  public class XXXException extends Exception | RuntimeExcept{
        添加一个空参数构造方法
        添加一个包含错误信息的构造方法
    }

示例:

public class RegisterException extends Exception{
    public RegisterException() {
    }

    public RegisterException(String message) {
        super(message);
    }
}
public class RegisterMain {
    static String[] user = {"张三","赵四"};
    public static void main(String[] args) throws RegisterException {
        String name = new Scanner(System.in).next();
        for (String n : user) {
            if(n.equals(name)){
                throw new RegisterException("已存在");
            }
        }
        System.out.println("注册成功!");
    }
}

多线程

并发与并行

  • 并发:指两个或多个事件在同一时间段内发生
  • 并行:指两个或多个事件在同一时刻发生(同时发生)

线程与进程

  • 进程:指一个内存中正在运行的应用程序
  • 线程:线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程。一个进程中是可以有多个线程的,这个应用程序也可以称之为多线程程序。

线程调度

  • 分时调度

    所有线程轮流使用 CPU 的使用权,平均分配每个线程占用 CPU 的时间。

  • 抢占式调度

    优先让优先级高的线程使用 CPU,如果线程的优先级相同,那么会随机选择一个(线程随机性),Java使用的为抢占式调度。

创建多线程

第一种方式:

  • 1、创建一个Thread类的子类
    2、在Thread的子类中重写Thread类中的run方法,设置线程任务
    3、创建Thread类的子类对象
    4、调用Thread类中的方法start方法,开启新的线程,执行run方法
    public class myThread extends Thread{
      @Override
      public void run() {
          for (int i = 0; i < 20; i++) {
              System.out.println("run:"+i);
          }
      }
    

}

~~~java
public class MyThreadDemo {
    public static void main(String[] args) {
        myThread myThread = new myThread();
        myThread.start();

        for (int i = 0; i <20 ; i++) {
            System.out.println("main:"+i);
        }
    }
}

相关文章

网友评论

      本文标题:Java学习Day12

      本文链接:https://www.haomeiwen.com/subject/rduructx.html