JavaSE-17 【异常】

news2024/11/23 12:41:45

第一章 什么是异常

1.1 异常的概念

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

在Java中,异常本身就是一个类,产生异常就是创建一个异常对象并且抛出一个异常对象的过程

Java处理异常的方式是中断处理。

1.2 异常的体系

异常机制其实是帮助我们找到程序中的问题。

异常的根类是:java.lang.Throwable,其有两个子类,分别是

  • java.lang.error 错误
  • java.lang.exception 异常,平常所说的异常就是exception

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iVIynVCQ-1692322783784)(photo/JavaSE15_异常.assest/1671609959164.png)]

Throwable体系:

  • Error:错误,不需要处理
  • Exception: 需要进行处理的异常

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WKh4quRO-1692322783785)(photo/JavaSE15_异常.assest/src=http___img-blog.csdnimg.cn_20200116212251105.png&refer=http___img-blog.csdnimg.png)]

  • 异常处理的方式:
    • throws 抛出异常
    • try…catch 捕获异常

1.3 异常的分类

  • Exception分为两大类:
    • 运行时异常 [即程序运行时,发生的异常]。
    • 编译时异常 [即编程时编译器检查出的异常,Checked异常]。

所有的RuntimeException类及其子类的实例被称为Runtime异常;

不是RuntimeException类及其子类的异常实例则被称为Checked异常。

  • 案例
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Demo01_exception {
    /*
        Exception: 异常
            分为运行时异常和非运行时异常
            RuntimeException:运行期异常---编译期不检查,运行时出现问题,需要我们回来修改代码
            非RuntimeException:非运行期异常---编译器必须处理,否则程序编译不通过,无法运行
        Error:错误,不需要处理
     */
    //异常/错误案例
    public static void main(String[] args) throws ParseException {
        show1();//抛出异常
        show2();//捕获异常
        show3();//程序错误
    }

    private static void show3() throws ParseException {
        //异常1:编译其异常---抛出异常
        //格式化日期
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        //把字符串格式的日期转换成Date格式的日期
        Date date = format.parse("2022-12-12");
        System.out.println(date);
    }

    private static void show2() {
        //异常2:运行期异常---捕获异常
        int[] arr1 = {1, 2, 3};
        try {
            //可能会出现异常的代码
            System.out.println(arr1[3]);
        } catch (Exception e) {
            //异常的处理逻辑
            System.out.println(e);
        }
    }

    private static void show1() {
        //错误:内存溢出,出现错误:java.lang.OutOfMemoryError
        int[] arr2 = new int[1000 * 100000000];
        System.out.println(arr2);
    }
}
  • 抛出异常

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KlFU0OM7-1692322783786)(photo/JavaSE15_异常.assest/1671611994631.png)]

  • 捕获异常

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Pn6pd3Kg-1692322783786)(photo/JavaSE15_异常.assest/1671612037542.png)]

  • 程序错误

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XXCExR23-1692322783787)(photo/JavaSE15_异常.assest/1671612089225.png)]

1.4 异常产生的过程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OONhe1Nj-1692322783787)(photo/JavaSE15_异常.assest/1671613769234.png)]

​	[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-K4JVIkhY-1692322783788)(photo/JavaSE15_异常.assest/1671613848554.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HU7CqxHm-1692322783788)(photo/JavaSE15_异常.assest/1671617455382.png)]

第二章 异常的处理

Java异常的处理包含五个关键字:try、catch、finally、throw、throws

2.1 抛出异常throw

throw关键字:

  • 作用:使用throw关键字在指定的方法中抛出指定的异常
  • 语法:throw new XXXException(“异常产生的原因”)

注意事项:

  • throw关键字必须写在方法的内部、
  • throw关键字后面new的对象必须是Exception或者是其子类对象
  • throw关键字抛出指定的异常对象,我们必须处理
    • throw关键字后面new的是RuntimeException或者RuntimeException对象的子类,可以不做处理,交予JVM处理,打印异常,中断程序
    • throw关键字后面new的是编译检查异常,那必须处理这个异常,方式:throws或者try…catch

案例:

