本文目錄一覽:
- 1、java中error和exception有什麼區別
- 2、java不是整數,輸出error
- 3、java中error和exception分別有幾種?
- 4、java中錯誤(error)和異常(exception)有什麼主要區別?
- 5、Java如何獲取Error信息,是error不是Exception
- 6、為什麼java運行時候出現這個error?
java中error和exception有什麼區別
一、分類不同:
首先從繼承方面來說,Error和Exception都是Throwable的子類。Error比Exception更嚴重,不易通過後續代碼處理和修復,不應該被代碼catch到的錯誤。
而Exception是指嚴重程度較輕的程序問題,相較於Error更容易被後續代碼處理和修復的,有些需要通過try catch代碼處理,有些不建議通過try catch代碼處理。
二、含義不同:
Error就是程序運行時候拋出的最嚴重級別的錯誤了,如VirtualMachineError,ThreadDeath。拋出了Error的程序從Java設計的角度來講,程序基本不可以通過後續代碼修復,從而理應終止。
Exception 又分為可檢查(checked)異常和不檢查(unchecked)異常,可檢查異常在源代碼里必須顯式地進行捕獲處理,這是編譯期檢查的一部分。
好處
讓異常處理與業務邏輯的主線分離,我們可以對可以遇見的異常作分支處理,其實將業務邏輯與異常處理分離也是Exception設計的主旨,其次Java Exception 不需要像C語言那樣在程序的多個地方去檢測同一個錯誤,並就地作異常的處理,相比老式的錯誤處理,現行的錯誤處理的結構則來的更加清晰。
以上內容參考:百度百科-Exception
java不是整數,輸出error
學習
java學習第三課:java語法基礎(2)(零基礎)

