Java 内部类与异常类
目录
1.Java 内部类
2.Java 匿名类
1. 匿名类继承一个父类
2. 匿名类实现一个接口
3.Java 异常类
4.Java 异常的分类
1. Throwable类
2. Error类
3. Exception类
5.Java 常见的异常
1. NullPointerException(空指针异常)
2. ClassCastException(类转换异常)
3. IndexOutOfBoundsException(数组下标越界异常)
4. IllegalAccessException(访问权限异常)
5. IOException(输入输出异常)
6.Java 处理异常
1.try…catch
2.try…catch…finally
3.throws
7.Java 自定义异常类
8.Java 断言语句
1.断言语句的语法格式
2.作用条件
3.启用与关闭断言语句
Java内部类与异常类这一章主要介绍Java内部类、Java匿名类、Java异常类、Java异常的分类、Java常见的异常、Java处理异常1.try…catch、Java处理异常2.try…catch…finally、Java处理异常3.throws、Java自定义异常类、Java try…catch…finally语句里return语句的执行顺序以及Java断言语句。通过以往的学习,我们已经知道,类可以有两种重要的成员:成员变量和方法,实际上,类还有一种成员:内部类。在一个类中定义另一个类,我们把这样的类称作内部类,包含内部类的类称作内部类的外嵌类。
1.Java 内部类
通过以往的学习,我们已经知道,类可以有两种重要的成员:成员变量和方法,实际上,类还有一种成员:内部类。在一个类中定义另一个类,我们把这样的类称作内部类,包含内部类的类称作内部类的外嵌类。
内部类和外嵌类之间的关系:
1)内部类的外嵌类的成员变量在内部类中仍然有效,内部类中的方法也可以调用外嵌类中的方法。
2)内部类的类体中不可以声明类变量和类方法,外嵌类的类体中可以用内部类声明对象作为外嵌类的成员。
3)内部类仅供它的外嵌类使用,其他类不可以用某个类的内部类声明对象。
因为内部类的外嵌类的成员变量在内部类中有效,所以使得内部类和外嵌类的交互十分方便。
例如:
class RedCowForm {static String formName;RedCow cow; //内部类声明对象RedCowForm() {}RedCowForm(String s){cow = new RedCow(88,66,2000);formName = s;}public void showCowMess() {cow.speak();}class RedCow{ //内部类的声明String cowName = "小牛";int height,weight,price;RedCow(int h,int w,int p) {height = h;weight = w;price = p;}void speak() {System.out.println("我是"+cowName+",身高"+height+"cm,体重"+weight+"kg,生活在"+formName);}}
}
public class Main {public static void main(String[] args) {RedCowForm form = new RedCowForm("csdn农场");form.showCowMess();form.cow.speak();}
}
运行结果如下:
我是小牛,身高88cm,体重66kg,生活在csdn农场
我是小牛,身高88cm,体重66kg,生活在csdn农场
注意:Java编译器生成的内部类的字节码文件的名字和平常的类的名字不同,内部类对应的字节码文件的名字格式是“外嵌类名$内部类名”。例如:上面例子中内部类的字节码文件的名字应该是RedCowForm$RedCow.class。
内部类可以被修饰为static内部类,static内部类是外嵌类中的一种静态数据类型,程序可以在其他类中使用static内部类来创建对象,但是,static内部类不能操作外嵌类中的实例成员变量。
2.Java 匿名类
上一节我们学习了内部类,这一节我们来学习匿名类。那什么叫做匿名类呢?顾名思义,匿名类就是不能有名字的类,它们不能被引用,只能在创建时用new语句来声明它们。
使用匿名内部类我们必须要继承一个父类或者实现一个接口。
需要注意的是:
- 匿名内部类中是不能定义构造函数的。
- 匿名内部类中不能存在任何的静态成员变量和静态方法。
- 匿名内部类为局部内部类,所以局部内部类的所有限制同样对匿名内部类生效。
匿名类语法格式如下:
class outerClass {// 定义一个匿名类object1 = new Type(parameterList) {// 匿名类代码};
}
注意:因为匿名类是表达式形式定义的,所以末尾以分号;来结束。
1. 匿名类继承一个父类
例如:
class Dotcpp {public void display() {System.out.println("在Dotcpp类内部");}
}
class AnonymousDemo {public void createClass() {//创建的匿名类继承了Dotcpp类Dotcpp d1 = new Dotcpp() {public void display() {System.out.println("在匿名类内部");}};d1.display();}
}
class Main {public static void main(String[] args) {AnonymousDemo an = new AnonymousDemo();an.createClass();}
}
运行结果如下:
在匿名类内部
2. 匿名类实现一个接口
例如:
interface Dotcpp {public void display();
}
class AnonymousDemo {public void createClass() {//创建的匿名类实现了Dotcpp接口Dotcpp d1 = new Dotcpp() {public void display() {System.out.println("在匿名类内部");}};d1.display();}
}
class Main {public static void main(String[] args) {AnonymousDemo an = new AnonymousDemo();an.createClass();}
}
运行结果如下:
在匿名类内部
3.Java 异常类
什么叫做异常?所谓异常就是程序运行时可能出现的一些错误,比如试图打开一个根本不存在的文件等,异常处理将会改变程序的控制流程,让程序有机会对错误做出处理。所以,这一节我们将初步了解异常。
Java使用throw关键字抛出一个Exception子类的实例表示异常发生。
例如:java.lang包中的Integer类调用其类方法public static int parseInt(String s)可以将“数字”格式的字符串,比如“123456”,转化为int型数据,但是,当试图将字符串“dot123”转换成数字时,代码如下:
int number = Integer.parseInt("dot123");
方法parseInt()在执行过程中就会使用throw关键字抛出一个NumberFormatException对象,此时也就意味着程序运行出现NumberFormatException异常。
Java允许定义方法时声明该方法调用过程中可能出现的异常,即允许方法调用过程中抛出异常对象,终止当前方法的继续执行。
异常对象可以调用如下方法得到或输出有关异常的信息:
public String getMessage(); //得到异常的详细信息
public void printStackTrace(); //得到堆栈跟踪输出(企业一般不允许输出此项,可以得到异常的全部信息)
public String toString(); //以文本形式表示以上信息
getCause(); //得到异常原因
4.Java 异常的分类
1. Throwable类
什么是Throwable类?Throwable类就是Java语言中所有错误或异常的超类,是对所有异常进行整合的一个普通类,其作用是提取保存在堆栈中的错误信息。
2. Error类
Error类是Throwable类的子类,包括系统异常、虚拟机异常等用户无法阻止的问题。
3. Exception类
Exception类也是Throwable类的子类,它是程序本身可以处理的异常,分为运行时异常(checked)和非运行时异常(unchecked)。其中运行时异常可处理,也可不处理;非运行时异常必须处理。
运行时异常
运行时异常都是RuntimeException类及其子类异常,比如NullPointerException、IndexOutOfBoundsException等,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。
当出现RuntimeException的时候,我们可以不处理,一般由虚拟机接管。
出现运行时异常后,如果没有捕获处理这个异常(即没有catch),系统会把异常一直往上层抛,一直到最上层,如果是多线程就由Thread.run()抛出,如果是单线程就被main()抛出。抛出之后,如果是线程,这个线程也就退出了。如果是主程序抛出的异常,那么这整个程序也就退出了。运行时异常是Exception类的子类,也有一般异常的特点,就是可以被catch块处理。只不过往往我们不对它处理,也就是说,你如果不对运行时异常进行处理,那么出现运行时异常之后,要么是线程中止,要么是主程序终止。
如果不想终止,则必须捕获所有的运行时异常,决不让这个处理线程退出。队列里面出现异常数据,正常的处理应该是把异常数据舍弃,然后记录日志。不应该因为异常数据的存在而影响下面对正常数据的处理。
非运行时异常
非运行时异常是RuntimeException以外的异常,类型上都属于Exception类及其子类。比如:IOException、SQLException等以及用户自定义的Exception异常。对于这种异常,Java编译器强制要求我们必需对出现的这些异常进行catch并处理,否则程序就不能编译通过。所以,面对这种异常不管我们是否愿意,都要写一大堆catch块去处理可能的异常。
5.Java 常见的异常
除了上一节提到的运行时异常和非运行时异常,还有很多常见的异常,比如:
算术异常:ArithmeticExecption
空指针异常:NullPointerException
类转换异常:ClassCastException
数组负下标异常:NegativeArrayException
数组下标越界异常:IndexOutOfBoundsException
违背安全原则异常:SecturityException
访问权限异常:IllegalAccessException
文件已结束异常:EOFException
文件未找到异常:FileNotFoundException
字符串转换为数字异常:NumberFormatException
操作数据库异常:SQLException
输入输出异常:IOException
方法未找到异常:NoSuchMethodException
1. NullPointerException(空指针异常)
空指针异常在编程时也经常遇到,该异常的出现意味着“程序遇上了空指针”,简单地说就是调用了未经初始化的对象或者是不存在的对象,这个错误经常出现在调用数组的操作中,一般是刚开始学编程的人常犯的错误,即把数组的初始化和数组元素的初始化混淆了。
数组的初始化是对数组分配需要的空间,而初始化后的数组,其中的元素并没有实例化,依然是空的,所以如果要调用的话,需要对每个元素都进行初始化。
2. ClassCastException(类转换异常)
数据类型转换错误,比如:
String temp="abc";
如果设为int temp就会报错,因为它们类型不一样,但是设为object temp就可以,因为object是它们的父类。
3. IndexOutOfBoundsException(数组下标越界异常)
我们在操作数组的时候经常会遇到这个异常,该异常的意思是“数组下标越界”,现在程序中大多都有对数组的操作,因此在调用数组的时候一定要认真检查,看自己调用的下标是不是超出了数组的范围。一般来说,直接用常数当下标调用不太容易出现这样的错误,但用变量当下标调用就容易出现这样的错误,还有一种情况,是程序中定义的数组的长度是通过某些特定方法决定的,不是事先声明的,这个时候,最好先查看一下数组的长度,以免出现这个异常。
4. IllegalAccessException(访问权限异常)
该异常的解释是“没有访问权限”,当应用程序要调用一个类,但当前的方法对该类没有访问权限便会出现该异常,在程序中使用package的情况下要注意这个异常。
5. IOException(输入输出异常)
一般读写文件会出现这个异常,比如你想从磁盘上读一个文件到你写的程序,如果硬盘上没有这文件,Java虚拟机就会报这个异常。
6.Java 处理异常
1.try…catch
我们可以使用try…catch语句来处理异常,将可能出现的异常操作放在try…catch语句的try部分,一旦try部分抛出异常对象,或调用某个可能抛出异常对象的方法,并且该方法抛出了异常对象,那么try部分将立刻结束执行,转向执行相应的catch部分。所以,程序可以将发生异常后的处理放在catch部分。
try…catch语句可以由几个catch组成,分别处理发生的相应异常。
try…catch语句的格式如下:
try {//包含可能发生异常的语句
}
catch(ExceptionSubClass1 e) {…
}
catch(ExceptionSubClass2 e) {…
}
注意:各个catch参数中的异常类都是Exceptin的某个子类,表明try部分可能发生的异常,这些子类之间不能有父子关系,否则只保留一个含有父类参数的catch即可。
2.try…catch…finally
我们处理异常还可以使用try…catch…finally语句,当程序执行到错误代码的地方,系统会抛出一个异常对象,程序转入catch块进行逐个匹配,如果匹配成功,程序则执行catch代码,如果匹配失败,程序则还给Java虚拟机处理。
try…catch…finally语句的格式如下:
try {//包含可能发生异常的语句
}
catch(异常类名 异常对象) {//异常处理的代码
}
finally {//一定执行的代码
}
注意事项:
- try块代码尽量越少越好。
- 一旦try块代码中出现异常,无论try块后面有多少行代码,都不会被执行。
- catch块中异常参数匹配同样满足多态Exception e = new ArithmeticException("/by zero");
- try块只能够有一个,catch块可以有多个,try可以和catch组合,try可以和finally组合,try可以和catch和finally组合。
- 一般会把Exception作为catch的参数类型放在异常处理格式的最后。
- Execption作为父类异常参数只能够出现在异常的最后面,先子类后父类。
- finally修饰的代码块一定会被执行,除非在执行到finally之前程序异常退出或者调用了系统退出的方法。
- 在try语句中,在执行return语句时,要返回的结果已经准备好了,就在此时,程序转到finally执行了。在转去之前,try中先把要返回的结果存放到不同于x的局部变量中去,执行完finally之后,在从中取出返回结果,因此,即使finally中对变量x进行了改变,但是不会影响返回结果,应该使用栈保存返回值。
3.throws
除了可以使用try…catch语句和try…catch…finally语句处理异常以外,还可以使用throws处理异常。
在开发中,有的时候我们没有权限处理该异常,我们不知道该如何处理异常,或者不想处理异常,这种情况下我们可以将异常抛出,抛出给调用者处理。
throws处理异常的格式:
[访问权限修饰符] 返回值类型 方法名(参数列表) [throws 异常类名]{方法体;[return 返回值];
}
注意事项:
1)抛出异常的处理方法千万不能抛出给JVM处理[主方法]。
2)如果一个方法抛出的是一个编译时异常,那么调用者必须处理。
3)如果一个方法抛出的是一个运行时异常,可以处理也可以不处理,建议处理,提高程序的安全性。
4)子类重写的方法声明的异常不能够被扩大。
5)throws表示一种异常发生的可能性,可以声明多个异常类。
throw异常处理方法:
格式:
throw 异常对象;
注意:我们可以发现其实throw和throws的作用都是将异常抛出给调用者或者虚拟机来处理,但是两者有个根本区别就是throw抛出的是异常对象,而throws声明的是异常类。
throw和throws区别:
1)throw抛出的是异常对象,throws声明的是异常类。
2)throw只能够抛出一个对象,throws可以声明多个异常类。
3)throw表示异常已经发生,throws是一种异常的可能性。
4)throw在方法体内出现,throws在方法的声明上。5
7.Java 自定义异常类
我们要知道,使用Java内置的异常类可以描述在编程时的大部分异常,除此之外,我们在编程时还可以扩展Exception类定义自己的异常类,然后根据程序的需要来规定哪些方法产生这样的异常。
自定义异常类的格式:
public class 异常类名 extends Exception {无参构造带参构造
}
例如:
public class DotcppException extends Exception {//无参构造public DotcppException() {} //带参构造public DotcppException(String message) {//异常错误消息super(message);}
}
一个方法在声明时可以使用throws关键字声明要产生的若干个异常,并在该方法的方法体中具体给出产生异常的操作,即用相应的异常类创建对象,并使用throw关键字抛出该异常对象,导致该方法结束执行。程序必须在try-catch块语句中调用可能发生异常的方法,其中catch的作用就是捕获throw关键字抛出的异常对象。
注意:throw是Java的关键字,该关键字的作用就是抛出异常,throw和throws是两个不同的关键字。
总结:
(1)处理运行时异常的时候,采用逻辑去规避的同时辅助try-catch去处理;
(2)在多重catch块的后面,可以加个catch(Exception)来处理可能遗漏的异常;
(3)对于不确定的代码,也可以用try-catch处理潜在的异常;
(4)尽量去处理异常,切记只是简单地调用printStackTrace()去输出打印;
(5)具体如何去处理异常,要根据不同的业务需求和异常的类型去处理;
(6)尽量添加finally语句去释放占用的资源。
8.Java 断言语句
如果程序不准备通过捕获异常来处理的错误,这时该怎么办呢?我们可以通过断言语句来解决。
断言语句在调试代码阶段非常有用,且一般用于程序不准备通过捕获异常来处理的错误。
例如:当发生某个错误时,比如,当账号交易时,支出金额为正数或收入金额为负数,此时要求程序必须立即停止执行。在调试代码阶段让断言语句发挥作用,这样就可以发现一些致命的错误,当程序正式运行时就可以关闭断言语句,但仍把断言语句保留在源代码中,如果以后应用程序又需要调试,可以重新启用断言语句。
1.断言语句的语法格式
我们使用关键字assert声明一条断言语句,断言语句有以下两种格式:
assert booleanExpression; //求值为boolean类型的表达式
assert booleanExpression:messageException; //求值为字符串类型的表达式
2.作用条件
1)booleanExpression
当值为true时,程序从断言语句处继续执行。
当值为false时,程序从断言语句处停止执行。
2)booleanExpression:messageExpception
当值为true时,程序从断言语句处继续执行。
当值为false时,程序从断言语句处停止执行,并输出messageException表达式的值,提示用户出现了怎样的问题。
例如,对于断言语句:
assert i >= 0;
如果表达式i >= 0的值为true,程序继续执行;如果表达式i >= 0的值为false,程序立刻结束执行。
3.启用与关闭断言语句
当使用Java解释器直接运行应用程序时,默认地关闭断言语句,在调试程序时可以使用-ea启用断言语句,例如:
java -ea mainclass
例如:
public class Main {public static void main(String[] args) {int [] score = {-120,98,96,94,92};int sum = 0;for(int number:score){ //数组用for遍历assert number>=0:"负数不能是成绩";sum = sum+number;}System.out.println("总成绩:"+sum);}
}
运行结果如下:
总成绩:260
相关文章:
Java 内部类与异常类
目录 1.Java 内部类 2.Java 匿名类 1. 匿名类继承一个父类 2. 匿名类实现一个接口 3.Java 异常类 4.Java 异常的分类 1. Throwable类 2. Error类 3. Exception类 5.Java 常见的异常 1. NullPointerException(空指针异常) 2. ClassCastException(类转换异常) 3. In…...
Matlab仿真径向受压圆盘光弹图像
Matlab仿真径向受压圆盘光弹图像-十步相移法 主要参数 % 定义圆盘参数 R 15; % 圆盘半径,单位:mm h 5; % 圆盘厚度,单位:mm P 300; % 径向受压载荷大小,单位ÿ…...
补偿电阻对ota零极点的影响
本文内容主要是关于补偿电阻对零极点产生的影响。 1.极点分析 该补偿电阻并不会影响在输出端的主极点,受影响的主要是镜像极点。 这里我们可以先单看电流镜部分,这个补偿电阻的作用在于将极点推向原来的两倍,从而达到增加带宽的目的[1]。 …...
C++单例模式跨DLL调用问题梳理
问题案例: 假设有这样一个单例模式的代码 //test.h header class Test { public:static Test &instance() {static Test ins;return ins;}void foo(); };void testFoo();//test.cpp source #include "test.h"void Test::foo() {printf("%p\n&q…...
Linux高并发服务器开发 第十天(man手册 系统调用 文件打开关闭 文件创建权限)
目录 1.文件IO 1.1man 手册 1.2系统调用 1.3操作函数 1.3.1打开文件 1.3.2关闭文件 1.4文件创建权限 1.文件IO 1.1man 手册 man man 可以查看。man手册共 9 卷。 可执行程序、shell命令。系统调用函数。(内核提供的函数)库函数第 5 卷。查看特殊…...
用CRD定义未来:解锁机器学习平台的无限可能
Kubernetes CustomResourceDefinition(CRD)详解 一、CRD 概述 CRD(CustomResourceDefinition,自定义资源定义)是 Kubernetes 提供的一种机制,用于用户自定义新的资源类型。CRD 扩展了 Kubernetes API&…...
A second-price auction
第二价格密封拍卖(A second - price auction)是一种常见的拍卖形式,以下是一个用收益矩阵(Payoff Matrix)来说明第二价格密封拍卖的例子: 假设有三个竞拍者:A、B、C,他们对一件古董…...
MacBook_Xcode_Swift雨燕
Swift Swift Swift Swift是苹果公司开发的现代化编程语言, 专为Apple平台设计。其简洁语法、类型安全、Optionals处理、Playgrounds交互式环境、泛型编程、协议与扩展、闭包功能、枚举与关联值、结构体与类的高效内存管理、异步编程的async/await语法、Swift Packa…...
力扣面试题 - 08.07.无重复字符串的排列组合 C语言解法 回溯递归dfs深度优先
题目: 无重复字符串的排列组合。编写一种方法,计算某字符串的所有排列组合,字符串每个字符均不相同。 示例 1: 输入:S "qwe"输出:["qwe", "qew", "wqe", "…...
数值分析速成复习笔记
请确保你有10hour的有效学习时间,保你拿90 证明部分 编程部分...
1.07 标准IO
1.思维导图 2.先编写以下结构体 struct Student { char name[20]; double math; double chinese; double english; double physical; double chemical; double…...
单片机实现模式转换
[任务] 要求通过单片机实现以下功能: 1.单片机有三种工作模式(定义全局变量MM表示模式,MM1,2,3表示三种不同的模式) LED控制模式 风扇控制模式 蜂鸣器控制模式 2.可以在某一个模式下通过拓展板KEY1按键控制设备 (按…...
JVM实战—OOM的定位和解决
1.如何对系统的OOM异常进行监控和报警 (1)最佳的解决方案 最佳的OOM监控方案就是:建立一套监控平台,比如搭建Zabbix、Open-Falcon之类的监控平台。如果有监控平台,就可以接入系统异常的监控和报警,可以设置当系统出现OOM异常&…...
GolangWeb开发- net/http模块
文章目录 Golang开发-案例整理汇总一、net/http介绍二、HTTP客户端Get请求Post请求三、HTTP服务端总结Golang开发经典案例,点击下方链接 Golang开发-案例整理汇总 一、net/http介绍 Go语言内置的net/http包提供了HTTP客户端和服务端的实现。 文档链接: https://pkg.go.dev/n…...
算法:线性查找
线性查找算法是一种简单的查找算法,用于在一个数组或列表中查找一个特定的元素。它从数组的第一个元素开始,逐个检查每个元素,直到找到所需的元素或搜索完整个数组。线性查找的时间复杂度为O(n),其中n是数组中的元素数量。 实现原理 从列表的第一个元素开始,逐个检查每个…...
基于 Boost.Asio 和 Boost.Beast 的异步 HTTP 服务器(学习记录)
已完成功能: 支持 GET 和 POST 请求的路由与回调处理。 解析URL请求。 单例模式 管理核心业务逻辑。 异步 I/O 技术和 定时器 控制超时。 通过回调函数注册机制,可以灵活地为不同的 URL 路由注册处理函数。 1. 项目背景 1.1 项目简介 本项目是一个基于…...
『SQLite』常见函数的使用
摘要:主要讲解SQLite中的常见函数,有聚合函数、数字函数、字符串函数、日期函数、类型转换函数等。 主要函数 聚合函数:count()、sum()、avg()、min()、max()字符串函数:length()、upper()、lower()、substr()、trim()日期和时间…...
win下搭建elk并集成springboot
一、ELK 是什么? ELK 实际上是三个工具的集合,Elasticsearch Logstash Kibana,这三个工具组合形成了一套实用、易用的监控架构,很多公司利用它来搭建可视化的海量日志分析平台。 ElasticSearch ElasticSearch 是一个基于 Lucen…...
ABAQUS柱状晶模型基于泰森多边形建模
建立柱状晶几何模型进行有限元分析有助于深入理解材料的微观结构与宏观性能之间的关系,为材料设计、制造工艺优化及失效预测提供了强有力的工具。本案例介绍采用AutoCAD基于泰森多边形算法生成柱状晶三维几何部件,并导入Abaqus有限元软件内建立包含晶粒及…...
MySQL InnoDB常用锁总结(行锁、间隙锁、临键锁、表锁)
在高并发数据库系统中,锁机制是保障数据一致性和事务隔离性的重要手段。MySQL 的 InnoDB 存储引擎提供了多种锁类型,包括行锁、间隙锁、临键锁和表锁。本文将详细介绍这些锁的原理、使用场景及其注意事项,并结合案例进行说明。 1. 表锁 概念…...
Flink系统知识讲解之:如何识别反压的源头
Flink系统知识之:如何识别反压的源头 什么是反压 Ufuk Celebi 在一篇古老但仍然准确的文章中对此做了很好的解释。如果您不熟悉这个概念,强烈推荐您阅读这篇文章。如果想更深入、更低层次地了解该主题以及 Flink 网络协议栈的工作原理,这里有…...
UE5行为树浅析
Tree 什么是树? 树是由节点或顶点和边组成的数据结构,没有任何循环。没有节点的树称为空树或空树。 非空的树由根节点和可能形成层次结构的多层附加节点组成。 树是一种数据结构树由点和有向边组成树是连通的,可达的树有执行顺序树没有环 …...
大模型测试-数飞机个数
时间是2025年1月7日,测试下各大网页端大模型的多模态识图能力。 测试题目 图片 问题 标记一下图里的飞机,并数一下飞机的个数 测试结果 千问qwen 在这张图片中,我可以看到总共12架飞机。以下是它们的位置标记:左上角跑道上有…...
Ubuntu挂载Windows 磁盘,双系统
首先我们需要在终端输入这个命令,来查看磁盘分配情况 lsblk -f 找到需要挂载的磁盘,检查其类型( 我的/dev/nvme2n1p1类型是ntfs,名字叫3500winData) 然后新建一个挂载磁盘的目录,我的是/media/zeqi/3500wi…...
快速上手:采用Let‘sEncrypt免费SSL证书配置网站Https (示例环境:Centos7.9+Nginx+Let‘sEncrypt)
1 关于Let’s Encrypt与Cerbot DNS验证 Let’s Encrypt 是一个提供 免费证书 的 认证机构。 Cerbot 是 Let’s Encrypt 提供的一个工具,用于自动化生成、验证和续订证书。 DNS验证是 Cerbot 支持的验证方式之一。相比 HTTP 验证或 TLS-ALPN 验证,DNS …...
【项目】修改远程仓库地址、报错jdk
一、修改远程仓库地址 进入你刚刚克隆到本地的仓库目录,执行以下命令来修改远程仓库的 URL,将其指向你自己的新仓库: cd 原仓库名 git remote set-url origin <你自己的新仓库的 Git 地址>二、运行报错 多数jdk版本问题 三、 知识图…...
.NET体系架构
引言 .NET是由微软开发的一个广泛应用的开发平台,旨在帮助开发者构建各种类型的应用程序,包括桌面应用、Web应用、移动应用和云服务。最初,.NET平台的构建主要集中在Windows环境上,但随着.NET Core和随后.NET 5及以上版本的推出&…...
MTK平台-- 无线AP隔离功能
前言: 无线AP上大都有一个选项:启用该功能后,连接到同一AP的无线终端之间不能互相通信,但该功能并不限制无线终端和有线终端之间的通信。 Hostapd参数ap_isolate,用于控制AP隔离,但hostapd本身并不实现这一功能,只是将该参数通过nl80211传递给mac80211,由mac80211来实…...
初学stm32 --- 电源监控
目录 STM32 电源监控介绍 上电/掉电复位POR/PDR(F1) 可编程电压检测器(PVD)(F1) PVD相关寄存器介绍(F1) 电源控制寄存器 PWR_CR 电源控制/状态寄存器 PWR_CSR PVD相关HAL库驱动介绍 PVD的使用步骤 …...
小程序组件 —— 28 组件案例 - 推荐商品区域 - 实现结构样式
这一节目标是实现底部推荐商品的结构和样式,由于这里要求横向滚动,所以需要使用上节介绍的 scroll-view 功能,并使用 scroll-x 属性支持横向滚动,推荐商品区域中的每一个商品是一个单独的 view,每个view 中需要写三个组…...
深入了解 SSL/TLS 协议及其工作原理
深入了解 SSL/TLS 协议及其工作原理 一. 什么是 SSL/TLS?二. SSL/TLS 握手过程三. SSL/TLS 数据加密与传输四. 总结 点个免费的赞和关注,有错误的地方请指出,看个人主页有惊喜。 作者:神的孩子都在歌唱 一. 什么是 SSL/TLS? 安全套接层&am…...
解决RuntimeError: No CUDA GPUs are available问题
今天运行之前可以正常运行的项目时,发现了以下问题: 接下来记录解决过程: 参考:os.environ[“CUDA_VISIBLE_DEVICES”]"2"的问题 因为代码中设置了选择了具体的GPU的型号,但是有可能没有这个GPU࿰…...
了解RabbitMQ中的Exchange:深入解析与实践应用
在分布式系统设计中,消息队列(Message Queue)扮演着至关重要的角色,而RabbitMQ作为开源消息代理软件的佼佼者,以其高性能、高可用性和丰富的功能特性,成为了众多开发者的首选。在RabbitMQ的核心组件中&…...
33.3K 的Freqtrade:开启加密货币自动化交易之旅
“ 如何更高效、智能地进行交易成为众多投资者关注的焦点。” Freqtrade 是一款用 Python 编写的免费开源加密货币交易机器人。它就像一位不知疲倦的智能交易助手,能够连接到众多主流加密货币交易所,如 Binance、Bitmart、Bybit 等(支…...
(概率论)区间估计 和 置信区间 、 假设检验
参考文章1:3分钟,看懂区间估计and置信区间 - 知乎 (zhihu.com) 1、点估计的定义: 2、区间估计的定义: 参考文章2:【概率论】- (1)区间估计 - 知乎 (zhihu.com) 这篇文章中的2中,2.1、2.2、2.3描述了需要用到…...
MBTiles 及爬取到发布
MBTiles :https://github.com/mapbox/mbtiles-spec/blob/master/1.3/spec.md 1.MBTiles是什么 MBTiles是一个在SQLite 数据库存储瓦片地图数据的标准,该标准的目的是即时传输和使用数据。 作为一个容器格式,MBTiles可以存储任何瓦片数据,…...
uniapp使用chooseLocation安卓篇
本文章全部以高德地图为例 代码 <view class"bottom"><button click"choose">定位</button> </view> choose() {uni.chooseLocation({success: function(res) {console.log(位置名称: res.name);console.log(详细地…...
el-cascader 树状选择-点击父级禁用子级
背景:项目上需要实现树状选择,点击父级禁用子级的功能,element组件本身没有该配置项说明:需要实现几个功能点:点击父级禁用子级;再次点击取消禁用;仅回填所选级;上下级不关联实现代码…...
力扣经典题目之219. 存在重复元素 II
今天继续给大家分享一道力扣的做题心得今天这道题目是 219. 存在重复元素 II,我使用 hashmap 的方法来解题 题目如下,题目链接:219. 存在重复元素 II 1,题目分析 此题目给我们了一个整数数组 nums 和一个整数 k ,需要…...
微服务保护—Sentinel快速入门+微服务整合 示例: 黑马商城
1.微服务保护 微服务保护是确保微服务架构可靠、稳定和安全的策略与技术。 在可靠性上,限流是控制进入微服务的请求数量,防止流量过大导致服务崩溃。比如电商促销时对商品详情服务进行流量限制。熔断是当被调用的微服务故障过多或响应过慢时,…...
Wireshark 学习笔记1
1.wireshark是什么 wireshark是一个可以进行数据包的捕获和分析的软件 2.基本使用过程 (1)选择合适的网卡 (2)开始捕获数据包 (3)过滤掉无用的数据包 (4)将捕获到的数据包保存为文件…...
voice agent实现方案调研
前言 目前语音交互主要的实现大体有两种: 级联方案,指的是,大规模语言模型 (LLM)、文本转语音 (TTS) 和语音转文本 (STT),客户的话通过vad断句到STT的语音转文本,经过大模型进行生成文本,生成文本后通过TTS进行回复给用户。(主流方案)端到端的方案,开发者无需再…...
pgpool配置安装之服务器的配置
第 1 章.服务器配置 1.1. 设置参数 1.1.1. 参数名称和值 所有参数名称均不区分大小写。每个参数都采用 值为以下五种类型之一:boolean、string、integer、floating point、 或枚举 (enum)。类型决定了设置 参数: 布尔…...
C++实现银行排队系统
网上看到的设计要求: 基本效果已经实现,希望大家帮忙指点指点。 程序中的一些基本模块 程序处理中的一些流程图 程序运行结果如下图: 程序代码如下: #include <iostream> #include <string> #include <random&g…...
UI自动化测试保姆级教程①
欢迎来到阿妮莫的学习小屋慢也好,步子小也好,在往前走就好 目录 自动化测试 简介 作用 分类 优缺点 优点 缺点(误区) UI自动化测试 自动化测试使用场景 自动化测试实现时间 Selenium框架 特点 Web自动化测试环境部署 Selenium包安装 浏览…...
多行输入模式(dquote> 提示符)double quote(双引号)
文章目录 1、引号不匹配具体原因解决办法如何避免此问题 2、double quote(双引号)出现原因解决办法预防措施 ~/Downloads/productqualification-develop git:[main] git commit -m "漏添加到暂存区的代码“ dgqdgqdeMac-mini productqualification-…...
【Uniapp-Vue3】原生事件监听及组件内置事件处理
如果我们想给元素添加一个事件就要使用到v-on,也可以简写为: <标签名 v-on:事件名"函数"></标签名> 或简写为 <标签名 事件名"函数"></标签名> 比如我们想要实现点击一下元素,num就1,…...
微软 2024 最新技术全景洞察
亲爱的小伙伴们😘,在求知的漫漫旅途中,若你对深度学习的奥秘、Java 与 Python 的奇妙世界,亦或是读研论文的撰写攻略有所探寻🧐,那不妨给我一个小小的关注吧🥰。我会精心筹备,在未来…...
PHP语言的并发编程
PHP语言的并发编程 引言 随着互联网技术的迅速发展,Web 应用的复杂性和用户并发请求的增加,要求开发者在构建高性能应用时考虑并发编程。并发编程允许程序在同一时间执行多个任务,这对于处理高流量网站、API 和实时应用程序至关重要。虽然 …...
Nginx 解析漏洞复现
漏洞原理 该漏洞与Nginx、php版本无关,属于用户配置不当造成的解析漏洞。主要是由于下面两个配置的错误: cgi.fix_pathinfo1,该配置项的作用是如果访问的.php文件不存在,则采用上层路径,例如访问/test.png/.php,一般…...