当前位置: 首页 > news >正文

【Java】基础入门 (十六)--- 异常

1.异常

1.1 异常概述

       异常是指程序在运行过程中出现的非正常的情况,如用户输入错误、除数为零、文件不存在、数组下标越界等。由于异常情况再程序运行过程中是难以避免的,一个良好的应用程序除了满足基本功能要求外,还应具备预见并处理可能发生的各种异常情况。因此,在开发中需要充分考虑各种意外情况,以提高程序的容错能力。异常处理事一种技术,用于处理这种异常情况。

       我们阅读下面的代码,通过这段代码来认识异常。 我们调用一个方法时,经常一不小心就出异常了,然后在控制台打印一些异常信息。其实打印的这些异常信息,就叫做异常。

public class ExceptionTest01 {public static void main(String[] args) {System.out.println(Integer.valueOf("abc"));}
}

       运行之后会出现如下的页面:

在这里插入图片描述

       因为在设计这个方法的时候,在方法中对调用者传递的参数进行校验,如果校验数据不合法,就会将异常信息封装成一个对象并抛出,JVM接收到异常对象之后,就把异常打印了。

public static Integer valueOf(String s) throws NumberFormatException {return Integer.valueOf(parseInt(s, 10));
}

       因为写代码时经常会出现问题,Java的设计者们早就为我们写好了很多个异常类,来描述不同场景下的问题。而有些类是有共性的所以就有了异常的继承体系。

1.1.1 异常的体系

在这里插入图片描述

所有异常类都是Throwable类的子类,它派生出两个子类, Error 类和 Exception 类:

       (1) Error 类:表示程序无法恢复的严重错误或者恢复起来比较麻烦的错误,例如内存溢出、动态链接失败、虚拟机错误等。应用程序不应该主动抛出这种类型的错误,通常由虚拟机自动抛出。如果出现这种错误,最好的处理方式是让程序安全退出。在进行程序设计时,我们更应关注Exception类。
       (2)Exception类:由Java应用程序抛出和处理的非严重错误,例如文件未找到、网络连接问题、算术错误(如除以零)、数组越界、加载不存在的类、对空对象进行操作、类型转换异常等。Exception类的不同子类对应不同类型的异常。Exception类又可分为两大类异常:

  • 不受检异常:也称为unchecked异常,包括RuntimeException及其所有子类。对这类异常并不要求强制进行处理,例如算术异常ArithmeticException等。
  • 受检异常:也称为checked异常,指除了不受检异常外,其他继承自Exception类的异常。对这类异常要求在代码中进行显式处理。

Java提供了多种异常类,下表列举了一些常见的异常类及其用途:

在这里插入图片描述

1.2 Java异常处理机制

1.2.1 异常处理

       Java的异常处理机制类似于人们对可能发生的意外情况进行预先处理的方式。在程序执行过程中,如果发生了异常,程序会按照预定的处理方式对异常进行处理。处理完异常之后,程序会继续执行。如果异常没有被处理,程序将会终止运行。

       Java的异常处理机制依靠以下 5 个关键字:trycatchfinallythrowthrows。这些关键字提供了两种异常处理方式。

(1)使用try、catch、finally来捕获和处理异常:

  • try 块中包含可能会抛出异常的代码。
  • catch 块中用于捕获并处理指定类型的异常。
  • finally 块中的代码无论是否发生异常都会被执行,通常用于释放资源或清理操作。
package swp.kaifamiao.codes.Java.d0830;/*** {class description}** @author SWP* @version 1.0.0*/
public class Main {public static void main(String[] args) {try {int i = 1, j = 0, res;System.out.println("begin");res = i / j;System.out.println("end");}catch (ArithmeticException e){System.out.println("caught");e.printStackTrace();}finally {System.out.println("finally");}System.out.println("over");}
}

运行效果:

在这里插入图片描述

(2)使用throw、throws 来抛出异常:

       ① 使用throws声明抛出异常

       try-catch-finally 处理的是在方法内部发生的异常,在方法内部直接捕获并处理。如果在一个方法体内抛出了异常,并希望调用者能够及时地捕获异常,Java语言中通过关键字throws声明某个方法可能抛出的各种异常,以通知调用者。throws 可以同时声明多个异常,之间用逗号隔开。