public class Demo03_Throw {
    /*
        throw关键字的使用
        案例:获取指定数组下标处的元素
            1、定义方法
            2、参数:int[] arr, int index
            3、对传递给方法的参数进行校验合法性
            4、如果参数不合法,使用抛出异常的方式,告知调用者,参数传递错误
     */
    public static void main(String[] args) {
        //1、创建数组
        int[] arr1 = null;
        int[] arr2 = {1, 2, 3};
        //2、赋值调用方法
        //参数(arr1,1)
        int element1 = getELement(arr1, 1);
        System.out.println(element1);
        //参数(arr2,2)
        int element2 = getELement(arr2, 2);
        System.out.println(element2);
    }

    //定义获取数组元素的方法
    private static int getELement(int[] arr, int index) {
        //1、判断传递的参数arr是否为null
        if (arr == null) {
            //空指针异常属于运行期异常,交给JVM处理,我们不需要处理
            throw new NullPointerException("传递的数组的值是空");
        }
        //2、判断index是否在数组的范围内
        if (index < 0 || index > arr.length - 1) {
            //抛出数组下标越界异常
            throw new IndexOutOfBoundsException("传递的下标越界");
        }
        int ele = arr[index];
        //方法的返回值
        return ele;
    }
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-saxEbIzW-1692322783789)(photo/JavaSE15_异常.assest/1671615904882.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PBo9n6A5-1692322783789)(photo/JavaSE15_异常.assest/1671615863237.png)]

2.2 声明异常throws

throws关键字:

  • 作用:运用于方法声明之上,用于表示当前方法不处理异常,而是提醒该方法的调用者来处理异常
  • 语法格式:修饰符 返回值类型 方法名(参数类型 参数名) throws 异常类型{ … }
  • 注意:如果方法中throw抛出了编译时异常,而没有捕获处理,那么就必须通过throws声明,交给调用者处理

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sgk7QG6r-1692322783790)(photo/JavaSE15_异常.assest/1671617419606.png)]

案例:

import java.io.FileNotFoundException;
import java.io.IOException;

public class Demo04_Throws {
    /*
        throws关键字
            概念:异常处理的第一种方式:交给别人处理
            作用:可以使用throws关键字处理异常对象,会把异常对象声明抛出给方法的调用者处理,
                 自己不处理,别人处理,最终交给JVM处理---中断程序
            格式:在方法声明时使用
            注意事项:
                1、必须写在方法声明处
                2、throws关键字后面的异常必须是 Exception 或者是Exception的子类
                3、方法内部如果抛出多个异常对象,那么throws后边必须声明多个异常
                4、方发声明处可以使用Exception一个类,代替多个其子类异常
                5、throws抛出异常的两种处理方式
                    a、抛出的异常交给方法调用者处理,最终交给JVM处理
                    b、try...catch处理异常
     */
    //声明异常类型存在子父类关系,直接写父类即可
    //public static void main(String[] args) throws FileNotFoundException, IOException {
    //readFile("d:\\1.txt");
    //}
    public static void main(String[] args) throws IOException {
        readFile("d:\\1.txt");
    }

    /*
        定义方法:对传递的文件路径进行合法性判断
                如果路径不是d:\\1.txt,那么就抛出文件找不到异常,抛给方法的调用者
     */
    public static void readFile(String fileName) throws FileNotFoundException, IOException {
        //判断传入的文件名称是否是以.txt结尾的
        if (!fileName.endsWith(".txt")) {
            //抛出IO异常,编译检查型异常,需要throws抛出给方法的调用者或者try...catch捕获处理
            throw new IOException("文件后缀名错误");
        }
        //判断传入文件名称是否一致
        if (!fileName.equals("d:\\1.txt")) {
            //此异常是编译检查异常,需要处理异常,可以使用throws或者try...catch
            throw new FileNotFoundException("文件找不到");
        }
        //文件名称一致,上传成功
        System.out.println("路径正常,读取文件成功");
    }
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TSgKvp9o-1692322783791)(photo/JavaSE15_异常.assest/1671618523643.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uJcdWnvM-1692322783791)(photo/JavaSE15_异常.assest/1671618556011.png)]

2.3 捕获异常try…catch

如果异常出现,会立即终止程序,所以需要我们处理异常,

  • 1、该方法不处理,而是声明抛出,由该方法的调用者来处理 ( throws )

  • 2、在方法中使用try-catch的语句来处理异常

