day5--java基础编程:异常,内部类
6 异常
6.1 异常概述
-
出现背景:
在使用计算机语言进行项目开发的过程中,即使程序员把代码写得尽善尽美
,在系统的运行过程中仍然会遇到一些问题,因为很多问题不是靠代码能够避免的,比如:客户输入数据的格式,读取文件是否存在,网络是否始终保持通畅
等等。 -
异常:
在Java语言中,将程序执行中发生的不正常情况称为"异常"。(开发过程中的语法错误和逻辑错误不是异常)
6.2 异常体系
说明:
Throwable
:在 Java 中,所有的异常都有一个共同的祖先 Throwable(可抛出)Error
:严重问题,不需要处理Exception
:称为异常类,它表示程序本身可以处理的问题RuntimeException
:在编译期是不检查的,出现问题后,需要我们回来修改代码非RuntimeException
:编译期就必须处理的,否则程序不能通过编译,就更不能正常运行了
6.2.1 Error举例
package com.atguigu.java;
/** Error:* Java虚拟机无法解决的严重问题。如:JVM系统内部错误、资源耗尽等严重情况。比如:StackOverflowError和OOM。* * 一般不编写针对性的代码进行处理。出现问题只能改代码。* * */
public class ErrorTest {public static void main(String[] args) {//1.栈溢出:java.lang.StackOverflowError
// main(args);//2.堆溢出:java.lang.OutOfMemoryError Integer[] arr = new Integer[1024*1024*1024];}
}
6.2.2 Exception举例
package com.atguigu.java1;import java.io.File;
import java.io.FileInputStream;
import java.util.Date;
import java.util.Scanner;import org.junit.Test;/** 一、异常体系结构* * java.lang.Throwable* |-----java.lang.Error:一般不编写针对性的代码进行处理。* |-----java.lang.Exception:可以进行异常的处理* |------编译时异常(checked)* |-----IOException* |-----FileNotFoundException* |-----ClassNotFoundException* |-----SQLException sql异常* |------运行时异常(unchecked,RuntimeException)* |-----NullPointerException* |-----ArrayIndexOutOfBoundsException* |-----ClassCastException* |-----NumberFormatException 数字格式异常* |-----InputMismatchException 输入不匹配异常* |-----ArithmeticException 算术异常* * * * 面试题:常见的异常都有哪些?举例说明*/
public class ExceptionTest {//******************以下是编译时异常***************************@Testpublic void test7(){
// File file = new File("hello.txt");
// FileInputStream fis = new FileInputStream(file);
//
// int data = fis.read();
// while(data != -1){
// System.out.print((char)data);
// data = fis.read();
// }
//
// fis.close();}//******************以下是运行时异常***************************//ArithmeticException@Testpublic void test6(){int a = 10;int b = 0;System.out.println(a / b);}//InputMismatchException@Testpublic void test5(){Scanner scanner = new Scanner(System.in);int score = scanner.nextInt();System.out.println(score);scanner.close();}//NumberFormatException@Testpublic void test4(){String str = "123";str = "abc";int num = Integer.parseInt(str);}//ClassCastException@Testpublic void test3(){Object obj = new Date();String str = (String)obj;}//IndexOutOfBoundsException@Testpublic void test2(){//ArrayIndexOutOfBoundsException
// int[] arr = new int[10];
// System.out.println(arr[10]);//StringIndexOutOfBoundsExceptionString str = "abc";System.out.println(str.charAt(3));}//NullPointerException@Testpublic void test1(){// int[] arr = null;
// System.out.println(arr[3]);String str = "abc";str = null;System.out.println(str.charAt(0));}}
6.3 JVM的默认处理方案
如果程序出现了问题,我们没有做任何处理,最终JVM会做默认的处理
- 把异常的名称,异常原因及异常出现的位置等信息输出在了控制台(由下图可知)
- 程序停止执行(由下图可知,
结束
并没有输出到控制台)
6.4 Throwable的成员方法
6.5 编译时异常和运行时异常的区别
Java中的异常被分为两大类: 编译时异常
和运行时异常
,也被称为受检异常
和非受检异常
所有的RuntimeException类及其子类被称为运行时异常,其他的异常都是编译时异常
- 编译时异常: 必须显示处理,否则程序就会发生错误,无法通过编译
- 运行时异常: 无需显示处理,也可以和编译时异常一样处理
6.6 异常处理概述
-
为什么要进行异常处理:
因为java虚拟机的默认处理方案,会让程序在出现异常的地方直接结束掉。而在实际开发中我们程序某一个部分出现问题了,它不应该影响后续的执行,所以我们要自己处理异常。 -
如果程序出现了问题,我们需要自己来处理,有两种方案:
- try … catch …
- throws
-
异常处理:抓抛模型
- 过程一:“抛”:程序在正常执行的过程中,一旦出现异常,就会在异常代码处生成一个异常对象,并将对象抛出。一旦抛出异常对象后,
其后的代码就不会再执行。
- 关于异常对象的产生:
① 系统自动生成的异常对象
② 手动的生成一个异常对象,并抛出(throw)
- 关于异常对象的产生:
- 过程二:“抓”:可以理解为异常的处理方式:
- try-catch-finally :真正的处理异常,后续代码
会执行
- throws:没有真正处理异常仅仅是抛给调用者,后续代码
不会执行
- try-catch-finally :真正的处理异常,后续代码
- 过程一:“抛”:程序在正常执行的过程中,一旦出现异常,就会在异常代码处生成一个异常对象,并将对象抛出。一旦抛出异常对象后,
-
如果程序出现了异常没有处理:
- 最终会跑到main方法中,main方法由jvm虚拟机管理,jvm虚拟机处理异常是杀死进程,结束掉程序。
-
异常处理的意义:
- 程序出现异常后仍能正确执行,不影响程序运行。
6.7 异常处理方式一:(try-catch-finally)
说明:
- try-catch-finally,又叫做捕获方式。
语法:
//try只能而且出现一次 catch可以出现0到N次 finally出现0到1次
try{//可能出现异常的代码}catch(异常类型1 变量名1){//处理异常的方式1}catch(异常类型2 变量名2){//处理异常的方式2}catch(异常类型3 变量名3){//处理异常的方式3}....finally{//一定会执行的代码}
执行流程:
- 程序从try里面的代码开始执行
出现异常,会自动生成一个异常类对象
,该异常对象将被提交给Java运行时系统- 当Java运行时系统接收到异常对象时,会到catch中去找匹配的异常类,找到后进行异常的处理
执行完毕之后,程序还可以继续往下执行
。
6.7.1 测试1:try-catch结构
package com.shuai;
/*** 1.finally是可选的。* * 2.使用try将可能出现异常代码包装起来,在执行过程中,一旦出现异常就会生成一个对应类的异常对象,根据* 此对象的类型到catch中进行匹配。* * 3.一旦try中的异常对象匹配到一个catch时,就进入catch中进行异常的处理,一旦处理完成,就跳出当前的* try-catch结构(在没有写finally的情况),继续执行其后的代码。* * 4.catch中的异常类型如果没有父子类关系,谁声明在上,,谁声明在下无所谓。* catch中的异常类型如果有父子类关系,则要求子类在上父类在下,从小到大的排序,否则报错。* * 5.常用的异常处理方式:1)String e.getMessage() 2)void e.printStackTrace() 这个比较常用* * 6.在try结构中定义的变量,出了try结构以后就不能使用了。想要使用把变量声明在外面,赋值在结构里面。* * 7.为什么不写成int num;而要多赋值个0,首先因为变量想要输出首先要声明好后并且有初始化的值,而局部变量* 没有默认值,一旦try中的程序报错,直接输出num,num没有值程序会报错,为了避免这种情况,加上0不会影响程* 序也不会因为异常情况导致num没有值而保错。* *8.try-catch-finally也可以嵌套* 体会1:使用try-catch-finally结构处理编译异常时,使得编译时不会报错,但运行时有可能报错,相当于try-catch-finally* 将编译时可能出现的异常延迟到运行时出现。* 体会2:开发中,由于运行时异常比较常见,所以我们通常就不针对运行时异常编写try-catch-finally了。* 针对于编译时异常,我们说一定要考虑异常的处理。(如果与前端页面交互提示时,仍要处理。)*/
public class Demo05 {public static void main(String[] args) {String str="123";str="abc";/*为什么不写成int num;而要多赋值个0,首先因为变量想要输出首先要声明好后并且有初始化的值,而局部变量没有默认值,一旦try中的程序报错,直接输出num,num没有值程序会报错,为了避免这种情况,加上0不会影响程序也不会因为异常情况导致num没有值而报错。*/int num = 0;try {num=Integer.parseInt(str);//int num=Integer.parseInt(str);//出现异常System.out.println("hell0-------01");//不会输出} catch (NullPointerException e) { //习惯上异常名叫 eSystem.out.println("出现了空指针转换异常");}catch (NumberFormatException e) { //一个类型e只在一个catch中有效,所以不同的catch中名字可以相同。//System.out.println("出现了数值转换异常"); 一般不这样写,用异常类方法代替,如下://String e.getMessage():此方法返回值是String类型,想要看就要输出它。因为有返回值就要定义变量进行接收,查看就要输出,这里简写一块了。// System.out.println(e.getMessage()); //打印异常信息//void e.printStackTrace():此方法返回值是void类型,不需要在进行输出就能查看。e.printStackTrace(); //打印异常详细信息}catch (Exception e){System.out.println("出现了异常");//不会输出}//System.out.println(num);报错不能调用,因为变量num在catch中定义的,作用域在catch中。System.out.println(num);System.out.println("hell0-------02");//会输出}}
6.7.2 测试2:finally使用场景分析
package com.atguigu.java1;import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;import org.junit.Test;/** try-catch-finally中finally的使用:* * * 1.finally是可选的* * 2.finally中声明的是一定会被执行的代码。即使catch中又出现异常了,try中有return语句,catch中有* return语句等情况。* * 3.像数据库连接、输入输出流、网络编程Socket等资源,JVM是不能自动的回收的,我们需要自己手动的进行资源的* 释放。此时的资源释放,就需要声明在finally中。* * * */
public class FinallyTest {@Testpublic void test2(){FileInputStream fis = null;try {File file = new File("hello1.txt");fis = new FileInputStream(file);int data = fis.read();while(data != -1){System.out.print((char)data);data = fis.read();}} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}finally{try {if(fis != null)//如果文件没有创建成功为赋的默认值null会报空指针异常,加上if判断避免这一情况。fis.close();} catch (IOException e) {e.printStackTrace();}}}@Testpublic void testMethod(){int num = method();System.out.println(num);}public int method(){try{int[] arr = new int[10];System.out.println(arr[10]);return 1;}catch(ArrayIndexOutOfBoundsException e){e.printStackTrace();return 2;}finally{System.out.println("我一定会被执行");return 3;}}@Testpublic void test1(){try{int a = 10;int b = 0;System.out.println(a / b);}catch(ArithmeticException e){e.printStackTrace();// int[] arr = new int[10];
// System.out.println(arr[10]);}catch(Exception e){e.printStackTrace();}
// System.out.println("我好帅啊!!!~~");finally{System.out.println("我好帅啊~~");}}}
快捷键:选中报错包裹的代码—>Suround With—>Try/catch Block
注意:修改代码关闭流放在finally中。
6.8 异常处理方式二:(throws)
-
使用背景:
虽然我们通过try…catch.….可以对异常进行处理,但是并不是所有的情况我们都有权限进行异常的处理也就是说,有些时候可能出现的异常是我们处理不了的,这个时候该怎么办呢?
针对这种情况,Java提供了throws的处理方案 -
格式:
throws 异常类名;
-
注意:这个格式是跟在
方法的括号
后面的 -
编译时异常必须要进行处理,两种处理方案: try…catch 或者throws,如果采用throws这种方案,将来谁调用谁处理
-
运行时异常可以不处理,出现问题后,需要我们回来修改代码
-
执行流程:
- "throws + 异常类型"写在方法的声明处。指明此方法执行时,可能会抛出的异常类型。
- 一旦当方法体执行时,出现异常,仍会在异常代码处生成一个异常类的对象,此对象满足throws后异常类型时,就会被抛出。
异常代码后续的代码,就不再执行!
6.8.1 案例1:测试throws关键字
package com.atguigu.java1;import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;/** 异常处理的方式二:throws + 异常类型** 1. "throws + 异常类型"写在方法的声明处。指明此方法执行时,可能会抛出的异常类型。* 一旦当方法体执行时,出现异常,仍会在异常代码处生成一个异常类的对象,此对象满足throws后异常* 类型时,就会被抛出。异常代码后续的代码,就不再执行!** 2. 体会:try-catch-finally:真正的将异常给处理掉了。* throws的方式只是将异常抛给了方法的调用者。 并没有真正将异常处理掉。** 3. 开发中如何选择使用try-catch-finally 还是使用throws?* 3.1 如果父类中被重写的方法没有throws方式处理异常,则子类重写的方法也不能使用throws,意味着如果* 子类重写的方法中有异常,必须使用try-catch-finally方式处理。* 3.2 执行的方法a中,先后又调用了另外的几个方法,这几个方法是递进关系执行的。我们建议这几个方法使用throws* 的方式进行处理。而执行的方法a可以考虑使用try-catch-finally方式进行处理。**/
public class ExceptionTest2 {public static void main(String[] args){try{method2();}catch(IOException e){e.printStackTrace();}// method3();}public static void method3(){try {method2();} catch (IOException e) {//IOException 是FileNotFoundException异常的父类,这里处理方式又相同所以只需要写一个catch即可。e.printStackTrace();}}//method1抛出了2个异常,这里method2调用为什么只抛出一个异常呢??//如果2个异常是父子类关系,并且处理异常的方式相同,比如都是e.printStackTrace();,那么只需要抛出一个异常即可。public static void method2() throws IOException{method1();}public static void method1() throws FileNotFoundException,IOException{File file = new File("hello1.txt");FileInputStream fis = new FileInputStream(file);int data = fis.read();while(data != -1){System.out.print((char)data);data = fis.read();}fis.close();System.out.println("hahaha!");}}
6.8.2 案例2:测试方法重写子类抛出异常小于父类
方法重写的规则之一::子类重写的方法抛出的异常类型不大于父类被重写的方法抛出的异常类型。
package com.atguigu.java1;import java.io.FileNotFoundException;
import java.io.IOException;/** 方法重写的规则之一:* 子类重写的方法抛出的异常类型不大于父类被重写的方法抛出的异常类型* * */
public class OverrideTest {public static void main(String[] args) {OverrideTest test = new OverrideTest();test.display(new SubClass());}public void display(SuperClass s){try {s.method();} catch (IOException e) {e.printStackTrace();}}
}class SuperClass{public void method() throws IOException{}}class SubClass extends SuperClass{
//如果方法重写调用子类的方法的方法体,子类抛出的异常大于父类的,父类已经处理的异常在子类中不包含,则父类处理异常没有什么意义。public void method()throws FileNotFoundException{}
}
6.9 手动抛出异常对象(throw)
-
使用背景:如下图。
-
作用:用于在方法体内部抛出异常对象
-
关于异常对象的产生:
- 系统自动生成的异常对象
- 手动的生成一个异常对象,并抛出(throw)
-
注意:手动抛出异常如果是运行时异常对象可以不用处理,如果抛出的是编译期异常对象一定要处理异常。
6.9.1 没有手动抛出异常对象之前
package com.atguigu.java2;public class StudentTest {public static void main(String[] args) {Student s = new Student();s.regist(-1001);System.out.println(s);//直接输出对象的引用实际上时输出.toString()方法。}}class Student{private int id;public void regist(int id) {if(id > 0){this.id = id;}else{/** 即便你此时输入的是负数不合理,只能给你个提示输入的数据错误,但是这样写还是把结果输出了。* 正常来讲:应该是输入的是负数不合理,程序直接报错不会再向下执行输出结果,所以这里一般是手动抛出异常对象,* 一旦数据不合理直接报异常,程序停止运行。*/System.out.println("您输入的数据非法!");}}@Overridepublic String toString() {return "Student [id=" + id + "]";}}
6.9.2 手动抛出异常对象之后
package com.atguigu.java2;public class StudentTest {public static void main(String[] args) {try {Student s = new Student();s.regist(-1001);System.out.println(s);} catch (Exception e) {
// e.printStackTrace();/*throw new RuntimeException("您输入的数据非法!")里面的值是由RuntimeException的有参构造方法中super(xxx)调用--->* 父类的Exception的有参构造方法中super(xxx)调用----> Throable中的有参构造方法,在Throable类中通过有参构造方法* 赋值(this.detailMessage = message;) 给成员变量: private String detailMessage;为:您输入的数据非法!* 即:值最终赋值给Throable类的成员变量detailMessage。* * void e.getMessage() 底层源码:* public String getMessage() {* return detailMessage;* }* 这个方法getMessage()的返回值为Throable类中的detailMessage成员变量,所以输出结果为:您输入的数据非法! */System.out.println(e.getMessage());}}}class Student{private int id;public void regist(int id) throws Exception {if(id > 0){this.id = id;}else{
// System.out.println("您输入的数据非法!");//手动抛出异常对象
// throw new RuntimeException("您输入的数据非法!");抛出运行时异常,调用方不用处理。
// throw new Exception("您输入的数据非法!");Exception包含编译器异常,所以一旦throws抛出,在调用方一定要进行处理编译器异常。throw new MyException("不能输入负数");//抛出的是自定义异常//错误的 String不是异常类
// throw new String("不能输入负数");
//return 0;如果方法有返回值且不影响结果,则可以用throw代替return,因为如果报异常也会结束方法运行。}}@Overridepublic String toString() {return "Student [id=" + id + "]";}}
6.9.3 throw和throws的区别
6.10 自定义异常
使用背景:
- 目的是系统提供的异常类型是
有限的
,如果程序产生的异常不在提供中,可以抛出自己定义的异常使得异常类型更加精确
(一般和throw连用) - 一般这个自定义异常类,
定义这个类时要做到见名知意
。
格式:
范例:
6.10.1 测试
和案例6.9.2连用。
package com.atguigu.java2;
/** 如何自定义异常类?* 1.继承于现有的异常结构:RuntimeException 、Exception(包含运行和编译器异常,* 所以编译期就要进行处理异常)* RuntimeException异常:只需要继承RuntimeException异常或者它的子类。* Checked异常:只需要继承Exception异常或者Exception的子类,但需要除RuntimeException之外。* 2.提供全局常量:serialVersionUID* 3.提供重载的构造器* */
public class MyException extends Exception{static final long serialVersionUID = -7034897193246939L;//无参构造方法public MyException(){}//有参构造方法public MyException(String msg){/** 调用父类的有参构造,因为上面的案例中处理异常使用的是e.getMessage()方法,* 这个方法返回值为Throable的成员变量dtailMessage属性。而现在自定义异常对象* 的通过有参构造方法创建对象并传参,这个自定义异常对象的参数不是自己定义的而是定义* 在顶级父类Throable中的成员变量,所以想要赋值给父类Throable的属性需要在子类* 的构造方法中通过super一步一步调用父类构造方法,最终在Throwable的构造方法中把* 值赋值给成员变量dtailMessage。*/super(msg);}
}
7. 内部类
7.1 成员内部类(静态/非静态)
package com.atguigu.java2;
/** 类的内部成员之五:内部类* 1. Java中允许将一个类A声明在另一个类B中,则类A就是内部类,类B称为外部类* * 2.内部类的分类:成员内部类(静态、非静态) vs 局部内部类(方法内、代码块内、构造器内)* * 3.成员内部类:* 一方面,作为外部类的成员:* >调用外部类的结构* >可以被static修饰* >可以被4种不同的权限修饰* * 另一方面,作为一个类:* > 类内可以定义属性、方法、构造器等* > 可以被final修饰,表示此类不能被继承。言外之意,不使用final,就可以被继承* > 可以被abstract修饰* * * 4.关注如下的3个问题* 4.1 如何实例化成员内部类的对象* 4.2 如何在成员内部类中区分调用外部类的结构* 4.3 开发中局部内部类的使用 见《InnerClassTest1.java》* */
public class InnerClassTest {public static void main(String[] args) {//创建Dog实例(静态的成员内部类):Person.Dog dog = new Person.Dog();dog.show();//创建Bird实例(非静态的成员内部类):
// Person.Bird bird = new Person.Bird();//错误的Person p = new Person();Person.Bird bird = p.new Bird();bird.sing();System.out.println();bird.display("黄鹂");}
}class Person{//外部类String name = "小明";int age;public void eat(){System.out.println("人:吃饭");}//静态成员内部类static class Dog{String name;int age;public void show(){System.out.println("卡拉是条狗");
// eat();}}//非静态成员内部类class Bird{String name = "杜鹃";public Bird(){}public void sing(){System.out.println("我是一只小小鸟");Person.this.eat();//调用外部类的非静态属性 属性不同名可以省略为:eat();eat();System.out.println(age);}public void display(String name){System.out.println(name);//方法的形参System.out.println(this.name);//内部类的属性System.out.println(Person.this.name);//外部类的属性 属性不同名可以省略}}public void method(){//局部内部类class AA{}}{//局部内部类class BB{}}public Person(){//局部内部类class CC{}}}
7.2 局部内部类(匿名/非匿名)
package com.atguigu.java2;public class InnerClassTest1 {//开发中很少见public void method(){//局部内部类class AA{}}//返回一个实现了Comparable接口的类的对象public Comparable getComparable(){//创建一个实现了Comparable接口的类:局部内部类//方式一:
// class MyComparable implements Comparable{ //Comparable为源码里面的接口
//
// @Override
// public int compareTo(Object o) {
// return 0;
// }
//
// }
//
// return new MyComparable();//方式二:return new Comparable(){@Overridepublic int compareTo(Object o) {return 0;}};}}
相关文章:

day5--java基础编程:异常,内部类
6 异常 6.1 异常概述 出现背景: 在使用计算机语言进行项目开发的过程中,即使程序员把代码写得尽善尽美,在系统的运行过程中仍然会遇到一些问题,因为很多问题不是靠代码能够避免的,比如:客户输入数据的格式,…...

2023.12.28 关于 Redis 数据类型 List 内部编码、应用场景
目录 List 编码方式 早期版本 现今版本 List 实际应用 多表之间的关联关系 消息队列 频道(多列表)消息队列 微博 Timeline 栈 & 队列 List 编码方式 早期版本 早期版本 List 类型的内部编码方式有两种 ziplist(压缩列表…...

uni-app page新建以及page外观配置
锋哥原创的uni-app视频教程: 2023版uniapp从入门到上天视频教程(Java后端无废话版),火爆更新中..._哔哩哔哩_bilibili2023版uniapp从入门到上天视频教程(Java后端无废话版),火爆更新中...共计23条视频,包括:第1讲 uni…...
问题:执行conda init 提示 No action taken,然后无法正确激活环境
执行完下面代码后, conda activate base 报错,提示先执行conda init,于是再执行下面代码 conda init发现还报错提示提示 No action taken。 解决方法: 打开一个新的终端窗口,您应该就可以正常使用conda命令。(把其…...

SpringBoot 增量/瘦身部署jar 包
背景 SpringBoot 项目的部署一般采用全量jar 包方式部署相关项目,如果我们对相关的Contrller\Service\Dao\Mapper 层进行相关业务调整就需要重新编译全量jar 包(包大小约为200M左右)实在太麻烦了。 本文:重点讲解使用SpringBoot 的增量/瘦身…...
AI客服的评分机制及自动化测试
智能客服的评分机制及自动化测试 使用pytest来编写智能客服的测试框架: 准备一个CSV文件来存储测试用例和预期结果。编写测试脚本,其中包含测试用例的读取、发送请求、评分逻辑和结果验证。使用pytest断言来验证测试结果。 首先安装pytest和requests库…...

【Matlab】ELM极限学习机时序预测算法
资源下载: https://download.csdn.net/download/vvoennvv/88681649 一,概述 ELM(Extreme Learning Machine)是一种单层前馈神经网络结构,与传统神经网络不同的是,ELM的隐层神经元权重以及偏置都是随机产生的…...

m3u8网络视频文件下载方法
在windows下,使用命令行cmd的命令下载m3u8视频文件并保存为mp4文件。 1.下载ffmpeg,访问FFmpeg官方网站:https://www.ffmpeg.org/进行下载 ffmpeg下载,安装,操作说明 https://blog.csdn.net/m0_53157282/article/det…...

相机内参标定理论篇------张正友标定法
一、为什么做相机标定? 标定是为了得到相机坐标系下的点和图像像素点的映射关系,为摄影几何、计算机视觉等应用做准备。 二、为什么需要张正友标定法? 张正友标定法使手工标定相机成为可能,使相机标定不再需要精密的设备帮助。…...

鸿蒙 Window 环境的搭建
鸿蒙操作系统是国内自研的新一代的智能终端操作系统,支持多种终端设备部署,能够适配不同类别的硬件资源和功能需求。是一款面向万物互联的全场景分布式操作系统。 下载、安装与配置 DevEco Studio支持Windows系统和macOS系统 Windows系统配置华为官方推…...
新一代大语言模型在Amazon Bedrock引领人工智能潮流
亚马逊Bedrock平台推出全新Amazon Titan大语言模型,为大型数据集预处理提供强大支持。亚马逊云科技开发者大会演讲重点介绍了Amazon Titan在文本大语言模型领域的创新,以及如何通过Bedrock平台实现定制化应用。 亚马逊Bedrock平台的主要产品经理Brent S…...

kafka实现延迟消息
背景 我们知道消息中间件mq是支持延迟消息的发送功能的,但是kafka不支持这种直接的用法,所以我们需要独立实现这个功能,以下是在kafka中实现消息延时投递功能的一种方案 kafka实现延时消息 主要的思路是增加一个检测服务,这个检…...

python+django高校教材共享管理系统PyCharm 项目
本中原工学院教材共享平台采用的数据库是mysql,使用nodejs技术开发。在设计过程中,充分保证了系统代码的良好可读性、实用性、易扩展性、通用性、便于后期维护、操作方便以及页面简洁等特点。系统所要实现的功能分析,对于现在网络方便的管理&…...

三子棋(c语言)
前言: 三子棋是一种民间传统游戏,又叫九宫棋、圈圈叉叉棋、一条龙、井字棋等。游戏规则是双方对战,双方依次在9宫格棋盘上摆放棋子,率先将自己的三个棋子走成一条线就视为胜利。但因棋盘太小,三子棋在很多时候会出现和…...
09.kubernetes 部署calico / flannel网络插件
脚本中实现了 calico 和 flannel 这两种主流的网络插件,选择其中一种部署即可 1、calico calico架构 Calico是一个三层的虚拟网络解决方案,它把每个节点都当作虚拟路由器(vRouter),并把每个节点上的Pod都当作是节点路由器后的一个终端设备并为其分配一个IP地址。各节点…...

【DevOps 工具链】搭建 项目管理软件 禅道
文章目录 1、简介2、环境要求3、搭建部署环境3.1. 安装Apache服务3.2. 安装PHP环境(以php7.0为例 )3.3. 安装MySQL服务 4、搭建禅道4.1、下载解压4.2、 配置4.2.1、 启动4.2.2、自启动4.2.3、确认是否开机启动 5、成功安装 1、简介 禅道是国产开源项目管…...

ES6的默认参数和rest参数
✨ 专栏介绍 在现代Web开发中,JavaScript已经成为了不可或缺的一部分。它不仅可以为网页增加交互性和动态性,还可以在后端开发中使用Node.js构建高效的服务器端应用程序。作为一种灵活且易学的脚本语言,JavaScript具有广泛的应用场景&#x…...
深入理解WPF MVVM:探索数据绑定与命令的优雅之道
引言: WPF(Windows Presentation Foundation)是一种用于创建富客户端应用程序的框架,而MVVM(Model-View-ViewModel)则是一种在WPF中使用的架构模式。MVVM提供了一种优雅的方式来组织和管理应用程序的代码&a…...

ssrf之gopher协议的使用和配置,以及需要注意的细节
gopher协议 目录 gopher协议 (1)安装一个cn (2)使用Gopher协议发送一个请求,环境为:nc起一个监听,curl发送gopher请求 (3)使用curl发送http请求,命令为 …...

SVN下载安装(服务器与客户端)
1.下载 服务器下载:Download | VisualSVN Server 客户端下载:自行查找 2. 服务器安装 双击执行 运行 下一步 同意下一步 下一步 选中安装目录 3. 客户端安装 双击执行 下一步 4. 服务器创建仓库 5. 服务器创建用户 6. 客户端获取资源 文件夹右键...
浅谈 React Hooks
React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...

.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...

九天毕昇深度学习平台 | 如何安装库?
pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子: 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...