JAVA基礎知識(六)——異常處理

異常

    • 一、異常概述與異常體系結構
    • 二、常見異常
    • 三、異常處理機制一:try-catch-finally
    • 四、異常處理機制二:throws
    • 五、手動拋出異常:throw
    • 六、用戶自定義異常類
    • 七、開發中如何選擇使用try-catch-finally還是使用throws
    • 八、如何看待代碼中的編譯時異常和運行時異常?
    • 九、throw和throws區別

一、異常概述與異常體系結構

在使用計算機語言進行項目開發的過程中,即使程序員把代碼寫得盡善盡美,在系統的運行過程中仍然會遇到一些問題,因為很多問題不是靠代碼能夠避免的,比如:客戶輸入數據的格式,讀取文件是否存在,網絡是否始終保持通暢等。

  • 異常:在Java語言中,將程序執行中發生的不正常情況稱為“異常”。(開發過程中的語法錯誤和邏輯錯誤不是異常)

  • Java程序在執行過程中所發生的的異常事件可分為兩類

    • Error:Java虛擬機無法解決的嚴重問題。如:JVM系統內部錯誤、資源耗盡等嚴重情況。比如:StackOverflowError和OOM(OutOfMemoryError)。一般不編寫針對性的代碼進行處理。
    • Exception:其他因編程錯誤或偶然的外在因素導致的一般性問題,可以使用針對性的代碼進行處理。例如:
      • 空指針訪問
      • 視圖讀取不存在的文件
      • 網絡連接中斷
      • 數組角標越界
    • 舉例:
        //1.棧溢出 Exception in thread "main" java.lang.StackOverflowErrormain(args);//2.堆溢出 Exception in thread "main" java.lang.OutOfMemoryError: Java heap spaceInteger[] arr= new Integer[1024*1024*1024];
    
    • 對于這些錯誤,一般有兩種解決方法:一是遇到錯誤就終止程序的運行。另一種方法是由程序員在編寫程序時,就考慮到錯誤的檢測、錯誤消息的提示,以及錯誤的處理。

    • 捕獲錯誤最理想的是在編譯期間,但有的錯誤只有運行時才會發生。比如:除數為0,數組下標越界等。

      • 分類:編譯時異常運行時異常
  • 結構圖(面試題:常見的異常有哪些?)
    在這里插入圖片描述

二、常見異常

FileNotFoundException、IOExcpetion、ClassNotFoundException、ClassCastException、NullPointerException。

三、異常處理機制一:try-catch-finally

  • 在編寫程序時,經常要在可能出現錯誤的地方加上檢測的代碼,如進行x/y運算時,要檢測分母為0,數據為空,輸入的不是數據而是字符等。過多的if-else分支會導致程序的代碼加長、臃腫,可讀性差。因此采用異常處理機制。
  • Java異常處理
    Java采用的異常處理機制,是將異常處理的程序代碼集中在一起,與正常的程序代碼分開,使得程序簡潔、優雅,并易于維護。
  • try-catch-finally
    (1)finally是可選的
    (2)使用try將可能出現異常代碼包裝起來,在執行過程中,一旦出現異常,就會生成一個對應異常類的對象,根據此對象的類型去catch中進行匹配
    (3)一旦try中的異常匹配到某一個catch時,就進入catch中進行異常的處理,一旦處理完成,
    就跳出當前的try-catch結構(沒有寫finally的情況),繼續執行其后的代碼
    (4)catch中的異常類型如果沒有子父類關系,則誰聲明在上,誰聲明在下無所謂。
    catch中的異常類型滿足子父類的關系,則要求子類一定聲明在父類上面。否則報錯。
    (5) 常用的異常對象處理的方式: one:String getMessage(); two:printStackTrace()
    (6) 在try結構中聲明的變量,再出了try結構以后,就不能再被調用
    (7) try-catch-finally結構可以嵌套。
  • 示例:
import org.junit.Test;import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;/*** 一、異常的處理: 抓拋模型* 過程一: “拋”, 程序在正常執行過程中,一旦出現異常,就會在異常代碼處生成一個對應異常類的對象。并將此對象拋出。*              一旦拋出對象以后,其后的代碼就不再執行。**         關于異常對象的產生(1)系統自動生成的異常對象*                          (2)手動的生成一個異常對象,并拋出 throw** 過程二: “抓”, 可以理解為異常的處理方式 (1)try-catch-finally (2)throws**二、try-catch-finally*    try{*        // 可能出現異常的代碼*    }catch(異常類型1 變量名1){*       // 處理異常的方式1*    }catch(異常類型2 變量名2){*       // 處理異常的方式2*    }*    ...*    finally{*       // 一定會執行的代碼*    }**    說明:*       (1)finally是可選的*       (2)使用try將可能出現異常代碼包裝起來,在執行過程中,一旦出現異常,就會生成一個對應異常類的對象,根據此對象的類型*            去catch中進行匹配*       (3)一旦try中的異常匹配到某一個catch時,就進入catch中進行異常的處理,一旦處理完成,*            就跳出當前的try-catch結構(沒有寫finally的情況),繼續執行其后的代碼*       (4)catch中的異常類型如果沒有子父類關系,則誰聲明在上,誰聲明在下無所謂。*            catch中的異常類型滿足子父類的關系,則要求子類一定聲明在父類上面。否則報錯。*        (5) 常用的異常對象處理的方式: one:String getMessage();  two:printStackTrace()*        (6) 在try結構中聲明的變量,再出了try結構以后,就不能再被調用*        (7) try-catch-finally結構可以嵌套。**     體會1:使用try-catch-finally處理編譯時異常,使得程序在編譯時就不再報錯,但是運行時仍可能報錯。*           相當于我們使用try-catch-finally將一個編譯時可能出現的異常,延遲到運行時出現。*     體會2:開發中,由于運行時異常比較常見,所以我們通常就不針對運行時異常進行編寫try-catch-finally了*           針對于編譯時異常,我們說一定要考慮異常的處理。*/
public class TryCatchTest {@Testpublic void demo1(){String str = "hello";try {Integer.parseInt(str);System.out.println("轉換結束...");}catch (NumberFormatException e){
//            System.err.println("出現數值轉換異常: NumberFormatException");//String getMessage();String message = e.getMessage();System.out.println(message); //For input string: "hello"e.printStackTrace();/*java.lang.NumberFormatException: For input string: "hello"at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)at java.lang.Integer.parseInt(Integer.java:580)at java.lang.Integer.parseInt(Integer.java:615)at com.notes._1Java基礎編程._7異常處理._3異常的處理方式._3異常的處理方式.demo1(_3異常的處理方式.java:42)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method.java:498)at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)at org.junit.runners.ParentRunner.run(ParentRunner.java:363)at org.junit.runner.JUnitCore.run(JUnitCore.java:137)at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33)at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:230)at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:58)*/}//        System.out.println("執行結束...");}@Testpublic void demo2(){try {FileInputStream fis = new FileInputStream("E:\\附件\\file\\txt\\hello.txt");int index = ' ';while ((index = fis.read()) != -1){System.out.print((char)index);}fis.close();}catch (FileNotFoundException e){e.printStackTrace();}catch (IOException e){e.printStackTrace();}}
}
import org.junit.Test;import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;/*** try-catch-finally的使用* 1、finally是可選的* 2、finally中聲明的是一定會執行的代碼。即使catch中又出現異常了、try中有return語句、catch中有return語句等情況。* 3、像數據庫連接、輸入輸出流、網絡編程socket連接等資源,JVM是不能自動回收的,我們需要手動的進行資源的釋放。此時資源的釋放,就需要聲明在finally中。**/
public class FinallyTest {@Testpublic void demo1(){try {int a = 10 / 0;System.out.println(a);}catch (ArithmeticException e){e.printStackTrace();}catch (Exception e){e.printStackTrace();}finally {System.out.println("執行結束");}}//finally中聲明的是一定會執行的代碼。即使catch中又出現異常了、try中有return語句、catch中有return語句等情況。@Testpublic void demo2(){int a = method();System.out.println(a);}public int method(){try {int a = 10 / 0;System.out.println(a);return 1;}catch (ArithmeticException e){e.printStackTrace();return 2;}catch (Exception e){e.printStackTrace();return 3;}finally {System.out.println("執行結束");
//            return 4;}}//像數據庫連接、輸入輸出流、網絡編程socket連接等資源,JVM是不能自動回收的,我們需要手動的進行資源的釋放。此時資源的釋放,就需要聲明在finally中。@Testpublic void demo3(){FileInputStream fis = null;try {fis = new FileInputStream("hello.txt");int index = ' ';while ((index = fis.read()) != -1){System.out.print((char)index);}}catch (FileNotFoundException e){e.printStackTrace();}catch (IOException e){e.printStackTrace();}finally {try {if (fis != null){ //可能會報空指針異常fis.close();}}catch (IOException e){e.printStackTrace();}}}
}
  • finally
    • finally是可選的
    • finally中聲明的是一定會被執行的代碼。即使catch中又出現了異常了,try中有return語句,catch有return語句等情況。
    • 像數據庫連接、輸入輸出流、網絡編程Socker等資源,JVM是不能自動的回收的,我們需要自己手動的進行資源的釋放。此時的資源釋放,就需要聲明在finally中。
    • 示例代碼:(重點是return返回值問題)
    public static void main(String[] args) {int returnValue = finallyReturnTest();System.out.println("returnValue = " + returnValue);}public static int finallyReturnTest() {int m = 0 ;try{m = 8/0;return m; }catch(ArithmeticException e) {return 1; //返回return 1} finally {System.out.println("測試finllay");//return 3;//如果打開注釋返回 return 3}//return m;}

四、異常處理機制二:throws

import org.junit.Test;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*    (1)如果父類被重寫的方法沒有用throws方式處理異常,則子類重寫的方法也不能使用throws,意味著如果子類重寫的方法中有異常,必須使用try-catch-finally方式處理。*    (2)執行的方法a中,先后又調用了另外的幾個方法,這幾個方法是遞進關系執行的,我們建議這幾個方法使用throws的方式進行處理,而執行的方法a可以考慮使用try-catch-finally方式進行處理。*/
public class ThrowsTest {public void demo1() throws FileNotFoundException, IOException{FileInputStream fis = new FileInputStream("hello.txt");int index = ' ';while ((index = fis.read()) != -1){System.out.print((char)index);}fis.close();}public void demo2() throws IOException{demo1();}@Testpublic void demo3(){try {demo2();} catch (IOException e) {e.printStackTrace();}}
}
  • 重寫方法聲明拋出異常的原則
    • 子類重寫方法拋出異常的類型,不大于父類被重寫方法拋出異常的類型
    • 如果子類重寫方法拋出異常的類型,大于父類被重寫方法拋出異常的類型,進行try-catch后,可能捕捉不到子類拋出的異常,程序會報錯終止

public class JavaDemoException {public static void main(String[] args) {Car car = new Bar();try {car.startCar();//編譯時 按照父類拋出的異常的進行編譯,所有子類重寫的方法拋出的異常不能大于父類拋出的異常} catch (FileNotFoundException e) {e.printStackTrace();}}
}class Car {//啟動車輛public void startCar() throws FileNotFoundException {}
}class Bar extends Car {public void startCar() throws IOException { //報錯}
}

五、手動拋出異常:throw

public class _5手動拋出異常對象 {public static void main(String[] args) {Student student = new Student();try {student.register(-1001);System.out.println(student);} catch (Exception e) {System.err.println(e.getMessage());}}
}class Student{private int id;public void register(int id) throws Exception {if (id > 0){this.id = id;}else {
//            System.out.println("輸入的數據非法: " + id);//手動拋出異常對象
//            throw new RuntimeException("輸入的數據非法 id: " + id); //運行時異常throw new Exception("輸入的數據非法 id: " + id);}}@Overridepublic String toString() {return "Student{" +"id=" + id +'}';}
}
  • Java異常類對象除在程序執行過程中出現異常時由系統自動生成并拋出,也可根據需要使用人工創建并拋出。

    • 首先要生成異常類對象,然后通過throw語句實現拋出操作(提交給Java運行環境)。
    IOException e = new IOException();
    throw e;
    
    • 可以拋出的異常必須是Throwable或其子類的實例。下面的語句在編譯時將會產生語法錯誤:
    throw new String("want to throw");
    

六、用戶自定義異常類

  • 自定義異常類的注意點
    • 一般地,用戶自定義異常類都是RuntimeException的子類。
    • 自定義異常類通常需要編寫幾個重載的構造器。
    • 自定義異常需要提供serialVersionUID
    • 自定義的異常通過throw拋出。
    • 自定義異常最重要的是異常類的名字,當異常出現時,可以根據名字判斷異常類型。
    • 用戶自定義異常類MyException,用于描述數據取值范圍錯誤信息。用戶自己的異常類必須繼承現有的異常類。
class MyException extends Exception {static final long serialVersionUID = 13465653435L;private int idnumber;public MyException(String message, int id) {super(message);this.idnumber = id;}public int getId() {return idnumber;}
}
public class MyExpTest {public void regist(int num) throws MyException {if (num < 0)throw new MyException("人數為負值,不合理", 3);elseSystem.out.println("登記人數" + num);}public void manager() {try {regist(100);} catch (MyException e) {System.out.print("登記失敗,出錯種類" + e.getId());}System.out.print("本次登記操作結束");}public static void main(String args[]) {MyExpTest t = new MyExpTest();t.manager();}
}
  • 例題:

七、開發中如何選擇使用try-catch-finally還是使用throws

  • 如果父類中被重寫的的方法沒有throws方式處理異常,則子類重寫的方法也不能使用throws,意味著如果子類重寫的方法中有異常,必須使用try-catch-finally方式處理
    public static void main(String[] args) {Car car = new Bar();try {car.startCar();//編譯時 按照父類拋出的異常的進行編譯,所有子類重寫的方法拋出的異常不能大于父類拋出的異常} catch (FileNotFoundException e) {e.printStackTrace();}}
}class Car {//啟動車輛public void startCar()  {}
}class Bar extends Car {public void startCar() throws FileNotFoundException { //報錯}
}

在這里插入圖片描述

  • 執行的方法a中,先后又調用了另外的幾個方法,這幾個方法是遞進關系執行的。我們建議這幾個方法使用throw的方法進行處理。而執行的方法a可以考慮使用try-catch-finally方式進行處理。
public class JavaDemoException {public static void main(String[] args) {try {methodA();} catch (RuntimeException e) {System.out.println(e.getMessage());}methodB();}static void methodA() {try {System.out.println("進入方法A");throw new RuntimeException("制造異常");} finally {System.out.println("用A的方法的finally");}}static void methodB() {try {System.out.println("進入方法B");return;} finally {System.out.println("用B的方法的finally");}}
/*    進入方法A用A的方法的finally制造異常進入方法B用B的方法的finally*/}

八、如何看待代碼中的編譯時異常和運行時異常?

  • 體會1:使用try-catch-finally處理編譯時異常,是得程序在編譯時就不再報錯,但是運行時仍可能報錯。相當于我們使用try-catch-finally將一個編譯時可能出現得異常,延遲到運行時出現。
  • 體會2:開發中,由于運行時異常比較常見,所以我們通常就不針對運行時異常編寫try-catch-finally了。
  • 針對于編譯時異常,我們說一定要考慮異常的處理。

九、throw和throws區別

  • throw表示拋出一個異常類的對象,生成異常對象的過程。聲明在方法體內。
  • throws屬于異常處理的一種方式,聲明在方法的聲明處。

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/40931.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/40931.shtml
英文地址,請注明出處:http://en.pswp.cn/news/40931.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

goland插件推薦Rider UI Theme Pack

推薦一個goland配色插件Rider UI Theme Pack&#xff0c;里面自帶visual assist配色&#xff0c;配色截圖如下&#xff1a; 直接在plugins里面進行搜索或者在插件home page下載后進行安裝&#xff0c; 然后按照下圖進行設置即可。 此插件還適用于Jetbrains旗下的Clion和Pycharm…

WX1860- ngbe-1.2.5 xdp程序在路由模式下,使用iperf工具測試數據包不轉發,用jmeter可以

本地驗證時重定向iperf包有出現calltrace錯誤&#xff0c;經推斷&#xff0c;系統PAGE_SIZE<8k時可能出現&#xff08;getconf PAGE_SIZE指令可查看&#xff09;&#xff0c;按下圖將ngbe_main.c的2350行ngbe_rx_bufsz改為ngbe_rx_pg_size可修復。其次&#xff0c;需要將加載…

鴻蒙3.1 基于Token的訪問控制

介紹 代碼路徑:security_access_token: ATM(AccessTokenManager)是OpenHarmony上基于AccessToken構建的統一的應用權限管理能力。 ATM(AccessTokenManager)是OpenHarmony上基于AccessToken構建的統一的應用權限管理能力。 應用的Accesstoken信息主要包括應用身份標識APPID、…

什么是游戲出海運營?

游戲出海運營&#xff0c;也稱為游戲海外運營&#xff0c;是指將原本面向國內市場的游戲產品拓展到國際市場&#xff0c;以在海外地區推廣、發行、運營游戲的過程。這涵蓋了從市場調研、產品適應性優化、本地化翻譯、推廣營銷、社區互動到客戶支持等一系列策略和活動&#xff0…

阿里云對象存儲服務OSS

1、引依賴 <dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.15.1</version> </dependency> <dependency><groupId>javax.xml.bind</groupId><artifa…

Mocha and Red and Blue

一、題目 題面翻譯 給定長為 n n n 的僅由 R \texttt{R} R、 B \texttt{B} B、 ? \texttt{?} ? 組成的字符串 S S S&#xff0c;請你在 ? \texttt{?} ? 處填入 R \texttt{R} R 或 B \texttt{B} B&#xff0c;使得相鄰位置字符相同的數量最少。 譯者 ajthreac 題…

Hadoop HA集群兩個NameNode都是standby或者主NameNode是standby,從NameNode是active的情況集錦

文章目錄 背景架構HDFS HA配置錯誤原因解決方案方案一方案二方案三&#xff08;首先查看自己各參數文件是否配置出錯&#xff09; 后記補充failovertransitionToActive 常用端口號及配置文件常用端口號hadoop3.xhadoop2.x 常用配置文件 這里說一下配置Hadoop HA集群可能出現的兩…

Linux多線程【初識線程】

?個人主頁&#xff1a; 北 海 &#x1f389;所屬專欄&#xff1a; Linux學習之旅 &#x1f383;操作環境&#xff1a; CentOS 7.6 阿里云遠程服務器 文章目錄 &#x1f307;前言&#x1f3d9;?正文1、什么是線程&#xff1f;1.1、基本概念1.2、線程理解1.3、進程與線程的關系…

分布式事務與解決方案

一、什么是分布式事務 首先我們知道本地事務是指事務方法中的操作只依賴本地數據庫&#xff0c;可保證事務的ACID特性。而在分布式系統中&#xff0c;一個應用系統被拆分為多個可獨立部署的微服務&#xff0c;在一個微服務的事務方法中&#xff0c;除了依賴本地數據庫外&#…

【深入理解ES6】塊級作用域綁定

1. var聲明及變量提升機制 提升&#xff08;Hoisting&#xff09;機制&#xff1a;通過關鍵字var聲明的變量&#xff0c;都會被當成在當前作用域頂部生命的變量。 function getValue(condition){if(condition){var value "blue";console.log(value);}else{// 此處…

代碼隨想錄算法訓練營第三十六天 | 435. 無重疊區間,763.劃分字母區間,56. 合并區間

代碼隨想錄算法訓練營第三十六天 | 435. 無重疊區間&#xff0c;763.劃分字母區間&#xff0c;56. 合并區間 435. 無重疊區間:eyes:題目總結:eyes: 763.劃分字母區間:eyes:題目總結:eyes: 56. 合并區間:eyes:題目總結:eyes: 435. 無重疊區間 題目鏈接 視頻講解 給定一個區間的…

并發編程系列-Semaphore

Semaphore&#xff0c;如今通常被翻譯為"信號量"&#xff0c;過去也曾被翻譯為"信號燈"&#xff0c;因為類似于現實生活中的紅綠燈&#xff0c;車輛是否能通行取決于是否是綠燈。同樣&#xff0c;在編程世界中&#xff0c;線程是否能執行取決于信號量是否允…

8.10 用redis實現緩存功能和Spring Cache

什么是緩存? 緩存(Cache), 就是數據交換的緩沖區,俗稱的緩存就是緩沖區內的數據,一般從數據庫中獲取,存儲于本地代碼。 通過Redis來緩存數據&#xff0c;減少數據庫查詢操作; 邏輯 每個分類的菜品保存一份緩存數據 數據庫菜品數據有變更時清理緩存數據 如何將商品數據緩存起…

p-級數的上界(Upper bound of p-series)

積分判別法-The Integral Test https://math.stackexchange.com/questions/2858067/upper-bound-of-p-series https://courses.lumenlearning.com/calculus2/chapter/the-p-series-and-estimating-series-value/ 兩個重要級數&#xff08;p級數和幾何級數&#xff09; ht…

WPF顯示初始界面--SplashScreen

WPF顯示初始界面–SplashScreen 前言 WPF應用程序的運行速度快&#xff0c;但并不能在瞬間啟動。當第一次啟動應用程序時&#xff0c;會有一些延遲&#xff0c;因為公共語言運行時&#xff08;CLR&#xff09;首先需要初始化.NET環境&#xff0c;然后啟動應用程序。 對于WPF中…

高憶管理:股票T+0交易是什么意思?t+0交易有什么好處?

股票的買賣準則有很多種&#xff0c;T0買賣便是其中之一。那么股票T0買賣是什么意思&#xff1f;t0買賣有什么優點&#xff1f;高憶管理也為大家預備了相關內容&#xff0c;以供參考。 股票T0買賣是什么意思&#xff1f; T0買賣準則是指出資者當天買入的股票能夠在當天賣出&am…

IP 多播協議(IP Multicast Protocol)

IP 多播協議&#xff08;IP Multicast Protocol&#xff09;是一種在網絡中一對多傳輸數據的通信方式。在傳統的單播通信中&#xff0c;數據從一個發送方發送到一個接收方&#xff1b;而在多播通信中&#xff0c;數據可以從一個發送方傳輸到多個接收方&#xff0c;從而有效地節…

SpringBoot 異步、郵件任務

異步任務 創建一個Hello項目 創建一個類AsyncService 異步處理還是非常常用的&#xff0c;比如我們在網站上發送郵件&#xff0c;后臺會去發送郵件&#xff0c;此時前臺會造成響應不動&#xff0c;直到郵件發送完畢&#xff0c;響應才會成功&#xff0c;所以我們一般會采用多線…

神經網絡基礎-神經網絡補充概念-03-邏輯回歸損失函數

概念 邏輯回歸使用的損失函數通常是"對數損失"&#xff08;也稱為"交叉熵損失"&#xff09;或"邏輯損失"。這些損失函數在訓練過程中用于衡量模型預測與實際標簽之間的差異&#xff0c;從而幫助模型逐步調整權重參數&#xff0c;以更好地擬合數…

指靜脈開集測試(OpenSet-test)代碼(包含7個數據集)

七個數據集:sdu、mmc、hkpu、scut、utfvp、vera、nupt 一、SDU 80%用于訓練,20%用于作為開集測試 1.數據集分割代碼 ①先把636個類別提取出來 func: 創建temp_sdu,將636個類劃分出來。下一個代碼塊將進行openset_sdu的分割import os from shutil import copy, rmtre…