try-catch的方式就是用于捕获异常

  • 作用:在Java中针对性的对某些语句进行捕获,可以对出现的异常进行指定方式的处理

  • 语法:

  • try {
        编写可能出现异常的代码;
    }catch(Exception e){
        处理异常的代码;
        打印异常、继续抛出异常;
    }
    

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E0mvotIi-1692322783791)(photo/JavaSE15_异常.assest/1671626746308.png)]

案例:

import java.io.IOException;

public class Demo05_TryCatch {
    /*
        try-catch:异常处理的第二种方式:捕获异常自行处理
        作用:捕获产生的异常并处理
        语法:
            try{
                可能出现异常的代码;
            }catch(Exception e){
                异常处理的逻辑代码;
                记录日志,打印异常,继续抛出异常;
            }
        注意事项:
            1、try中可能抛出多个异常对象,那么可以使用多个catch捕获处理异常
            2、执行顺序:
                如果try产生异常,try---catch---继续执行catch之后的代码
                如果try没有差生异常,就不会执行catch中的代码,继续执行catch之后的代码
     */
    public static void main(String[] args) {
        //调用方法,并捕获处理异常
        try {
            //产生异常的代码
            readFule("d:\\1.tx");
        }catch (IOException e){
            //异常的处理逻辑
            System.out.println("文件名称后缀不匹配!!!");
        }
        System.out.println("后续执行的代码");
    }

    /*
        需求:
        1、定义读取文件的方法
        2、判断传递的文件名称后缀是否以.txt结尾
        3、不匹配抛出异常给方法的调用者,告知文件后缀名称不匹配
     */
    //定义方法
    public static void readFule(String fileName) throws IOException {
        if (!fileName.endsWith(".txt")){
            throw new IOException("出现异常,后缀不匹配!!!");
        }
        System.out.println("文件名匹配成功!!!");
    }
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AN53RtwM-1692322783791)(photo/JavaSE15_异常.assest/1671626757449.png)]

  • Throwable定义了获取异常信息的三个方法
    • 1、String getMessage(); 返回此Throwable的简短描述
    • 2、String toString(); 返回此Throwable的详细描述
    • 3、void printStackTrace(); JVM打印异常对象,默认调用此方法
import java.io.IOException;

public class Demo06_ThrowableMethods {
    /*
        Throwable定义了三个处理异常的方法
            1、String getMessage();
                返回此Throwable的简短描述
            2、String toString();
                返回此Throwable的详细描述
            3、void printStackTrace();
                JVM打印异常对象,默认调用此方法
     */
    public static void main(String[] args) {
        try {
            //出现异常的代码
            readFile("d:\\1.tx");
        } catch (IOException e) {
            System.out.println("文件名称不匹配!!!");
            /*
                1、String getMessage();
                    返回此Throwable的简短描述
                2、String toString();
                    返回此Throwable的详细描述
                3、void printStackTrace();
                    JVM打印异常对象,默认调用此方法
             */
            System.out.println("简短的信息描述是:" + e.getMessage());
            System.out.println("详细的信息描述是:" + e.toString());
            e.printStackTrace();
        }
        System.out.println("后续的代码");
    }

    private static void readFile(String fileName) throws IOException {
        if (!fileName.endsWith(".txt")) {
            throw new IOException("验证失败,不匹配");
        }
        System.out.println("文件后缀名匹配成功!!!");
    }
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9cAC3608-1692322783791)(photo/JavaSE15_异常.assest/1671627495382.png)]

2.4 finally 代码块

finally:有一些特定的代码。无论异常发生与否,都需要执行。同时,因为异常导致程序跳转,导致有些代码无法被执行到,而finally就是解决这个问题的,在finally中存放的代码无论无核是会被执行的

  • 什么时候的代码必须最终执行
    • 当在try语句块中执行了一些物理的如:磁盘文件,网络连接,数据库连接等之后,我们必须在使用完毕之后关闭资源,所以finally此时配上了用处

finally语法:

		try {
            //可能出现异常的代码
        }catch (Exception e){
            //异常的处理逻辑以及错误信息的处理
        }finally {
            //释放资源
        }

finally的注意事项:

  • finally并且不能单独使用
  • finally一般用于资源释放,无论程序是否出现异常,最终都要释放资源

案例:

import java.io.IOException;

public class Demo07_Finally {
    /*
        finally的使用:
            不管是否出现异常,都会被执行
            不能单独使用
            一般用于关闭或者释放资源
     */
    public static void main(String[] args) {
        try {
            //可能出现异常的代码
            readFile("d:\\1.txt");
        } catch (IOException e) {
            //异常处理逻辑
            e.printStackTrace();
        } finally {
            //无论是否出现异常都会被执行
            System.out.println("释放资源");
        }
    }

    private static void readFile(String fileName) throws IOException {
        if (!fileName.endsWith(".txt")) {
            throw new IOException("验证失败,不匹配");
        }
        System.out.println("文件后缀名匹配成功!!!");
    }
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SxKQSU9D-1692322783792)(photo/JavaSE15_异常.assest/1671628597126.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ClvWP67L-1692322783792)(photo/JavaSE15_异常.assest/1671628616788.png)]

2.5 异常注意事项

  • 多个异常捕获之后的处理方式
    • 1、多个异常分别处理
    • 2、多个异常一次捕获,多次处理
    • 3、多个异常一次捕获,一次处理

一般使用一次捕获,多次处理的方式,格式如下

try{
    可能出现异常的代码
}catch(异常类型A e){
    处理异常的代码
    //记录日志,打印异常信息,继抛出异常
}catch(异常类型B e){
    出现异常的代码
    //记录日志,打印异常信息,继抛出异常
}
  • 注意事项:
    • 这种异常处理方式,要求多个catch中的异常不能相同,并且如果catch中的多个异常之间有父子关系,那么子类异常要求在上面的catch中处理,父类异常要求在下面的catch中处理
    • 运行时异常被抛出可以不处理。
    • 如果父类抛出多个异常,子类覆盖父类方法时,只能抛出相同的异常或者其他的子类
    • 父类方法没有抛出异常,子类覆盖该方法不可能抛出异常,子类只能捕获处理
    • 在try-catch后面追加finally代码,其中的代码一定会执行,通常用于资源的释放
    • 如果finally中有return语句,永远返回finally中的结果,但是要避免这种情况的发生

案例:方式一:多个异常分别处理

import java.util.ArrayList;
import java.util.List;

public class Demo8_MoreCatch {
    /*
        多个异常的捕获方式
            1、多个异常分别处理
            2、多个异常一次捕获,多次处理
            3、多个异常一次捕获,一次处理
     */
    public static void main(String[] args) {
        //方式一:多个异常分别处理
        try {
            int[] arr = {1, 2, 3};
            //ArrayIndexOutOfBoundsException
            System.out.println(arr[3]);
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println(e);
        }

        try {
            List<Integer> list = new ArrayList<>();
            list.add(1);
            list.add(2);
            list.add(3);
            //IndexOutOfBoundsException
            System.out.println(list.get(3));
        } catch (IndexOutOfBoundsException e) {
            System.out.println(e);
        }
    }
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mfvXFEsy-1692322783792)(photo/JavaSE15_异常.assest/1671629809348.png)]

案例:方式二:多个异常一次捕获多次处理

import java.util.ArrayList;
import java.util.List;

public class Demo8_MoreCatch {
    /*
        多个异常的捕获方式
            1、多个异常分别处理
            2、多个异常一次捕获,多次处理
            3、多个异常一次捕获,一次处理
     */
    public static void main(String[] args) {
        /*
            方式二:多个异常一次捕获多次处理
            注意事项:
                catch里面定义的异常变量,如果有子父类观系,
                那么子类的异常变量必须写在上面,父类的写在下面
         */
        try {
            //数组下标越界
            int[] arr = {1, 2, 3};
            //ArrayIndexOutOfBoundsException
            System.out.println(arr[3]);
            //下标越界
            List<Integer> list = new ArrayList<>();
            list.add(1);
            list.add(2);
            list.add(3);
            //IndexOutOfBoundsException
            System.out.println(list.get(3));
        } catch (ArrayIndexOutOfBoundsException e) {//子类 在上
            System.out.println(e);
        } catch (IndexOutOfBoundsException e) {//父类 在下
            System.out.println(e);
        }
        System.out.println("后续代码");
    }
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qKoX0sNF-1692322783793)(photo/JavaSE15_异常.assest/1671630184122.png)]

