【java基础系列】16- Java中怎么处理异常?

news2024/11/17 6:52:08

Java的异常处理

1、异常的概念

  • 概念:程序在运行过程中出现的不正常现象。出现异常不处理将终止程序运行。
  • 异常处理的必要性:任何程序都可以存在大量的未知问题、错误;如果不对这些问题进行正确处理,则可能导致程序的中断,造成不必要的损失。
  • 异常处理:Java编程语言使用异常处理机制为程序提供了异常处理的能力。

2、异常的分类

  • Throwable:可抛出的,一切错误或异常的父类,位于java.lang包中。
    • ErrorJVM、硬件、执行逻辑错误,不能手动处理。
      • StackOverflowError:如果线程的堆栈大小超出分配的内存限制,比如:递归没有被结束。
      • OutOfMemoryError:内存不足
    • Exception:程序在运行和配置中产生的问题,可处理。
      • RuntimeException:运行时异常,可处理,可不处理。
      • CheckedException:检查时异常,必须处理。(还没运行就报错,显示红色波浪线)

3、异常的产生

  • 当程序在运行时遇到不符合规范的代码或结果时,会产生异常或程序员使用throw关键字手动抛出异常。

4、异常的传递

  • 异常的传递:按照方法的调用链反向传递,如始终没有处理异常,最终会由JVM进行默认异常处理(打印堆栈跟踪信息,并中断程序运行)。

4.1 案例(一)

  • 封装前:
package com.goshawk.chapter_03.section_1;

import java.util.Scanner;

/**
 * 异常的产生和传递
 * 要求:输入两个数字实现两个数字相除
 */
public class Demo2 {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("请输入第一个数字:");
        int num1 = input.nextInt(); // num1 = a,出现异常没有处理,所以程序中断
        System.out.println("请输入第二个数字:");
        int num2 = input.nextInt();
        int result = num1/num2; // num2 = 0,出现异常没有处理,所以程序中断
        System.out.println("结果:"+result);
        System.out.println("程序执行完毕");
    }

}

  • 封装后:
package com.goshawk.chapter_03.section_1;

import java.util.Scanner;

/**
 * 异常的产生和传递
 * 要求:输入两个数字实现两个数字相除
 */
public class Demo2 {
    public static void main(String[] args) {
        operation();
    }

    public static void operation(){
        System.out.println("#######operation##########");
        device();
    }

    public static void device(){
        Scanner input = new Scanner(System.in);
        System.out.println("请输入第一个数字:");
        int num1 = input.nextInt(); // num1 = a,出现异常没有处理,所以程序中断
        System.out.println("请输入第二个数字:");
        int num2 = input.nextInt();
        int result = num1/num2; // num2 = 0,出现异常没有处理,所以程序中断
        System.out.println("结果:"+result);
        System.out.println("程序执行完毕");
    }

}

在这里插入图片描述

5、异常的处理

  • Java的异常处理是通过5个关键字来实现的:
    • try:执行可能产生异常的代码
    • catch:捕捉异常,并处理
    • finally:无论是否发生异常,代码总能执行
    • throw:手动抛出异常
    • throws:声明方法可能要抛出的各种异常。

5.1 异常处理:try ... catch

try{
  // 可能出现异常的代码
} catch (Exception e) {
  // 异常处理的相关代码,如:getMessge()、printStackTrace()
}
  • 会三种情况:
    • 正常请求
    • 出现异常并处理
    • 异常类型不匹配
  • Mac快捷键:command+option+t
  • Windows快捷键:Alt+shift+z
5.1.1 案例
package com.goshawk.chapter_03.section_1;

import java.util.Scanner;

/**
 * try...catch...的使用
 * try{...可能出现异常的代码}
 * catch{...捕获异常,并处理异常}
 * 
 * 三种情况:
 * (1)正常情况,没有发生异常
 * (2)发生异常并捕获
 * (3)发生异常,不能捕获
 */
public class Demo3 {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int result = 0;
        try {
            System.out.println("请输入第一个数字:");
            int num1 = input.nextInt();
            System.out.println("请输入第二个数字:");
            int num2 = input.nextInt();
            result = num1/num2;
        } catch (Exception e) { // 捕获 Exception:所有异常的父类,如果使用NullPointerException将不能被捕获到
            // 处理
            // e.printStackTrace();
            System.out.println(e.getMessage());

        }
        System.out.println("结果:"+result);
        System.out.println("程序执行完毕");
    }
}

