美文网首页
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