案例:方式三:多个异常多个异常一次捕获,一次处理

import java.util.ArrayList;
import java.util.List;

public class Demo8_MoreCatch {
    /*
        多个异常的捕获方式
            1、多个异常分别处理
            2、多个异常一次捕获,多次处理
            3、多个异常一次捕获,一次处理
     */
    public static void main(String[] args) {
        /*
            方式二:多个异常一次捕获,一次处理
         */
        try {
            //数组下标越界
            int[] arr = {1, 2, 3};
            //ArrayIndexOutOfBoundsException
            System.out.println(arr[3]);
            //下标越界
            List<Integer> list = new ArrayList<>();
            list.add(1);
            list.add(2);
            list.add(3);
            //IndexOutOfBoundsException
            System.out.println(list.get(3));
        } catch (IndexOutOfBoundsException e) {
            System.out.println(e);
        }
        System.out.println("后续代码");
    }
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ATac7Kn4-1692322783793)(photo/JavaSE15_异常.assest/1671630305759.png)]

第三章 自定义异常

3.1 自定义异常概述

什么是自定义异常:

  • 在Java开发的过程中,会有一些异常是JDK未定义的,此时我们需要根据业务的异常情况来自定义异常

如何自定义异常:

  • 自定义一个编译期异常,自定义类,并且继承java.lang.Exception
  • 自定义一个运行期异常,自定义类,并且继承java.lang.RuntimeException

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rG7yYZcs-1692322783793)(photo/JavaSE15_异常.assest/1671634532806.png)]

3.2 自定义异常案例

  • 需求:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fVTiXk1e-1692322783794)(photo/JavaSE15_异常.assest/1671634707667.png)]

  • 创建自定义异常类
public class Demo09_RegisterException extends Exception{
    /*
        自定义异常:
            语法格式:
                public class XXXException extends Exception/RuntimeException {
                    添加一个空参数的构造方法
                    添加一个带异常信息的构造方法
                }
            注意:
                1、自定义异常类一般都是以Exception结尾,说明该类是一个异常类
                2、自定义异常类:必须继承Exception或RuntimeException
                    a、继承Exception,那么定义的异常类是以个编译期异常类,
                        如果方法内部抛出了编译期异常,那么必须处理这个异常
                        要么抛出异常,要么try-catch捕获异常
                    b、继承RuntimeException。那么自定义的异常类就是运行期异常
                        运行期异常无需处理,交给JVM虚拟机处理---终端处理
     */
    //添加无参构造
    public Demo09_RegisterException() {
        super();
    }
    /*
        添加一个带异常信息的构造方法
     */
    public Demo09_RegisterException(String message) {
        super(message);
    }
}
  • 创建测试类
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;

public class Demo09_TestRegister {
    /*
        需求:模拟注册操作,如果用户名存在,则抛出异常,提示用户名已存在
        步骤:
            1、使用集合保存已经注册的用户名信息
            2、使用Scanner获取用户输入的注册的用户名信息
            3、定义一个方法,对用户输入的用户名进行判断
            4、遍历集合中存储的已经注册的用户名
            5、使用输入的用户名和遍历的用户名进行比对
            6、如果是true。说明用户名已经存在,抛出自定义异常,告知用户名已经存在
            7、如果是false。继续遍历
            8、如果循环比对结束了,还没有找到重复的用户名,提示用户注册成功
     */
    //1、定义集合存放已经注册的用户名
    public static List<String> list = new ArrayList<>();

    public static void main(String[] args) throws Demo09_RegisterException {
        list.add("tom");
        list.add("tony");
        list.add("jack");
        list.add("anny");
        for (int i = 0; i < 5; i++) {
            //2、使用Scanner获取用户输入的用户名
            System.out.println("请输入您要注册的用户名");
            String username = new Scanner(System.in).nextLine();
            //3。调用方法
            checkArray(username);
            //4、打印集合
            System.out.println(list);
        }
    }