5.2 异常处理:try ... catch ... finally

try {
  	// 可能出现异常的代码
  ] catch(Exception e) {
    // 异常处理的相关代码,如:getMessge()、printStackTrace()
  } finally {
    // 是否发生异常都会执行,可以释放资源等
  }
  • finally块是否发生异常都执行,可以释放资源。
  • finally块不执行的唯一情况,退出java虚拟机。
5.2.1 案例
package com.goshawk.chapter_03.section_1;

import java.util.Scanner;

/**
 * try ... catch ... finally...的使用
 * finally 最后的
 * 表示有没有发生异常都会执行的代码
 */
public class Demo4 {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int result = 0;
        try {
            System.out.println("请输入第一个数字:");
            int num1 = input.nextInt();
            System.out.println("请输入第二个数字:");
            int num2 = input.nextInt();
            result = num1/num2;
            
            // 手动退出JVM,后面的代码不会执行
            System.exit(0);
        } catch (Exception e) {

            System.out.println(e.getMessage());

        } finally {
            System.out.println("释放资源...");
        }
        System.out.println("结果:"+result);
        System.out.println("程序执行完毕");
    }
}

5.3 异常处理:多重 catch

try {
  // 可能出现异常的代码
} catch (异常类型1) {
  // 满足异常类型1执行的相关代码
} catch (异常类型2) {
  // 满足异常类型2执行的相关代码
} catch (异常类型3) {
  // 满足异常类型3执行的相关代码
}
  • 子类异常在前,父类异常在后
  • 发生异常时按顺序逐个匹配
  • 只执行第一个与异常类型匹配的catch语句
  • finally根据需要可写或不写
5.3.1 案例
package com.goshawk.chapter_03.section_1;

import java.util.InputMismatchException;
import java.util.Scanner;

/**
 * 多重catch的使用
 * try...catch(类型1)...catch(类型2)...
 */
public class Demo5 {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int result = 0;
        try {
            // String string = null;
            // System.out.println(string.equals("测试空指针异常没有被捕获,返回未知异常"));
            System.out.println("请输入第一个数字:");
            int num1 = input.nextInt();
            System.out.println("请输入第二个数字:");
            int num2 = input.nextInt();
            result = num1/num2;

        } catch (ArithmeticException e) {
            System.out.println("算术异常"); // 除数输入0触发
        } catch (InputMismatchException e) {
            System.out.println("输入不匹配异常"); // num1输入a
        } catch (Exception e) {
            System.out.println("未知异常");
        }
        System.out.println("结果:"+result);
        System.out.println("程序执行完毕");
    }
}

5.4 异常处理:try ... finally

  • try ... finally不能捕获异常,仅仅用来当发生异常时,释放资源。
  • 一般用在底层代码,只释放资源不做异常处理,把异常向上抛出。
try {
  // 可能出现异常的代码
} finally {
  // 是否发生异常都会执行,可以释放资源等
}
5.4.1 案例
package com.goshawk.chapter_03.section_1;

import java.util.Scanner;

/**
 * try...finally...的使用
 * 不能处理异常,可以释放资源,把异常向上抛出,程序中断
 */
public class Demo6 {
    public static void main(String[] args) {
        try {
            device();
        } catch (Exception e) {
            System.out.println("出现异常:" + e.getMessage());
        }
    }

    public static void device(){
        Scanner input = new Scanner(System.in);
        int result = 0;
        try {

            System.out.println("请输入第一个数字:");
            int num1 = input.nextInt();
            System.out.println("请输入第二个数字:");
            int num2 = input.nextInt();
            result = num1/num2;

        } finally {
            System.out.println("不能处理异常,可以释放资源,把异常向上抛出,如果不处理程序中断");
        }
        
        // 以下两行代码不会执行
        System.out.println("结果:"+result);
        System.out.println("程序执行完毕");
    }
}

5.5 异常处理的总结

  • try {} catch {}
  • try {} catch {} finally {}
  • try {} catch {} catch {}
  • try {} finally {}
  • 注意:
    • 多重catch,遵循从子(小)到父(大)的顺序,父类异常在最后。

