摘要:異常異常的概述和分類異常的概述異常就是程序在運行過程中出現的錯誤。運行時異常就是程序員所犯的錯誤,需要回來修改代碼。獲取異常類名和異常信息,返回字符串。如果路徑名不同,就是改名并剪切。刪除注意事項中的刪除不走回收站。
1_異常(異常的概述和分類)
A:異常的概述
異常就是Java程序在運行過程中出現的錯誤。
B:異常的分類
通過API查看Throwable
Error
服務器宕機,數據庫崩潰等
Exception
C:異常的繼承體系
* Throwable * Error * Exception * RuntimeException2_異常(JVM默認是如何處理異常的)
A:JVM默認是如何處理異常的
main函數收到這個問題時,有兩種處理方式:
a:自己將該問題處理,然后繼續運行
b:自己沒有針對的處理方式,只有交給調用main的jvm來處理
jvm有一個默認的異常處理機制,就將該異常進行處理.
并將該異常的名稱,異常的信息.異常出現的位置打印在了控制臺上,同時將程序停止運行
B:案例演示
JVM默認如何處理異常
public class Demo1_Exception { public static void main(String[] args) { // demo1(); Demo d = new Demo(); int x = d.div(10, 0); //new ArithmeticException(/ by zero) 除數是0,違反算數運算法則 System.out.println(x); } private static void demo1() { int[] arr = {11,22,33,44,55}; // arr = null; //NullPointerException 空指針異常 System.out.println(arr[10]); //ArrayIndexOutOfBoundsException 數組索引越界異常 } } class Demo{ public int div(int a,int b) { return a / b; } }3_異常(try...catch的方式處理異常1)
A:異常處理的兩種方式
a:try…catch…finally
try catch
try catch finally
try finally
b:throws
B:try...catch處理異常的基本格式
try…catch…finally
C:案例演示
try...catch的方式處理1個異常
public class Demo2_Exception { /* try:用來檢測異常 catch:用來捕獲異常的 finally:釋放資源 當通過trycatch將異常處理,程序繼續向下執行*/ public static void main(String[] args) { Demo2 d = new Demo2(); try { int x = d.div(10, 0); System.out.println(x); }catch(ArithmeticException a) { System.out.println("出錯了,除數為0了"); } System.out.println("----------"); } } class Demo2{ public int div(int a,int b) { return a / b; } }4_異常(try...catch的方式處理異常2)
A:案例演示
try...catch的方式處理多個異常
JDK7以后處理多個異常的方式及注意事項
public class Demo3_Exception { //安卓:客戶端開發,如何處理異常?try{}catch(Exception e) {} //JavaEE:服務端開發,一般都是底層開發,從底層向上拋 public static void main(String[] args) { // demo1(); int a = 10; int b = 0; int[] arr = {11,22,33,44,55}; //JdK7如何處理多個異常 try { System.out.println(a / b); System.out.println(arr[10]); } catch (ArithmeticException | ArrayIndexOutOfBoundsException e) { System.out.println("出錯了"); } } private static void demo1() { int a = 10; int b = 0; int[] arr = {11,22,33,44,55}; try { System.out.println(a / b); System.out.println(arr[10]); arr = null; System.out.println(arr[0]); } catch (ArithmeticException e) { System.out.println("除數不能為零"); } catch (ArrayIndexOutOfBoundsException e) { System.out.println("索引越界了"); } catch (Exception e) { //Exception e = new NullPointerException(); System.out.println("出錯了"); } System.out.println("over"); } }5_異常(編譯期異常和運行期異常的區別)
A:編譯期異常和運行期異常的區別
Java中的異常被分為兩大類:編譯時異常和運行時異常。
所有的RuntimeException類及其子類的實例被稱為運行時異常,其他的異常就是編譯時異常
編譯時異常
Java程序必須顯示處理,否則程序就會發生錯誤,無法通過編譯
運行時異常
無需顯示處理,也可以和編譯時異常一樣處理
B:案例演示
編譯期異常和運行期異常的區別
import java.io.FileInputStream; public class Demo4_Exception { /* 編譯時異常:也叫健壯性異常,不處理編譯通不過。 運行時異常:就是程序員所犯的錯誤,需要回來修改代碼。 */ public static void main(String[] args) { try { FileInputStream fis = new FileInputStream("xxx.txt"); } catch (Exception e) { } } }6_異常(Throwable的幾個常見方法)
A:Throwable的幾個常見方法
a:getMessage()
獲取異常信息,返回字符串。
b:toString()
獲取異常類名和異常信息,返回字符串。
c:printStackTrace()
獲取異常類名和異常信息,以及異常出現在程序中的位置。返回值void。
B:案例演示
Throwable的幾個常見方法的基本使用
public class Demo5_throwable { public static void main(String[] args) { try { System.out.println(1/0); } catch (Exception e) { //Exception e = new ArithmeticException(" / by zero"); // System.out.println(e.getMessage()); //獲取異常信息 System.out.println(e); //調用toString方法,打印異常類名和異常信息 e.printStackTrace(); //jvm默認就用這種方式處理異常 } } }7_異常(throws的方式處理異常)
A:throws的方式處理異常
定義功能方法時,需要把出現的問題暴露出來讓調用者去處理。
那么就通過throws在方法上標識。
B:案例演示
舉例分別演示編譯時異常和運行時異常的拋出
public class Demo6_Exception {
//編譯時異常的拋出必須對其進行處理
//運行時異常的拋出可以處理也可以不處理
public static void main(String[] args) throws Exception { Person p = new Person(); p.setAge(-17); System.out.println(p.getAge()); } } class Person{ private String name; private int age; public Person() { super(); } public Person(String name, int age) { super(); this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) throws RuntimeException { if(age > 0 && age <= 150) { this.age = age; }else { throw new RuntimeException("年齡非法"); // System.out.println("請回火星吧"); } } }8_異常(throw的概述以及和throws的區別)
A:throw的概述
在功能方法內部出現某種情況,程序不能繼續運行,需要進行跳轉時,就用throw把異常對象拋出。
B:案例演示
分別演示編譯時異常對象和運行時異常對象的拋出
C:throws和throw的區別
a:throws
用在方法聲明后面,跟的是異常類名
可以跟多個異常類名,用逗號隔開
表示拋出異常,由該方法的調用者來處理
b:throw
用在方法體內,跟的是異常對象名
只能拋出一個異常對象名
表示拋出異常,由方法體內的語句處理
9_異常(finally關鍵字的特點及作用)
A:finally的特點
被finally控制的語句體一定會執行
特殊情況:在執行到finally之前jvm退出了(比如System.exit(0))
B:finally的作用
用于釋放資源,在IO流操作和數據庫操作中會見到
C:案例演示
finally關鍵字的特點及作用
public static void main(String[] args) { try { System.out.println(10/0); } catch (Exception e) { System.out.println("除數為零了"); System.exit(0); //退出jvm虛擬機 return; } finally { System.out.println("看看我執行了嗎"); } }10_異常(finally關鍵字的面試題)
A:面試題1
final,finally和finalize的區別
final可以修飾類不能被繼承,修飾方法不能被重寫,修飾變量只能賦值一次
finally是try語句中的一個語句體,不能多帶帶使用,用來釋放資源
finalize是一個方法,當垃圾回收器確定不存在該對象的更多引用時,由對象的垃圾回收器調用此方法。
B:面試題2
如果catch里面有return語句,請問finally的代碼還會執行嗎?如果會,請問是在return前還是return后。
public class Demo8_test { public static void main(String[] args) { Demo3 d = new Demo3(); System.out.println(d.method()); } } class Demo3 { public int method() { int x = 10; try { x = 20; System.out.println(1/0); return x; } catch (Exception e) { x = 30; return x; } finally { x = 40; } } }11_異常(自定義異常概述和基本使用)
A:為什么需要自定義異常
舉例:人的年齡
B:自定義異常概述
繼承自Exception
繼承自RuntimeException
C:案例演示
自定義異常的基本使用
class AgeOutOfBoundsException extends RuntimeException { public AgeOutOfBoundsException() { super(); } public AgeOutOfBoundsException(String message) { super(message); } }
public void setAge(int age) throws AgeOutOfBoundsException { if(age > 0 && age <= 150) { this.age = age; }else { throw new AgeOutOfBoundsException("年齡非法"); } }12_異常(異常的注意事項及如何使用異常處理)
A:異常注意事項
a:子類重寫父類方法時,子類的方法必須拋出相同的異常或父類異常的子類。(父親壞了,兒子不能比父親更壞)
b:如果父類拋出了多個異常,子類重寫父類時,只能拋出相同的異常或者是他的子集,子類不能拋出父類沒有的異常
c:如果被重寫的方法沒有異常拋出,那么子類的方法絕對不可以拋出異常,如果子類方法內有異常發生,那么子類只能try,不能throws
B:如何使用異常處理
原則:如果該功能內部可以將問題處理,用try,如果處理不了,交由調用者處理,這是用throws
區別:
后續程序需要繼續運行就try
后續程序不需要繼續運行就throws
如果JDK沒有提供對應的異常,需要自定義異常。
13_異常(練習)
鍵盤錄入一個int類型的整數,對其求二進制表現形式
如果錄入的整數過大,給予提示,錄入的整數過大請重新錄入一個整數BigInteger
如果錄入的是小數,給予提示,錄入的是小數,請重新錄入一個整數
如果錄入的是其他字符,給予提示,錄入的是非法字符,請重新錄入一個整數
import java.math.BigDecimal; import java.math.BigInteger; import java.util.Scanner; public class Demo10_test { /** 分析 * 1.創建鍵盤錄入對象 * 2.將鍵盤錄入的結果存儲在String類型的字符串中,存儲int類型中,如果有不符合條件的直接報錯,無法進行后續判斷 * 3.是鍵盤錄入的結果轉換成int類型的數據,是正確的還是錯誤的。 * 4.正確的直接轉換 * 5.錯誤的要對應的判斷 * */ public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("請輸入一個整數:"); while(true) { String line = sc.nextLine(); //將鍵盤錄入的結果存儲在line中 try { int num = Integer.parseInt(line); //將字符串轉換為整數 System.out.println(Integer.toBinaryString(num));//將整數轉換為二進制 break; //跳出循環 } catch (Exception e) { try { new BigInteger(line); System.out.println("錄入錯誤,您錄入的是一個過大的整數,請重新輸入:"); } catch (Exception e2) { //Alt + Shift + z try { new BigDecimal(line); System.out.println("錄入錯誤,您錄入的是一個小數,請重新輸入:"); } catch (Exception e3) { System.out.println("錄入錯誤,您錄入的是非法字符,請重新輸入:"); } } } } // BigInteger big = new BigInteger("123"); } }14_File類(File類的概述和構造方法)
A:File類的概述
File更應該叫做一個路徑
文件路徑或者文件夾路徑
路徑分為絕對路徑和相對路徑
絕對路徑是一個固定的路徑,從盤符開始
相對路徑相對于某個位置,在eclipse下是指當前項目下,在dos下
查看API指的是當前路徑
文件和目錄路徑名的抽象表示形式
B:構造方法
File(String pathname):根據一個路徑得到File對象
File(String parent, String child):根據一個目錄和一個子文件/目錄得到File對象
File(File parent, String child):根據一個父File對象和一個子文件/目錄得到File對象
C:案例演示
File類的構造方法
import java.io.File; public class Demo1_File { public static void main(String[] args) { // demo1(); // demo2(); File parent = new File("C:UsersalbertDesktopJavaGuide-masterJava相關"); String child = "ArrayList.md"; File file = new File(parent, child); System.out.println(file.exists()); System.out.println(parent.exists()); } private static void demo2() { String parent = "C:UsersalbertDesktopJavaGuide-masterJava相關"; String child = "ArrayList.md"; File file = new File(parent,child); System.out.println(file.exists()); } private static void demo1() { File file = new File("C:UsersalbertDesktopJavaGuide-masterJava相關"); System.out.println(file.exists()); File file2 = new File("xxx.txt"); System.out.println(file2.exists()); } }15_File類(File類的創建功能)
A:創建功能
public boolean createNewFile():創建文件 如果存在這樣的文件,就不創建了
public boolean mkdir():創建文件夾 如果存在這樣的文件夾,就不創建了
public boolean mkdirs():創建文件夾,如果父文件夾不存在,會幫你創建出來
B:案例演示
File類的創建功能
注意事項:
如果你創建文件或者文件夾忘了寫盤符路徑,那么,默認在項目路徑下。
import java.io.File; import java.io.IOException; public class Demo2_FileMethod { public static void main(String[] args) throws IOException { // demo1(); File dir1 = new File("aaa"); System.out.println(dir1.mkdir()); File dir2 = new File("bbb.txt"); System.out.println(dir2.mkdir()); File dir3 = new File("cccffffd"); System.out.println(dir3.mkdirs()); //創建多級目錄 } private static void demo1() throws IOException { File file = new File("yyy.txt"); //創建文件 System.out.println(file.createNewFile()); //如果沒喲就創建,返回true File file2 = new File("zzz"); System.out.println(file2.createNewFile()); } }16_File類(File類的重命名和刪除功能)
A:重命名和刪除功能
public boolean renameTo(File dest):把文件重命名為指定的文件路徑
public boolean delete():刪除文件或者文件夾
B:重命名注意事項
如果路徑名相同,就是改名。
如果路徑名不同,就是改名并剪切。
C:刪除注意事項:
Java中的刪除不走回收站。
要刪除一個文件夾,請注意該文件夾內不能包含文件或者文件夾
import java.io.File; public class Demo3_FileMethod { public static void main(String[] args) { // demo1(); File file1 = new File("yyy.txt"); System.out.println(file1.delete()); File file2 = new File("aaa"); System.out.println(file2.delete()); File file3 = new File("ccc"); //被刪除的文件必須為空 System.out.println(file3.delete()); } private static void demo1() { File file1 = new File("ooo.txt"); File file2 = new File("D:xxx.txt"); System.out.println(file1.renameTo(file2)); } }17_File類(File類的判斷功能)
A:判斷功能
public boolean isDirectory():判斷是否是目錄
public boolean isFile():判斷是否是文件
public boolean exists():判斷是否存在
public boolean canRead():判斷是否可讀
public boolean canWrite():判斷是否可寫
public boolean isHidden():判斷是否隱藏
B:案例演示
File類的判斷功能
import java.io.File; public class Demo4_FileMethod { public static void main(String[] args) { // demo1(); File file = new File("zzz"); file.setReadable(false); //windows認為所有的文件都是可讀的 System.out.println(file.canRead()); file.setWritable(true); System.out.println(file.canWrite()); //windows系統可以設置為不可寫 File file2 = new File("lalala.txt"); System.out.println(file2.isHidden()); //判斷是否是隱藏文件 } private static void demo1() { File dir1 = new File("ccc"); System.out.println(dir1.isDirectory()); //判斷是否是文件夾 File dir2 = new File("zzz"); System.out.println(dir2.isDirectory()); System.out.println(dir1.isFile()); //判斷是否是文件 System.out.println(dir2.isFile()); } }18_File類(File類的獲取功能)
A:獲取功能
public String getAbsolutePath():獲取絕對路徑
public String getPath():獲取路徑
public String getName():獲取名稱
public long length():獲取長度。字節數
public long lastModified():獲取最后一次的修改時間,毫秒值
public String[] list():獲取指定目錄下的所有文件或者文件夾的名稱數組
public File[] listFiles():獲取指定目錄下的所有文件或者文件夾的File數組
B:案例演示
File類的獲取功能
import java.io.File; import java.text.SimpleDateFormat; import java.util.Date; public class Demo5_FileMethod { public static void main(String[] args) { // demo1(); File dir = new File("E:JavaworkJavaSE_File"); String[] arr = dir.list(); //僅為了獲取文件名 for (String string : arr) { System.out.println(string); } File[] subFiles = dir.listFiles(); for (File file : subFiles) { //獲取文件對象 System.out.println(file); } } private static void demo1() { File file1 = new File("ccc.txt"); File file2 = new File("E:JavaworkJavaSE_Fileccc.txt"); // System.out.println(file1.getAbsolutePath()); //獲取絕對路徑 // System.out.println(file2.getAbsolutePath()); // System.out.println(file1.getPath()); //獲取構造方法中傳入的路徑 // System.out.println(file2.getPath()); // System.out.println(file1.getName()); // System.out.println(file2.getName()); //獲取文件或文件夾的名稱 // System.out.println(file1.length()); // System.out.println(file2.length()); Date d = new Date(file1.lastModified()); //文件的最后修改時間 SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss"); System.out.println(sdf.format(d)); System.out.println(file2.lastModified()); } }19_File類(輸出指定目錄下指定后綴的文件名)
A:案例演示
需求:判斷E盤目錄下是否有后綴名為.jpg的文件,如果有,就輸出該文件名稱
import java.io.File; public class Demo6_test { /** A:案例演示 * 需求:判斷E盤目錄下是否有后綴名為.jpg的文件,如果有,就輸出該文件名稱*/ public static void main(String[] args) { File dir = new File("E:"); /*String[] arr = dir.list(); //獲取E盤下所有文件及文件夾 for (String string : arr) { if(string.endsWith(".jpg")) { System.out.println(string); } }*/ File[] subFiles = dir.listFiles(); //獲取E盤下所有的文件和文件夾對象 for (File subFile : subFiles) { if(subFile.isFile() && subFile.getName().endsWith(".jpg")) { System.out.println(subFile); } } } }20_File類(文件名稱過濾器的概述及使用)
A:文件名稱過濾器的概述
public String[] list(FilenameFilter filter)
public File[] listFiles(FileFilter filter)
B:文件名稱過濾器的使用
需求:判斷E盤目錄下是否有后綴名為.jpg的文件,如果有,就輸出該文件名稱
C:源碼分析
帶文件名稱過濾器的list()方法的源碼
File dir = new File("E:"); String[] arr = dir.list(new FilenameFilter() { @Override public boolean accept(File dir, String name) { // System.out.println(dir); // System.out.println(name); File file = new File(dir, name); return file.isFile() && file.getName().endsWith(".jpg"); } }); for (String string : arr) { System.out.println(string); }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/77286.html
摘要:字符流字符流是什么字符流是可以直接讀寫字符的流字符流讀取字符就要先讀取到字節數據然后轉為字符如果要寫出字符需要把字符轉為字節再寫出類的方法可以按照字符大小讀取通過項目默認的碼表一次讀取一個字符賦值給將讀到的字符強轉后打印字符流類的方法可以 1_字符流FileReader 1.字符流是什么 字符流是可以直接讀寫字符的IO流 字符流讀取字符, 就要先讀取到字節數據, 然后轉為字符. ...
摘要:下一代服務端開發下一代服務端開發第部門快速開始第章快速開始環境準備,,快速上手實現一個第章企業級服務開發從到語言的缺點發展歷程的缺點為什么是產生的背景解決了哪些問題為什么是的發展歷程容器的配置地獄是什么從到下一代企業級服務開發在移動開發領域 《 Kotlin + Spring Boot : 下一代 Java 服務端開發 》 Kotlin + Spring Boot : 下一代 Java...
摘要:可處理中成員變量和參數重名的情況。可看作是一個變量,它的值是當前對象的引用聲明的成員變量為成員變量,它為該類的公用變量,在第一次使用時被初始化。經常出,不用逮壓路面上的小石子異常是提供的用于處理程序中錯誤的一種機制。 Chap 3 Java OO focus on : * 對象和類的概念 * 類 (對類) 之間的關系 * 面向對象...
摘要:與的作用是對基本數據和對象進行序列化操作進行支持。如果檢測到反序列化的類的和對象二進制流的不同,則會拋出異常。 ObjectInputStream與ObjectOutputStream的作用是:對基本數據和對象進行序列化操作進行支持。其中ObjectInputStream對象提供對基本數據和對象對持久存儲,當我們需要讀取這些存儲這些基本數據或對象時,可以創建文件輸入流對應的Object...
摘要:正則表達式的概述和簡單使用正則表達式是指一個用來描述或者匹配一系列符合某個語法規則的字符串的單個字符串。例如,在表達式中,存在四個這樣的組組零始終代表整個表達式。 1_正則表達式的概述和簡單使用 A:正則表達式 是指一個用來描述或者匹配一系列符合某個語法規則的字符串的單個字符串。其實就是一種規則。有自己特殊的應用。 作用:比如注冊郵箱,郵箱有用戶名和密碼,一般會對其限制長度,這個...
閱讀 3398·2021-10-11 11:06
閱讀 2182·2019-08-29 11:10
閱讀 1944·2019-08-26 18:18
閱讀 3255·2019-08-26 13:34
閱讀 1559·2019-08-23 16:45
閱讀 1037·2019-08-23 16:29
閱讀 2797·2019-08-23 13:11
閱讀 3226·2019-08-23 12:58