    //3、定义方法---抛出异常
    public static void checkArray(String name) throws Demo09_RegisterException {
        //遍历集合中已经存在的用户名
        for (String item : list) {
            if (item.equals(name)) {
                //true:说明用户名已经存在,抛出自定义异常,告知用户名已经存在
                throw new Demo09_RegisterException("用户名已经存在,请重新注册");
            }
        }
        //如果循环比对结束了,还没有找到重复的用户名,提示用户注册成功
        System.out.println("恭喜您注册成功");
        //添加用户名到集合中
        list.add(name);
    }
}
  • 运行结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TxkO7hqd-1692322783794)(photo/JavaSE15_异常.assest/1671634619260.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iBmHHWoS-1692322783794)(photo/JavaSE15_异常.assest/1671634655921.png)]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/893842.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何快速高效地进行 API 自动化测试

我们的研发团队最需要应对的就是各种新需求。软件越来越快的更新速度也让整个系统也变得越来越复杂&#xff0c;这让 测试 工作面临着巨大的挑战。测试人员必须与开发人员沟通&#xff0c;确定测试范围&#xff0c;并及时获取最新的接口用例数据来验证功能。但是&#xff0c;由…

【Apollo】Apollo版本特点与改进

特点与改进 概述里程碑6.0版本特点及改进7.0版本特点及改进8.0版本特点及改进代码差异 主页传送门&#xff1a;&#x1f4c0; 传送 概述 Apollo (阿波罗)是一个开放的、完整的、安全的平台&#xff0c;将帮助汽车行业及自动驾驶领域的合作伙伴结合车辆和硬件系统&#xff0c;快…

【Web开发指南】MyEclipse XML编辑器的高级功能简介

MyEclipse v2023.1.2离线版下载 1. 在MyEclipse中编辑XML 本文档介绍MyEclipse XML编辑器中的一些可用的函数&#xff0c;MyEclipse XML编辑器包括高级XML编辑&#xff0c;例如&#xff1a; 语法高亮显示标签和属性内容辅助实时验证(当您输入时)文档内容的源&#xff08;Sou…

协同过滤推荐算法-基于Django+mysql的智能水果销售系统设计(可做计算机毕设)

随着科技的不断发展&#xff0c;智能化已经成为各行各业的趋势&#xff0c;水果销售行业也不例外。智能水果销售系统就是应运而生的一种智能化解决方案&#xff0c;它可以为用户提供更加便捷、高效的购物体验。其中&#xff0c;系统模块是智能水果销售系统的重要组成部分。 系…

postgresql 谨慎使用正则删除(%,_)

建表 CREATE TABLE public.ellistest (id bigserial NOT NULL,"name" varchar null,primary key (id) );插入数据 删除含有_线的数据 你会发现表被清空了 delete from ellistest where name like %_%原因 百分号(%)用于表示0、1或多个字符或数字。 下划线通配符…

Java【动态规划】图文详解 “路径问题模型“ , 教你手撕动态规划

文章目录 一、不同路径I1, 题目2, 思路分析2.1, 状态表示2.2, 状态转移方程2.3, 初始化2.4, 填表顺序2.5, 返回值 3, 代码 二、不同路径II1, 题目2, 思路分析2.1, 状态表示2.2, 状态转移方程2.3, 初始化2.4, 填表顺序2.5, 返回值 3, 代码 三、礼物最大价值1, 题目2, 思路分析2.…

从零基础到精通IT:探索高效学习路径与成功案例

文章目录 导语&#xff1a;第一步&#xff1a;明确学习目标与方向选择适合的IT方向设定具体的学习目标咨询和调研 第二步&#xff1a;系统学习基础知识选择适合的编程语言学习数据结构和算法掌握操作系统和计算机网络基础 第三步&#xff1a;实践项目锻炼技能选择合适的项目编写…

C语言:初阶测试错题(查漏补缺)

题一&#xff1a;字符串倒置 示例1 输入 I like beijing. 输出 beijing. like I 思路一&#xff1a; 定义字符串数组arr[ ] ,利用gets()将要倒置的字符串输入&#xff0c;记录字符串长度len&#xff0c;此时写一个逆置函数Inversion()&#xff0c;第一步将整个字符串逆置&…

基于决策树(Decision Tree)的乳腺癌诊蚓