package swp.kaifamiao.codes.Java.d0830;import java.util.InputMismatchException;
import java.util.Scanner;/*** {class description}** @author SWP* @version 1.0.0*/
public class Demo01 {public static void main(String[] args) {try {divide();}catch (InputMismatchException e){System.out.println("除数和被除数必须都是整数");}catch (ArithmeticException e){System.out.println("除数不能为零");}catch (Exception e){System.out.println("其他异常" + e.getMessage());}finally {System.out.println("感谢使用本程序");}System.out.println("程序结束");}/**通过throws声明抛出设计时异常*/public static void divide() throws Exception{Scanner input = new Scanner(System.in);System.out.println("计算开始");int i, j, res;System.out.println("请输入被除数");i = input.nextInt();System.out.println("请输入除数");j = input.nextInt();res = i / j;System.out.println(i + "/" + j + "=" + res);System.out.println("计算结束");}
}

       ②使用throw声明抛出异常

       除了系统自动抛出异常外,在编程过程中,有些问题是系统无法自动发现并解决的,如年龄不在正常范围之内,性别输入的不是“男”或“女”等,此时需要程序员而不是系统来自行抛出异常,把问题提交给调用者去解决。在Java语言中,可以使用throw关键字来自行抛出异常。

throw new Exception("message")
  • 如果 throw 语句抛出的异常是 Checked 异常,则该 throw 语句要么处于 try 块⾥,显式捕获该异常,要么放在⼀个带 throws 声明抛出的⽅法中,即把该异常交给该⽅法的调⽤者处理;
  • 如果 throw 语句抛出的异常是 Runtime 异常,则该语句⽆须放在 try 块⾥,也⽆须放在带 throws 声明抛出的⽅法中;程序既可以显式使⽤ try…catch来捕获并处理该异常,也可以完全不理会该异常,把该异常交给该⽅法调⽤者处理。

自行抛出Runtime 异常比自行抛出Checked 异常的灵活性更好。同样,抛出 Checked 异常则可以让编译器提醒程序员必须处理该异常。

1.2.2 自定义异常

       当JDK中的异常类型不能满足程序需求时,可以自定义异常类,使用自定义异常类一般有以下几个步骤:
       (1)定义异常类,并继承ExceptionRuntimeException
       (2)编写异常类的构造方法,向父类构造方法传入异常描述信息,并继承父类的其他实现方法;
       (3)实例化自定义异常对象,并在程序中使用throw抛出。

举例:实现以下需求

需求:写一个saveAge(int age)方法,在方法中对参数age进行判断,如果age<0或者>=150就认为年龄不
合法,如果年龄不合法,就给调用者抛出一个年龄非法异常。

分析:Java的API中是没有年龄非常这个异常的,所以我们可以自定义一个异常类,用来表示年龄非法异常,然后再方法中抛出自定义异常即可。


自定义一个AgeIllegalException异常类:

package swp.kaifamiao.codes.Java.d0830;/*** {class description}* 自定义异常类 AgeIllegalException* 继承 Exception 类* 用于表示年龄不合法的异常* @author SWP* @version 1.0.0*/
public class AgeIllegalException extends Exception {public AgeIllegalException() {}public AgeIllegalException(String message) {super(message);}
}
package swp.kaifamiao.codes.Java.d0830;/*** {class description}* 异常测试类 ExceptionTest* 用于测试自定义异常 AgeIllegalException* 当年龄不合法时抛出 AgeIllegalException 异常* 并在 main 方法中捕获并处理该异常* @author SWP* @version 1.0.0*/
public class ExceptionTest {public static void main(String[] args) {try {saveAge(225);System.out.println("saveAge2底层执行是成功的!");} catch (AgeIllegalException e) {e.printStackTrace();System.out.println("saveAge2底层执行是出现bug的!");}}// 在方法中对age进行判断,不合法则抛出AgeIllegalExceptionpublic static void saveAge(int age) throws AgeIllegalException {if (age > 0 && age < 150) {System.out.println("年龄被成功保存: " + age);} else {// 用一个异常对象封装这个问题// throw 抛出去这个异常对象throw new AgeIllegalException("age is illegal, your age is " + age);}}
}