小椰奶凍
原創
關注
0點贊·494人閱讀
本節學習java的輸入輸出的各種方法
1.不同類型的接收與輸出
package test3;
import java.util.Scanner;//想要實例化scanner對象不報錯,要在前面加這個
public class test2 {
public static void main(String args[]) {
// 一、不同類型的輸入輸出
// 1.實例化Scanner對象
Scanner sc = new Scanner(System.in);
// 2.接收數據
float a = sc.nextInt();// 接收整型數據
float b = sc.nextFloat();// 接收float型數據
double c = sc.nextDouble();// 接收double型數據
String d = sc.next();// 接收字元串類型-多用於中文
// 3.輸出數據
System.out.println(a);
System.out.println(b);
System.out.println(c);
System.out.println(d);// 這四種輸出類型相同
}
}
登錄後複製
2.根據用戶的輸入(整型數據),輸出對應的字元
package test3;
import java.util.Scanner;
public class test4 {
public static void main(String args[]) {
// 二、根據用戶的輸入(整型數據),輸出對應的字元
// 1.實例化Scanner對象
Scanner sc = new Scanner(System.in);
// 2.接收數據
int x = sc.nextInt();
// 根據需求輸出
char e = (char) x;
System.out.println(e);
}
}
登錄後複製
(在彙編語言中,我們曾經學過:a的ascii值為97,A的為65,且根據英語字母表向後依次對應,在此處可以用到。)
3.輸出10進位數字的8進位和16進位表示形式
package test3;
public class test5 {
public static void main(String[] args) {
int x = 109;
// 輸出10進位數字的8進位和16進位表示形式
System.out.printf(“%#o\n”, x);// 8進位(“%#o”,x)
System.out.printf(“%#x\n”, x);// 16進位(“%#x”,x)
}
}
登錄後複製
4.驗證是否為整數
package test3;
import java.util.Scanner;
public class test4 {
public static void main(String args[]) {
// 二、根據用戶的輸入(整型數據),輸出對應的字元
// 1.實例化Scanner對象
Scanner sc = new Scanner(System.in);
// 2.接收數據前,先去驗證用戶輸入的是否為整數,不是整數則用error
if (sc.hasNextInt()) {//用(sc.hasNextInt())驗證是否為整數
//如果驗證不是整數,則if(!sc.hasNextInt()){ }else{}
int x = sc.nextInt();// 接收到具體變數中
// 根據需求輸出
System.out.println(x);
} else {
System.out.println(“error”);
}
}
}
登錄後複製
本節習題:
題目一:用戶輸入一個整數,輸出這個整數的8進位表示和16進位表示。如果不為整數,則輸出error。
package test3;
import java.util.Scanner;
public class test6 {
public static void main(String[] args) {
// 題目一:用戶輸入一個整數,輸出這個整數的8進位表示和16進位表示。如果不為整數,則輸出error
Scanner sc = new Scanner(System.in);
if (sc.hasNextInt()) {// 先判斷是否為整數
int a = sc.nextInt();// 接收數據(整數)
System.out.printf(“%#o\n”, a);
System.out.printf(“%#x\n”, a);
} else {
System.out.println(“error”);
}
}
}
登錄後複製
題目二:編寫程序根據輸入的半徑,計算圓的周長,計算公式為:周長=2*半徑*圓周率。pi為3.14
package test3;
import java.util.Scanner;
public class test7 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 題目二:編寫程序根據輸入的半徑,計算圓的周長,計算公式為:周長=2*半徑*圓周率。pi為3.14
if (sc.hasNextFloat()) {//看輸入的是不是float類型
float r = sc.nextFloat();
float pi = 3.14f;
double a = 2 * r * pi;
System.out.printf(“%.2f”, a);
} else {
System.out.println(“error”);
}
}
}
java中error和exception分別有幾種?
常見的error有:
ArithmeticException(除數為0的異常), BufferOverflowException(緩衝區上溢異常), BufferUnderflowException(緩衝區下溢異常), IndexOutOfBoundsException(出界異常), NullPointerException(空指針異常), EmptyStackException(空棧異常), IllegalArgumentException(不合法的參數異常), NegativeArraySizeException, NoSuchElementException, SecurityException, SystemException, UndeclaredThrowableException
常見的exception有:
1. java.lang.NullPointerException
異常的解釋是”程序遇上了空指針”,簡單地說就是調用了未經初始化的對象或者是不存在的對象,即把數組的初始化和數組元素的初始化混淆起來了。數組的初始化是對數組分配需要的空間,而初始化後的數組,其中的元素並沒有實例化,依然是空的,所以還需要對每個元素都進行初始化(如果要調用的話)
2. java.lang.ClassNotFoundException異常的解釋是”指定的類不存在”。
3. java.lang.ArithmeticException這個異常的解釋是”數學運算異常”,比如程序中出現了除以零這樣的運算就會出這樣的異常。
4. java.lang.ArrayIndexOutOfBoundsException
異常的解釋是”數組下標越界”,現在程序中大多都有對數組的操作,因此在調用數組的時候一定要認真檢查,看自己調用的下標是不是超出了數組的範圍,一般來說,顯示(即直接用常數當下標)調用不太容易出這樣的錯,但隱式(即用變數表示下標)調用就經常出錯了,還有一種情況,是程序中定義的數組的長度是通過某些特定方法決定的,不是事先聲明的,這個時候,最好先查看一下數組的length,以免出現這個異常。
5. java.lang.IllegalArgumentException
這個異常的解釋是”方法的參數錯誤”,比如g.setColor(int red,int green,int blue)這個方法中的三個值,如果有超過255的也會出現這個異常,因此一旦發現這個異常,我們要做的,就是趕緊去檢查一下方法調用中的參數傳遞是不是出現了錯誤。
6. java.lang.IllegalAccessException
這個異常的解釋是”沒有訪問許可權”,當應用程序要調用一個類,但當前的方法即沒有對該類的訪問許可權便會出現這個異常。對程序中用了Package的情況下要注意這個異常
java中錯誤(error)和異常(exception)有什麼主要區別?
1.如圖Exception 和 Error都繼承自Throwable類,由jdk api文檔中對該類的描述可以知道它是異常處理機制的基本組成類型。可以由虛擬機拋出或者編碼者自行拋出(throw)
jdk8中文發翻譯Throwable類的描述:Throwable類是Java語言中所有錯誤和異常的Throwable類。 只有作為此類(或其一個子類)的實例的對象由Java虛擬機拋出,或者可以由Java throw語句拋出。 類似地,只有這個類或其子類可以是catch子句中的參數類型。
2.Exception 和 Error 體現了 Java 平台設計者對不同異常情況的分類。Exception 是程序正常運行中,可以預料的意外情況,可能並且應該被捕獲,進行相應處理。
3.Error 是指在正常情況下,不大可能出現的情況,絕大部分的 Error 都會導致程序(比如 JVM 自身)處於非正常的、不可恢復狀態。既然是非正常情況,所以不便於也不需要捕獲,常見的比如 OutOfMemoryError 之類,都是 Error 的子類。
4.Exception 又分為可檢查(checked)異常和不檢查(unchecked)異常,可檢查異常在源代碼里必須顯式地進行捕獲處理,這是編譯期檢查的一部分。前面我介紹的不可查的 Error,是 Throwable 不是 Exception。
如何處理這些異常?
在現實編程中我們一般使用 try-with-resources 和 multiple catch來進行一些異常處理(便利的特性),在編譯時期,會自動生成相應的處理邏輯,比如,自動按照約定俗成 close 那些擴展了 AutoCloseable 或者 Closeable 的對象。
try-with-resources 是一種處理Closeable實現類關閉資源的一種寫法,簡單寫了一個例子可以發現其實這就是一中語法,這種語法可以自動編譯幫忙編譯最後關閉流的操作:
public static void main(String[] args) {
try (BufferedReader br = new BufferedReader(new FileReader(“a”));
BufferedWriter writer = new BufferedWriter(new FileWriter(“a”))) {
// Try-with-resources
} catch (IOException e) {// Multiple catch
// Handle it
}
}
編譯後class
public static void main(String[] args) { try {
BufferedReader br = new BufferedReader(new FileReader(“a”));
Throwable var2 = null; try {
BufferedWriter writer = new BufferedWriter(new FileWriter(“a”));
Object var4 = null; if (writer != null) { if (var4 != null) { try {
writer.close();
} catch (Throwable var15) {
((Throwable)var4).addSuppressed(var15);
}
} else {
writer.close();
}
}
} catch (Throwable var16) {
var2 = var16; throw var16;
} finally { if (br != null) { if (var2 != null) { try {
br.close();
} catch (Throwable var14) {
var2.addSuppressed(var14);
}
} else {
br.close();
}
}
}
} catch (IOException var18) {
;
}
}
異常處理的兩個基本原則
盡量不要捕獲類似 Exception 這樣的通用異常,而是應該捕獲特定異常
這是因為在日常的開發和合作中,我們讀代碼的機會往往超過寫代碼,軟體工程是門協作的藝術,所以我們有義務讓自己的代碼能夠直觀地體現出盡量多的信息,而泛泛的 Exception 之類,恰恰隱藏了我們的目的。另外,我們也要保證程序不會捕獲到我們不希望捕獲的異常。比如,你可能更希望 RuntimeException 被擴散出來,而不是被捕獲。
不要生吞(swallow)異常。這是異常處理中要特別注意的事情,因為很可能會導致非常難以診斷的詭異情況。
如果我們不把異常拋出來,或者也沒有輸出到日誌(Logger)之類,程序可能在後續代碼以不可控的方式結束。沒人能夠輕易判斷究竟是哪裡拋出了異常,以及是什麼原因產生了異常。
在寫程序時可以通過Objects類(jdk提供),或者斷言等提前判斷問題,如空指針異常的一些值的處理Objects. requireNonNull(filename);而不是使用之後有問題再系統拋出異常,這可能就會不直觀的找到問題所在。即:Throw early, catch late 原則
希望對您有所幫助!~
Java如何獲取Error信息,是error不是Exception
error屬於編譯時錯誤,根本不會編譯通過,也就是不會生成.class文件,exception屬於運行時錯誤,只有在調用的時候才會報錯,比如空指針或數組下標越界等等。使用IDE編程,直接就顯示error錯誤了,不用專門去獲取。
為什麼java運行時候出現這個error?
這個是Java運行環境和編譯級別不兼容導致的
建議在cmd先通過”java -version” 指令查看Java運行環境版本, 之後再通過”javac -version” 指令查看Java的編譯版本, 結果參考下圖
如果版本不一致,說明電腦中存在多個Java環境, 建議修改環境變數,將多餘的Java變數配置去掉, 一般是path變數
原創文章,作者:XPXK,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/134774.html