6、声明异常

  • 如果在一个方法体中抛出异常,如何通知调用者?
  • throws关键字:声明异常。
  • 使用原则:底层代码向上声明或者抛出异常,最上层一定要处理异常,否则程序中断。

6.1 案例(一)

  • 使用 throws Exception 强制调用者要处理异常
package com.goshawk.chapter_03.section_1;

import java.util.Scanner;

/**
 * throws;声明异常
 */
public class Demo7 {
    public static void main(String[] args) { 
        try {
            device();
        } catch (Exception e) {
            System.out.println("出现异常:" + e.getMessage());
        }
    }
    
    public static void device() throws Exception {
        Scanner input = new Scanner(System.in);
        System.out.println("请输入第一个数字:");
        int num1 = input.nextInt();
        System.out.println("请输入第二个数字:");
        int num2 = input.nextInt();
        int result = num1 / num2;
        System.out.println("结果:"+result);
    }
}

6.2 案例(二)

package com.goshawk.chapter_03.section_1;

import java.util.Scanner;

/**
 * throws;声明异常
 */
public class Demo7 {
    public static void main(String[] args) throws Exception { // throws Exception 异常交给JVM处理,会中断程序,没有意义

        device();
    }

    public static void device() throws Exception {
        Scanner input = new Scanner(System.in);
        System.out.println("请输入第一个数字:");
        int num1 = input.nextInt();
        System.out.println("请输入第二个数字:");
        int num2 = input.nextInt();
        int result = num1 / num2;
        System.out.println("结果:"+result);
    }
}

7、抛出异常

  • 除了系统自动抛出异常外,有些问题需要程序员自行抛出异常。
  • throw关键字:抛出异常。
  • 语法:throw 异常对象;

7.1 案例(一)

package com.goshawk.chapter_03.section_1;

public class Person {
    private String name;
    private int age;
    private String sex;

    public Person(){}

    public Person(String name, int age, String sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        if (age>0&&age<=120){
            this.age = age;
        }else {
            // 抛出异常
            throw new RuntimeException("年龄不符合要求");
        }

    }


    public String getSex() {
        return sex;
    }

    
    public void setSex(String sex) {
        if (sex.equals("男") || sex.equals("女")) {
            this.sex = sex;
        }else {
            throw new RuntimeException("性别不符合要求");
        }

    }


    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", sex='" + sex + '\'' +
                '}';
    }
}

package com.goshawk.chapter_03.section_1;

public class TestPerson {
    public static void main(String[] args) {
        Person xiaoming = new Person();
        xiaoming.setAge(20);
        xiaoming.setSex("人妖");
        System.out.println(xiaoming.toString());
    }
}

7.2 案例(二)

package com.goshawk.chapter_03.section_1;

public class Person {
    private String name;
    private int age;
    private String sex;

    public Person(){}

    public Person(String name, int age, String sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) throws Exception {
        if (age>0&&age<=120){
            this.age = age;
        }else {
            // 抛出异常
            throw new Exception("年龄不符合要求");
        }

    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) throws Exception {
        if (sex.equals("男") || sex.equals("女")) {
            this.sex = sex;
        }else {
            throw new Exception("性别不符合要求");
        }

    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", sex='" + sex + '\'' +
                '}';
    }
}

package com.goshawk.chapter_03.section_1;

public class TestPerson {
    public static void main(String[] args) throws Exception{
        Person xiaoming = new Person();
        xiaoming.setAge(20);
        xiaoming.setSex("人妖");
        System.out.println(xiaoming.toString());
    }
}

8、自定义异常

  • 需要继承自ExceptionException的子类,常用RuntimeException
  • 必要提供的构造方法:
    • 无参数构造方法
    • String message参数的构造方法。

8.1 案例

  • 创建SexException异常类型
package com.goshawk.chapter_03.section_1;

public class SexException extends RuntimeException{
    public SexException() {
    }

    public SexException(String message) {
        super(message);
    }

    public SexException(String message, Throwable cause) {
        super(message, cause);
    }

    public SexException(Throwable cause) {
        super(cause);
    }

    public SexException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
        super(message, cause, enableSuppression, writableStackTrace);
    }
}

  • 创建AgeException异常类型
package com.goshawk.chapter_03.section_1;

/**
 * 自定义异常
 * 1、继承Exception或者子类
 * 2、添加构造方法
 */