运行效果:

在这里插入图片描述


1.2.3 异常链

异常链(Exception Chaining)是指在异常处理过程中,将当前的异常作为原因(cause)链接到另一个异常上。通过异常链,可以追踪异常发生的完整路径,并提供更多的上下文信息。

(1)定义testOne,testTwo,testThree方法,testTwo对testOne抛出的异常进行捕获,testThree对testTwo抛出的异常进行捕获:

package swp.kaifamiao.codes.Java.d0830;/*** {class description}** @author SWP* @version 1.0.0*/
public class TryDemoFive {public static void main(String[] args) {try {testThree();} catch (Exception e) {// 打印完整的异常信息e.printStackTrace();}}public static void testOne() throws MyException {throw new MyException("我是一个异常");}public static void testTwo() throws Exception {try {testOne();} catch (Exception e) {// 在新抛出的异常中添加原来的异常信息throw new Exception("我是新产生的异常1", e);}}public static void testThree() throws Exception {try {testTwo();} catch (Exception e) {// 在要抛出的对象中使用 initCause() 方法,添加上一个产生异常的信息Exception e2 = new Exception("我是新产生的异常2");e2.initCause(e);throw e2;}}
}

(2)定义MyException 类:

package swp.kaifamiao.codes.Java.d0830;/*** {class description}** @author SWP* @version 1.0.0*/
public class MyException extends Exception{public MyException(String message) {super(message);}
}

(3)运行效果:

在这里插入图片描述

2.思考

2.1 什么是异常?