决策树(DecisionTree)学习是以实例为基础的归纳学习算法。算法从--组无序、无规则的事例中推理出决策树表示形式的分类规则,决策树也能表示为多个If-Then规则。一般在决策树中采用“自顶向下、分而治之”的递归方式,将搜索空间分为若千个互不相交的子集,在决策树的内部节点(非叶…

C语言刷题训练DAY.7

1.及格分数 解题思路&#xff1a; 这里直接用while语句控制循环&#xff0c;if else语句判断即可。 解题代码&#xff1a; #include<stdio.h> int main() {int a 0;while(scanf("%d", &a) ! EOF){if (a >60)printf("Pass\n");elseprintf…

HCIP学习--交换技术

前置学习 HICA学习&#xff08;第一天&#xff09;--网络基础_板栗妖怪的博客-CSDN博客 HCIA学习--VLAN一些常识及在ensp上实现VLAN配置_ensp vlan_板栗妖怪的博客-CSDN博客 一个小知识 在一个公司内部使用的路由技术很少&#xff0c;用的是交换技术&#xff0c;使用几个三…

【gitkraken】gitkraken自动更新问题

GitKraken 会自动升级&#xff01;一旦自动升级&#xff0c;你的 GitKraken 自然就不再是最后一个免费版 6.5.1 了。 在安装 GitKraken 之后&#xff0c;在你的安装目录&#xff08;C:\Users\<用户名>\AppData\Local\gitkraken&#xff09;下会有一个名为 Update.exe 的…

【从零学习python 】47. 面向对象编程中的继承概念及基本使用

文章目录 继承的基本使用代码逐行讲解说明:进阶案例 继承的基本使用 在现实生活中&#xff0c;继承一般指的是子女继承父辈的财产&#xff0c;父辈有的财产&#xff0c;子女能够直接使用。 程序里的继承 继承是面向对象软件设计中的一个概念&#xff0c;与多态、封装共为面向对…

在远程服务器上安装环境

第一步&#xff1a;下载anaconda 进入官网https://www.anaconda.com/download#downloads,点击linux的小企鹅 选择下载linux64位版本。 第二步&#xff1a;安装 打开xftp&#xff0c;将文件上传到服务器中。 然后在你自己的文件夹中输入bash Anaconda3-2023.07-2-Linux-x86…

视频云存储/视频汇聚/视频监控EasyCVR平台CDN转推的操作流程

视频汇聚/视频云存储/集中存储/视频监控管理平台EasyCVR能在复杂的网络环境中&#xff0c;将分散的各类视频资源进行统一汇聚、整合、集中管理&#xff0c;实现视频资源的鉴权管理、按需调阅、全网分发、云存储、智能分析等&#xff0c;视频智能分析平台EasyCVR融合性强、开放度…

ARM体系结构学习笔记:寄存器

前段时间通篇概览一遍汇编语言程序设计——基于ARM体系结构(第4版), 总感觉纸上得来终觉浅, 并不能够让我产生一种读汇编就跟读C代码一样那种流畅的感觉. 如果我们越熟悉, 越发觉得他们是有规律可循的, 这里做一下对应的记录, 互相共勉. 通用寄存器并不通用 表面上arm为我们提…

git版本管理加合并笔记

1.创建空文件夹&#xff0c;右键Bash here打开 2.打开链接&#xff0c;点击克隆下载&#xff0c;复制SSH链接 3.输入git SSH链接 回车 遇到问题&#xff1a; 但明明我已经有权限了&#xff0c; 还是蹦出个这 4.换成https在桌面上进行克隆仓库就正常了 5.去vscode里改东西 …

暑期关爱儿童安全“守护儿童远离烧烫伤 我是小小宣导员”活动走进德安社区

夏季是烧烫伤的高发季节&#xff0c;随着气温的升高&#xff0c;衣物的减少&#xff0c;皮肤外漏多&#xff0c;儿童自我保护能力弱&#xff0c;更容易受到烧烫伤害。为了守护儿童安全&#xff0c;8月11日下午&#xff0c;由中国社会福利基金会烧烫伤关爱公益基金主办&#xff…

VET:基因变异VCF数据集便捷提取工具

VET&#xff1a;Vcf Export Tools 工具简介 VET是一个基于R语言开发的变异位点信息批量提取工具&#xff0c;主要功能是根据VCF数据集&#xff0c;按照基因ID、样品ID、变异位点ID等参数&#xff0c;实现批量提取&#xff0c;同时支持变异位点结构注释&#xff0c;一步搞定变异…