public class AgeException extends RuntimeException{
    public AgeException() {
    }

    public AgeException(String message) {
        super(message);
    }

    public AgeException(String message, Throwable cause) {
        super(message, cause);
    }

    public AgeException(Throwable cause) {
        super(cause);
    }

    public AgeException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
        super(message, cause, enableSuppression, writableStackTrace);
    }
}

  • 创建Person类,并引用自定义异常类型
package com.goshawk.chapter_03.section_1;

public class Person {
    private String name;
    private int age;
    private String sex;

    public Person(){}

    public Person(String name, int age, String sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        if (age>0&&age<=120){
            this.age = age;
        }else {
            // 抛出异常
            throw new AgeException("年龄不符合要求");
        }

    }

    public String getSex() {
        return sex;
    }


    public void setSex(String sex) {
        if (sex.equals("男") || sex.equals("女")) {
            this.sex = sex;
        }else {
            throw new SexException("性别不符合要求");
        }

    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", sex='" + sex + '\'' +
                '}';
    }
}

  • 测试Person
package com.goshawk.chapter_03.section_1;

public class TestPerson {
    public static void main(String[] args) {
        Person xiaoming = new Person();
        xiaoming.setAge(200);
        xiaoming.setSex("人妖");
        System.out.println(xiaoming.toString());
    }
}

9、方法覆盖声明异常方法

  • 带有异常声明的方法覆盖:
    • 方法名、参数列表、返回值类型必须和父类相同。
    • 子类的访问修饰符合父类相同或是比父类更宽。
    • 子类中的方法,不能抛出比父类更多、更宽的检查时异常。
      • 比如:父类抛出的异常为FileNotFoundException,那么子类就不能抛出Exception异常。
      • 比如:如果父类没有抛出异常,那么子类就不能抛出异常。因为子类不能比父类更多,但是子类可以抛出RuntimeException异常。

9.1 案例(一)

  • 子类中的方法,不能抛出比父类更多、更宽的检查时异常
    • 如果父类抛出Exception,子类重写的方法可以抛出Exception异常,也可以不抛。
package com.goshawk.chapter_03.section_1;

public class Animal {
    public void eat() throws Exception{
        System.out.println("这是一个父类中的吃方法");
    }
}

package com.goshawk.chapter_03.section_1;

public class Dog extends Animal{
    @Override
    public void eat() throws Exception{
        System.out.println("这是一个子类中的吃方法");
    }
  
  // 或者不抛异常
  @Override
    public void eat() {
        System.out.println("这是一个子类中的吃方法");
    }
}



9.2 案例(二)

package com.goshawk.chapter_03.section_1;

import java.io.FileNotFoundException;

public class Animal {
    public void eat() throws FileNotFoundException {
        System.out.println("这是一个父类中的吃方法");
    }
}

  • 父类抛出的异常为FileNotFoundException,那么子类就不能抛出Exception异常,因为Exception异常要比FileNotFoundException异常要广、要多。但是可以不抛或者抛出的异常与父类一致。
package com.goshawk.chapter_03.section_1;

public class Dog extends Animal{
    @Override
    public void eat() throws Exception{ // 错误用法
        System.out.println("这是一个子类中的吃方法");
    }
}

9.3 案例(三)

  • 如果父类没有抛出异常,那么子类也不能抛出异常。因为子类不能比父类更多,但是子类可以抛出RuntimeException异常。
package com.goshawk.chapter_03.section_1;

public class Animal {
    public void eat(){
        System.out.println("这是一个父类中的吃方法");
    }
}

package com.goshawk.chapter_03.section_1;

import java.io.FileNotFoundException;

public class Dog extends Animal{
    @Override
    public void eat() throws RuntimeException {
        System.out.println("这是一个子类中的吃方法");
    }
}

10、常见运行时异常

类型说明
NullPointerException空指针异常
ArrayIndexOutOfBoundsException数组越界异常
ClassCastException类型转换异常
NumberFormatException数字格式化异常
ArithmeticException算术异常

10.1 案例

package com.goshawk.chapter_03.section_1;

import java.io.FileInputStream;

/**
 * 常见运行的异常
 * 运行时异常:RuntimeException以及子类
 * 检查时异常:Exception以及子类,除了RuntimeException
 */