	异常是指程序在运行过程中出现的非正常的情况,如用户输入错误、除数为零、文件不存在、数组下标越界等。

2.2 什么是运行时异常?

运行时异常(Runtime Exception)是指在程序运行期间可能抛出的异常,它们属于非受检异常(Unchecked Exception)。与受检异常(Checked Exception)相比,运行时异常在编译期不需要强制处理或声明。运行时异常通常表示程序的逻辑错误或者错误的使用方式,例如数组越界、空指针引用等。这些异常通常是由程序员编码时的错误导致的,但在编译时却无法确定是否会发生异常。

2.3 如何处理异常?

(1) 使用try、catch、finally来捕获和处理异常;
(2) 使用throw、throws 来抛出异常

2.4 什么是checked异常?什么是unchecked异常?

(1) 受检异常是在编译时强制要求处理的异常,需要使用 try-catch 块捕获并处理,或者在方法签名中使用 throws 关键字声明异常。
(2) 非受检异常是由程序逻辑错误或错误的使用方式引起的异常,在编译时不需要强制要求处理,但仍可以选择性地进行捕获和处理。

2.5 构造方法可以throws异常吗?对子类有影响吗?有什么影响?

可以在构造方法中抛出异常,与其他方法一样,构造方法也可以声明受检异常并通过 throws 关键字将其抛出。
如果在父类的构造方法中声明了受检异常,那么所有继承自该类的子类构造方法必须显示地处理这些异常或者在它们的方法签名中使用 throws 关键字将其抛出。否则编译会报错。

2.6 throw和throws的区别?

(1) 作⽤不同:throw⽤于程序员⾃⾏产⽣并抛出异常,throws⽤于声明该⽅法内抛出了异常。
(2) 使⽤位置不同:throw位于⽅法体内部,可以作为单独的语句使⽤;throws必须跟在⽅法参数列表的后⾯,不能单独使⽤。
(3) 内容不同:throw抛出⼀个异常对象,只能是⼀个;throws后⾯跟异常类,可以跟多个。

2.7 能否自己throw一个Error?

可以使用 throw 关键字抛出一个 Error 对象。在Java中,Error 是 Throwable 类的子类,它表示严重的错误和异常情况,通常由Java虚拟机(JVM)或底层系统引起,例如 OutOfMemoryError、StackOverflowError 等。与 Exception 不同,Error 通常表示不可恢复的错误或系统级故障,它们是无法预料和处理的,一般不建议程序员捕获和处理 Error。通常情况下,Error 会导致程序中止执行。

以下是一个示例,演示如何抛出一个 Error:

public class Example {public static void main(String[] args) {throw new Error("This is an error.");}
}

需要注意的是,抛出 Error 可能会导致程序异常终止,并且不应该被常规的异常处理机制所捕获和处理。因此,在编写代码时,通常不建议自己抛出 Error,除非确实具有特殊的需求或深入了解它们的影响。一般的异常处理应该针对 Exception 及其子类。

2.8 假如throw里面有return语句,catch里面有return语句,finally里面也有return语句,为什么最后返回的是finally里面的return语句?

在 Java 中,finally 块中的 return 语句会覆盖之前的 try 或 catch 块中的 return 语句,并决定最终的返回值。这是因为无论在 try、catch 或者 finally 块中执行了哪个 return 语句,都会直接结束整个方法并返回对应的值。根据 Java 语言规范,finally 块中的 return 语句会在方法返回之前执行,以确保在方法返回之前可以进行一些必要的清理工作。所以,在 finally 块中使用 return 语句将决定最终的返回值。

2.9 为啥要自定义异常?如何自定义异常?

当JDK中的异常类型不能满足程序需求时,可以自定义异常类,自定义异常在编程中非常有用,它能够提供更加准确和具体的异常信息,并能够满足特定业务需求。通过自定义异常,可以将代码中可能发生的异常情况进行分类和处理,使代码更加清晰、可读性更高,并且有助于调试和错误处理。
(1)定义异常类,并继承`Exception` 或`RuntimeException`;
(2)编写异常类的构造方法,向父类构造方法传入异常描述信息,并继承父类的其他实现方法;
(3)实例化自定义异常对象,并在程序中使用throw抛出。

相关文章:

【Java】基础入门 (十六)--- 异常

1.异常 1.1 异常概述 异常是指程序在运行过程中出现的非正常的情况&#xff0c;如用户输入错误、除数为零、文件不存在、数组下标越界等。由于异常情况再程序运行过程中是难以避免的&#xff0c;一个良好的应用程序除了满足基本功能要求外&#xff0c;还应具备预见并处理可能发…...

[javaWeb]Socket网络编程

网络编程&#xff1a;写一个应用程序,让这个程序可以使用网络通信。这里就需要调用传输层提供的 api。 Socket套接字 传输层提供协议&#xff0c;主要是两个: UDP和TCP 提供了两套不同的 api&#xff0c;这api也叫做socket api。 UDP和 TCP 特点对比&#xff1a; UDP: 无连…...

<MySon car=“宝马“ :money=“money“></MySon>有没有冒号

为什么car"宝马"没有&#xff1a; 但是 :money"money"就有&#xff1a; <script setup> import {ref} from vue import MySon from /components/MySon.vueconst money ref(100) </script><template><h3>father</h3><My…...

netty(三):NIO——多线程优化

NIO多线程优化 使用Boss线程来处理accepct事件使用Worker线程来处理读写事件&#xff0c;可以创建多个worker线程 package com.review;import lombok.extern.slf4j.Slf4j;import java.io.IOException; import java.net.InetSocketAddress; import java.nio.channels.*; impor…...

Linux操作系统--linux概述

1.Linux概述 Linux&#xff0c;全称GNU/Linux&#xff0c;是一种免费使用和自由传播的类UNIX操作系统&#xff08;OS&#xff09;。简单的说就是一种操作系统。在日常中常见的操作系统有一下三种: 2.linux起源和背景 (1).linux的诞生 linux操作系统是由李纳斯托瓦兹&#xf…...

数组中出现次数超过一半的数字

⭐️ 题目描述 &#x1f31f; OJ链接&#xff1a;数组中出现次数超过一半的数字 思路&#xff1a; 采用投票计数的方式&#xff0c;我们可以把每个数字都看成一次投票并且计数&#xff0c;那么最后剩下来的就是数组中数字出现次数最多的那一个。比如 { 1,2,3,2,2,2,5,4,2 } &a…...

网络优化工程师,你真的了解吗?

一、5G网络优化工程师到底是什么&#xff1f; 5G&#xff0c;就是我们通常所说的第五代移动通信标准&#xff0c;属于目前最热门的新技术趋势。随着2019年5G技术进入正式的商用阶段&#xff0c;拥有广阔的发展前景&#xff0c;备受瞩目。“5G工程师”这个词是一个概念词&#x…...

git 的常用命令

git是一个版本管理器&#xff0c;是程序员必备工具之一&#xff0c;其主分为三个区&#xff1a; 工作区&#xff1a; 暂存区&#xff1a; 仓库&#xff1a; 通过保持软件版本&#xff0c;分支&#xff0c;合并&#xff0c;等多种版本操作&#xff0c;使软件能在自己想要的版本…...

linux如何拷贝文件,删除多余的一级目录,用*号代替所有文件

加上*&#xff0c;代表目录下的所有文件 mv /home/user/dir1/dir1/* /home/user/dir1/可以使用mv命令的通配符来去掉一层目录。 例如&#xff0c;假设有一个名为/home/user/dir1/dir2/file.txt的文件&#xff0c;要将它移动到/home/user/dir2/目录下并去掉dir1目录&#xff0…...

springboot使用properties

一、方式1&#xff1a; 1.1.配置类&#xff1a; package cn.zyq.stater.config;import cn.zyq.stater.bean.User4; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework…...

Android中获取手机SIM卡的各种信息

通过以下工具类方法可以获取到手机SIM的各种信息数据&#xff01;&#xff01;&#xff01; package com.utils; import android.telephony.TelephonyManager; import com.baidu.platform.comapi.map.E; import org.json.JSONArray; import org.json.JSONObject; import java.…...

matlab 根据索引提取点云

目录 一、语法二、说明三、名称-值对应参数1、输入参数2、输出参数四、代码示例五、结果展示六、参考链接一、语法 ptCloudOut = select(ptCloud,indices) ptCloudOut = select(ptCloud,row,column...

蓝芯、四川邦辰面试(部分)

蓝芯 HTTP请求经过MQ异步处理后&#xff0c;怎样返回结果呢&#xff1f;grpc比起spring cloud的优缺点&#xff1f; 四川邦辰 SkyWalking的埋点具体是怎么操作的&#xff1f;newBing: SkyWalking支持两种埋点方式&#xff1a;自动埋点和手动埋点。自动埋点是指通过SkyWalking…...

openCV实战-系列教程13:文档扫描OCR识别下(图像轮廓/模版匹配)项目实战、源码解读

&#x1f9e1;&#x1f49b;&#x1f49a;&#x1f499;&#x1f49c;OpenCV实战系列总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在Pycharm中进行 本篇文章配套的代码资源已经上传 上篇内容&#xff1a; openCV实战-系列教程11&#xff1a;文档扫描OCR识别上&am…...

SpringBootWeb案例 Part 4

3. 修改员工 需求&#xff1a;修改员工信息 在进行修改员工信息的时候&#xff0c;我们首先先要根据员工的ID查询员工的信息用于页面回显展示&#xff0c;然后用户修改员工数据之后&#xff0c;点击保存按钮&#xff0c;就可以将修改的数据提交到服务端&#xff0c;保存到数据…...

什么是ChatGPT水印,ChatGPT生成的内容如何不被检测出来,原理什么?

太长不看版 1. 什么是ChatGPT水印&#xff1f; ChatGPT水印是AI以伪随机方式生成的独特tokens序列。该序列用来作为水印&#xff0c;以区分AI生成内容和人类原创内容。 2. 如何规避ChatGPT水印&#xff1f; 一种规避方法是使用其他AI模型改写ChatGPT生成的文本。这会破坏水…...

Android 6.0 Settings中添加虚拟键开关

添加系统默认键值 b/frameworks/base/packages/SettingsProvider/res/values/defaults.xml-212,4 212,7 <!-- Default for Settings.Secure.NFC_PAYMENT_COMPONENT --><string name"def_nfc_payment_component"></string><!--mh.modify 2019060…...

Yolov8小目标检测(12):动态稀疏注意力BiFormer | CVPR 2023

💡💡💡本文改进:动态稀疏注意力,cvpr2023。 BiFormer | 亲测在红外弱小目标检测涨点,map@0.5 从0.755提升至0.758 💡💡💡Yolo小目标检测,独家首发创新(原创),适用于Yolov5、Yolov7、Yolov8等各个Yolo系列,专栏文章提供每一步步骤和源码,带你轻松实现小…...

C# VS调试技巧

一.按照条件调试步骤 ①在需要代码执行的行打断点 ②触发此断点&#xff0c;让代码执行到此处 ③鼠标滑至在断点处&#xff0c;点击设置 ④设置断点条件&#xff0c;如下图所示 二、多线程调试技巧 ①在需要代码执行的行打断点 ②触发此断点&#xff0c;让代码执行到此处…...

VS的调试技巧

Visual Studiohttps://visualstudio.microsoft.com/zh-hans/vs/ 目录 1、什么是调试&#xff1f; 2、debug和release 3、调试 3.1、环境 3.2、 快捷键 3.2.1、F10和F11 3.2.2、ctrlF5 3.2.3、F5与F9 3.2.3.1、条件断点 3.3、监视和内存观察 3.3.1、监视 3.3.2、内存 …...

lucene国内镜像 极速下载

文章目录 国内镜像汇总-极速下载【JavaPub版】 lucene国内镜像 https://mirrors.cloud.tencent.com/apache/lucene/ 国内镜像汇总-极速下载【JavaPub版】...

Qt 信号槽连接方式

使用示例&#xff1a; QObject::connect(sender, SIGNAL(signal()), receiver, SLOT(slot()), Qt::AutoConnection); 目录 连接方式 一、AutoConnection 二、DirectConnection 三、QueuedConnection 四、BlockingQueuedConnection 五、UniqueConnection 总结 连接方式 "q…...

(线程池) 100行以内的简单线程池

文章目录 前言CodeThreadPool.hppmain.cpp 简单讲解所需头文件using成员变量构造析构添加任务PS测试效果 END 前言 线程池_百度百科 (baidu.com) 线程池是一种多线程处理形式&#xff0c;处理过程中将任务添加到队列&#xff0c;然后在创建线程后自动启动这些任务。线程池线程都…...

Mysql按姓氏从小到大排序的正确sql

一、前言 最近有个需求&#xff0c;要按姓氏从小到大查询数据。(姓名都是中文的) 写了一个sql&#xff1a; select a.* from mytable a order by substr(a.NAME,1,1) asc结果发现这样不行&#xff0c;排序是乱的。 二、解决办法 查询发现&#xff0c;如果mysql字符集是gbk的…...

【C++】详细介绍模版初阶—函数模版、类模板

文章目录 一、泛型编程二、函数模版2.1 函数模版概念2.2 函数模版格式2.3 函数模版的原理2.4 函数模版的实例化2.5 函数模版的匹配原则 三、类模版3.1 类模版定义3.2 类模版实例化 总结 ヾ(๑╹◡╹)&#xff89;" 人总要为过去的懒惰而付出代价ヾ(๑╹◡╹)&#xff89;&…...

BananaPi BPI-6202工业控制板全志科技A40i、24V DC输入、RS485接口

Banana Pi BPI-6202“嵌入式单板计算机”采用工业级全志A40i四核Cortex-A7处理器&#xff0c;工业温度范围和长生命周期&#xff0c;2GB DDR3&#xff0c;8GB eMMC闪存&#xff0c;M.2 SATA插槽等。 这是自 Banana Pi去年推出Banana Pi BPI-M2 Ultra SBC 和BPI-M2 Berry以来&am…...

Python - functools.partial设置回调函数处理异步任务基本使用

一. 前言 在Python中&#xff0c;回调函数是指在一个函数执行完成后&#xff0c;调用另一个函数的过程。通常情况下&#xff0c;回调函数作为参数传递给原始函数&#xff0c;原始函数在执行完自己的逻辑后&#xff0c;会自动调用回调函数并将结果作为参数传递给它。 二. 回调…...

phpspreadsheet导出excel自动获得列,数字下标

安装composer require phpoffice/phpspreadsheetuse PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Writer\Xlsx; use PhpOffice\PhpSpreadsheet\Style\Border;$spreadsheet new Spreadsheet(); $sheet $spreadsheet->getActiveSheet();//从65开&a…...

结算日-洛谷

结算日 - 洛谷 解释&#xff1a; 1.用sum记录贝西走到某位置的累计的总钱&#xff0c;flag标记是否有欠债还不了的情况&#xff08;1为有&#xff09;&#xff0c;ans记录步数。 2.若sum<0&#xff0c;则欠债无法还&#xff0c;flag标记为1&#xff0c;并记录下此刻的位置…...

Android Native Code开发学习(一)环境配置

Android Native Code开发学习&#xff08;一&#xff09; 本教程为native code学习笔记&#xff0c;希望能够帮到有需要的人 我的电脑系统为ubuntu 22.04&#xff0c;当然windows也是可以的&#xff0c;区别不大 环境配置 首先我们新建一个native C项目 然后我们下载NDK和C…...

Python GUI应用程序开发之wxPython使用详解

概要 wxPython是一个强大的跨平台GUI工具包&#xff0c;它使用Python编程语言开发&#xff0c;提供了丰富的控件功能。如果你是一名Python开发者&#xff0c;而且希望创建一个功能齐全的桌面应用程序&#xff0c;那么wxPython是一个值得考虑的选择。 什么是wxPython wxPython…...

【电子学会真题】青少年软件编程(C语言)等级考试试卷(一级) 2021年9月

试卷下载 pdf 格式下载&#xff1a;https://download.csdn.net/download/SHUTIAN2010/88255543 word 格式下载&#xff1a;https://download.csdn.net/download/SHUTIAN2010/88255558 1&#xff0e;计算乘积 一行两个整数a、b&#xff0c;以空格分隔。&#xff08;0&#xff1…...

学习完毕JavaSE的感想

今天&#xff0c;把Java复习完毕了&#xff0c;之前学习的时候&#xff0c;学校里学的总是有限的 &#xff0c;自己上手操作之后才发觉差的很多&#xff0c;部署服务器发现要学操作系统&#xff0c;学完了web基础 &#xff0c;又发现还得学前后端分离vue react这些&#xff0c;…...

FastJson的学习

fastjson是阿里巴巴的开源JSON解析库&#xff0c;它可以解析JSON格式的字符串&#xff0c;支持将Java Bean序列化为JSON字符串&#xff0c;也可以从JSON字符串反序列化到JavaBean。 fastjson是json的序列化和反序列化 一、添加依赖 <dependency><groupId>com.ali…...

python scrapy框架

scrapy概述 Scrapy&#xff0c;Python开发的一个快速、高层次的屏幕抓取和web抓取框架&#xff0c;用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛&#xff0c;可以用于数据挖掘、监测和自动化测试 scrapy安装 pip install scrapy -i https://pypi.tuna.tsinghua…...

滑动窗口系列3-Leetcode134题加油站

在一条环路上有 n 个加油站&#xff0c;其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车&#xff0c;从第 i 个加油站开往第 i1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发&#xff0c;开始时油箱为空。 给定两个整数数组 gas 和 cost &…...

LOIC(low orbit ion cannon)

前言 重要的话说三遍&#xff1a; 该程序仅用于学习用途&#xff0c;请勿用于非法行为上&#xff01;&#xff01;&#xff01; 该程序仅用于学习用途&#xff0c;请勿用于非法行为上&#xff01;&#xff01;&#xff01; 该程序仅用于学习用途&#xff0c;请勿用于非法行为上…...

从格灵深瞳中报稳定盈利,看AI公司的核心竞争力

2023年过半&#xff0c;人工智能产业话题不断。大模型和AIGC掀起热潮&#xff0c;让众多AI公司开始进入新一轮竞赛。但与此同时&#xff0c;不少AI公司依然处于亏损中&#xff0c;研发投入和商业产出难以实现正循环。如何形成健康的商业模式&#xff0c;仍是一大挑战。 AI公司…...

理解 Databend Cluster key 原理及使用

Databend Cluster Key 是指 Databend 可以按声明的 key 排序存储&#xff0c;主要用于用户对时间响应比较高&#xff0c;同时愿意为这个 cluster key 进行额排序操作的用户。 Databend 只支持一个 Cluster key&#xff0c;Cluster key中可以包含多列及表达式。 基本语法 -- 语…...

C++day3(类、this指针、类中的特殊成员函数)

一、Xmind整理&#xff1a; 二、上课笔记整理&#xff1a; 1.类的应用实例 #include <iostream> using namespace std;class Person { private:string name; public:int age;int high;void set_name(string n); //在类内声明函数void show(){cout << "na…...

Qt中的配置文件:实现个性化应用程序配置与保存加载

一、前言 在现代软件开发中,用户对于应用程序的个性化配置和设置变得越来越重要。为了满足用户需求并提供更好的用户体验,开发人员常常需要实现一种机制,以便在每次启动应用程序时能够记住用户上次的配置。这样用户就可以方便地恢复到他们熟悉的环境,无需重新进行所有设置…...

Navicat激活时出现rsa public key not find错误

Navicat激活时出现rsa public key not find错误 在激活时&#xff0c;先不打开应用&#xff0c;先用管理员身份打开注册机Navicat_Keygen_Patch_v5.6_By_DFoX.exe&#xff0c;Navicat v15——>MySql——>Simplified Chinese——>Patch&#xff0c;执行完这些步骤之后…...

FFmpeg5.0源码阅读——URLContext和URLProtocol

摘要&#xff1a;本文描述FFmpeg中URLContext和URLProtocal的实现。   关键字&#xff1a;URLContext、URLProtocal FFmpeg中URLProtocol是具体的协议的抽象&#xff0c;其中定义了对应协议的抽象&#xff0c;其中包含了具体协议的操作函数指针。而URLContext是对协议操作的抽…...

Qt的输出

目录 基本分类 C风格输出 C风格 可以抑制输出 方法一 方法二 在Qt中进行log输出, 一般不使用c中的printf, 也不是使用C中的cout, Qt框架提供了专门用于日志输出的类, 头文件名为 QDebug。 基本分类 qDebug&#xff1a;调试信息提示 qInfo &#xff1a;输出信息 qWarnin…...

长胜证券:久违普涨再现 大盘回升有望加速

获得利好支撑后&#xff0c;大盘开始继续反弹。 沪指周二一路震动反弹&#xff0c;站上3100点整数关口后继续上攻并打破10日均线限制。深成指同样低开高走&#xff0c;全日体现明显强于沪指。 到收盘&#xff0c;沪指报收3135.89点&#xff0c;上涨1.2%&#xff1b;深成指报收…...

WPF .NET 7.0学习整理(一)

参照文档进行不系统的整理&#xff0c;看到那写到那O.o 依赖属性 DependencyProperty&#xff1a;使用专有字段支持属性的标准模式的替代方法。 DependencyObject&#xff1a;定义了可以注册和拥有依赖属性的基类。 public static readonly DependencyProperty IsSpinningPr…...

数据分析简介

判断采集数据的有效性和进行数据校准是数据处理中重要的步骤。以下是一些常见的方法和步骤可以帮助你进行数据有效性的判断和数据校准&#xff1a; 数据有效性判断: 数据范围&#xff1a;检查数据是否落在合理的范围内。根据具体情况&#xff0c;确定真实数据的上下限&#xff…...

解读未知:文本识别算法的突破与实际应用

解读未知&#xff1a;文本识别算法的突破与实际应用 1.文本识别算法理论 背景介绍 文本识别是OCR&#xff08;Optical Character Recognition&#xff09;的一个子任务&#xff0c;其任务为识别一个固定区域的的文本内容。在OCR的两阶段方法里&#xff0c;它接在文本检测后面…...

[第七届蓝帽杯全国大学生网络安全技能大赛 蓝帽杯 2023]——Web方向部分题 详细Writeup

Web LovePHP 你真的熟悉PHP吗&#xff1f; 源码如下 <?php class Saferman{public $check True;public function __destruct(){if($this->check True){file($_GET[secret]);}}public function __wakeup(){$this->checkFalse;} } if(isset($_GET[my_secret.flag]…...

el-backtop返回顶部的使用

2023.8.26今天我学习了如何使用el-backtop组件进行返回页面顶部的效果&#xff0c;效果如&#xff1a; <el-backtop class"el-backtop"style"right: 20px; bottom: 150px;"><i class"el-icon-caret-top"></i></el-backtop&…...