public class Demo1 {
    public static void main(String[] args) {
        /**
        // NullPointerException
        String name = null;
        System.out.println(name.equals("hello"));
         */

        /**
        // ArrayIndexOutOfBoundsException
        int[] arr = {10, 20, 30};
        System.out.println(arr[3]);
         */

        /**
        // ClassCastException
        Object str = "hello";
        Integer i = (Integer)str;
         */

        /**
        // NumberFormatException
        int n = Integer.parseInt("100a");
        System.out.println(n);
         */

        /**
        // ArithmeticException
        int n = 10/0;
        System.out.println(n);
         */

        // 检查时异常
        // FileInputStream file = new FileInputStream("d:\\help.text")
    }
}


11、总结

  • 异常的概念
    • 程序在运行过程中出现的特殊情况
  • 异常的分类
    • RuntimeException:运行时异常,可处理,可不处理。
    • CheckedException:检查时异常,必须处理。
  • 异常的产生
    • 程序遇到错误,或手动抛出异常。
  • 异常的传递
    • 按照方法的调用链反向传递,如始终没有处理异常,最终会由JVM进行默认异常处理(打印堆栈跟踪信息并且中断程序)。
  • 异常的处理
    • try {} catch {} finally {}
  • 带有异常声明的方法覆盖
    • 子类中的方法,不能抛出比父类更多、更宽的异常。

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

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

相关文章

[附源码]Python计算机毕业设计SSM开放性实验室网上预约管理(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

分布式和可再生系统建模(simulink)

目录 1 可再生/微电网概述 1.1 分布式和可再生系统建模和仿真 1.2 解决工作流程 1.3 能源管理系统监控设计 1.4 验证控件的测试网格规范和IEEE标准 1.5 部署算法和代码生成 1.6 网格集成研究控制器的实时测试 2 微电网案例 2.1 简介 2.2 在 Simulink 中实现微电网…

【JavaEE】初识操作系统,吃透进程

✨哈喽&#xff0c;进来的小伙伴们&#xff0c;你们好耶&#xff01; &#x1f6f0;️&#x1f6f0;️系列专栏:【JavaEE】 ✈️✈️本篇内容:初始操作系统&#xff0c;进程的概念 &#x1f680;&#x1f680;代码存放仓库gitee&#xff1a;JavaEE初阶代码存放&#xff01; ⛵⛵…

关于AM437x Linux+qt开发笔记(2)

第一部分,触摸屏 命令 lsinput (有些系统不移植)查看系统input实践 命令ox -d /dev/input/event1 或hexdump -d /dev/input/event1 (从上图看,event0没有接的触屏) ,点击屏幕如下 命令 ls /dev/input -al , 查看input设备的触摸屏软连接。 命令cat /etc/udev/ru…

编码与测试

文章目录一、编码1、概念2、如何选择程序设计语言3、程序设计风格&#xff08;1&#xff09;源程序文档化(2) 数据说明&#xff08;3&#xff09;语句构造&#xff08;4&#xff09;输入输出&#xff08;5&#xff09;程序效率编码时提高程序运行效率的主要规则二、软件测试基础…

【爬坑之路一】windows系统下更新升级node版本【亲测有效】

前言 一定要看到最后&#xff01;&#xff01;&#xff01; 项目开发中&#xff0c;需要升级 node 版本。本着不想卸载 node 再重新安装的原则&#xff0c;因为node 的环境配置以及各种相关配置有些繁琐&#xff0c;所以就想着使用 命令的方式进行升级。 在网上找了一些升级 n…

C#详解:程序域、程序集、模块、Type、反射

总结&#xff1a; ">>>":代表包含 进程>>>应用程序域AppDomain>>>程序集Assembly>>>模块Module>>>类型Type>>>成员&#xff08;方法、属性等&#xff09; 1、程序集Assembly 如图&#xff0c;假设一个解决方…

ARM 自己动手安装交叉编译工具链

一、Windows中装软件的特点 Windows中装软件使用安装包&#xff0c;安装包解压后有2种情况&#xff1a; 一种是一个安装文件&#xff08;.exe .msi&#xff09;&#xff0c;双击进行安装&#xff0c;下一步直到安装完毕。安装完毕后会在桌面上生成快捷方式&#xff0c;我们平…

(附源码)ssm招聘网站 毕业设计 250858

SSM招聘网站 摘 要 招聘网站采用B/S结构、java开发语言、以及Mysql数据库等技术。系统主要分为管理员、用户、企业三部分&#xff0c;管理员管理主要功能包括&#xff1a;首页、站点管理&#xff08;轮播图、公告栏&#xff09;用户管理&#xff08;管理员、应聘用户、企业用户…

重点| 系统集成项目管理工程师考前50个知识点(2)

本文章总结了系统集成项目管理工程师考试背记50个知识点&#xff01;&#xff01;&#xff01; 帮助大家更好的复习&#xff0c;希望能对大家有所帮助 比较长&#xff0c;放了部分&#xff0c;需要可私信&#xff01;&#xff01; 11、项目目标包括成果性目标和约束性目标。项…

直播倒计时,PyTorch Conference 2022 今晚开启

内容一览&#xff1a;PyTorch Conference 2022 即将在美国南部城市新奥尔良举办。本次会议将带来技术讲座、项目演示及最佳案例分享。 本文首发自微信公众号&#xff1a;PyTorch 开发者社区 关键词&#xff1a;PyTorch 深度学习 机器学习 PyTorch Conference 2022 今晚开启 自…

360crawlergo结合xray被动扫描

360crawlergo结合xray被动扫描 360crawlergo结合xray被动扫描安装配置 360crawlergo结合xray被动扫描 安装 Xray https://github.com/chaitin/xraycrawlergo_x_XRAY https://github.com/timwhitez/crawlergo_x_XRAYcrawlergo https://github.com/0Kee-Team/crawlergo 更多的…

高等数值计算方法学习笔记第7章【非线性方程组求根】

高等数值计算方法学习笔记第7章【非线性方程组求根】一、方程求根与二分法&#xff08;第五次课&#xff09;二、不动点迭代法及其收敛性1.不动点迭代与不动点迭代法&#xff08;一个例题&#xff09;2.不动点的存在性与迭代法的收敛性&#xff08;两个定理&#xff0c;两例题&…

计算机网络——常考的面试题

什么是TCP/IP&#xff1f; TCP建立连接为什么要三次握手&#xff1f;断开连接为什么要四次挥手&#xff1f; SSL/TSL握手过程&#xff1f; 1、网络分层模型 OSI&#xff1a;全称叫Open System Interconnection (开放式系统互联)&#xff0c;是国际标准化组织ISO制定的理论模…

【软件测试】面试老约不到?软件测试简历项目经验怎么写?论项目经验的重要性......

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 随着就业竞争越来越…

(五)共享模型之管程【wait notify 】

一、wait notify 1. 小故事 - 为什么需要 wait 2. 原理之 wait / notify &#xff08;1&#xff09;Owner 线程发现条件不满足&#xff0c;调用 wait 方法&#xff0c;即可进入 WaitSet 变为 WAITING 状态。 &#xff08;2&#xff09;BLOCKED 和WAITING 的线程都处于阻塞状…

[附源码]计算机毕业设计springboot线上社区管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

全力护航!广西移动圆满完成区运会通信保障任务

11月23日晚&#xff0c;广西壮族自治区第十五届运动会在贵港市体育中心闭幕。作为区域主导通信运营商&#xff0c;广西移动贵港分公司充分发挥5G网络技术优势&#xff0c;与贵港市政府、区运会组委会紧密合作&#xff0c;全力以赴为运动会提供了先进、高效的通信服务保障。 广西…

PAT (甲级) 2022年秋季考试 c++ 满分题解

PAT (甲级) 2022年秋季考试 c 满分题解 7-1 Balloon Popping 分数 20 原题 算法标签 模拟 枚举 思路 枚举数组元素&#xff0c; 判断每个元素覆盖气球数, 记录最多可覆盖气球数及最多可覆盖气球数开始下标&#xff0c; 则最小开始值为最后可覆盖气球位置减高度H 代码 #…

matlab如何滤除低频尖峰脉冲

有时&#xff0c;数据会出现不必要的瞬态或尖峰。可以用中值过滤消除它们。 最近我们被客户要求撰写关于信号滤除脉冲数据的研究报告&#xff0c;包括一些图形和统计输出。 在存在60 Hz电源线噪声的情况下&#xff0c;考虑模拟仪器输入端的开环电压。采样率为1 kHz。 fs …