占位符
Java中,%d和%f分別用來表示輸出時,替換整型輸出和浮點型輸出的占位符。
如:
int a=10;
float b = 23.4f;
System.out.printf("整數是:%d,小數是:%f",a,b);
輸出結果是:整數是:10小數是:23.4
異常機制
三種情況:
import java.util.InputMismatchException; import java.util.Scanner; /** * 1,未發生異常 * try模塊正常執行 * 執行完以后執行try catch后面的代碼塊 * 2,發生了catch 捕獲的異常 * try模塊剩余的代碼將不再執行 * 執行對應的catch模塊 * 繼續執行try catch 后面的代碼 * 3,發生了未捕獲的異常 * try 模塊剩余的代碼不再執行 * 程序直接崩潰 * * @author tang * */ public class Test01 { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.println("請輸入被除數"); int n1 = 0; try { //可能會產生異常的代碼塊 n1 = input.nextInt(); System.out.println("被除數輸入成功"); } catch (InputMismatchException e) { //一旦發生了異常 並且匹配成功 要么就把異常的信息打印出來 要么就寫入到日志文件 e.printStackTrace(); System.out.println("輸入的必須是數字"); } System.out.println("程序結束"); } }
當interger創建對象時傳入不是數字類型的字符時,會報numberFormatException!!
聲明多個異常用逗號隔開!!
finally關鍵字
public class FinallyDemo { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.println("請輸入被除數"); int n1 = 0; int n2 = 0; try { //可能會產生異常的代碼塊 n1 = input.nextInt(); System.out.println("請輸入除數"); n2 = input.nextInt(); System.out.println(n1/n2); } catch (InputMismatchException e) { //一旦發生了異常 並且匹配成功 要么就把異常的信息打印出來 要么就寫入到日志文件 //e.printStackTrace(); System.out.println("輸入的必須是數字"); return; } catch (ArithmeticException e) { System.out.println("發生了數學運算的異常"); } catch (Exception e) { System.out.println("發生了未知異常"); }finally{ //finally 這個代碼塊 不管程序是否發生異常 總是會執行 //一般做一些關閉數據庫連接 關閉io流等一些必須的操作 //System.exit(0); 只有手動退出虛擬機的時候 程序不會執行finally模塊 //當代碼塊中有return的時候 先執行finally 再return System.out.println("finally"); } System.out.println("程序結束"); } }
throws關鍵字
/** * throws 當一個方法內發生了異常 * 但是無法解決異常,則可以使用throws 將異常拋出 * 哪里調用了該方法,哪里就獲取到該異常 * @author tang * */ public class TestThrows { public static void main(String[] args) throws InterruptedException { test(); } public static void test() throws InterruptedException { Thread.sleep(1000); } }
throw關鍵字(自定義異常對象的描述信息!)
public class TestThrow { public static void main(String[] args) { Person wangcai = new Person(); try { wangcai.setGender("ladyboy"); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } class Person{ private String name; private String gender; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getGender() { return gender; } public void setGender(String gender) throws Exception { if ("男".equals(gender) || "女".equals(gender)) { this.gender = gender; }else { Exception ex = new Exception("性別只能是男或女"); throw ex; } } }
自定義異常
public class GenderException extends Exception{ public GenderException() { super(); } public GenderException(String arg0) { super(arg0); } }
public class AgeException extends Exception{ public AgeException() { super(); // TODO Auto-generated constructor stub } public AgeException(String arg0) { super(arg0); } }
public class Person { private String name; private String gender; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getGender() { return gender; } public void setGender(String gender) throws GenderException { if ("男".equals(gender) || "女".equals(gender)) { this.gender = gender; }else { GenderException ex = new GenderException("性別只能是男或女"); throw ex; } } public int getAge() { return age; } public void setAge(int age) throws AgeException { if (age > 0 && age < 200) { this.age = age; }else{ AgeException ex = new AgeException("年齡必須是0~200"); throw ex; } } }
還可以這樣制造異常
public class Test { public static void main(String[] args) { Person wangcai = new Person(); wangcai.setName("旺財"); try { wangcai.setAge(300); wangcai.setGender("ladyboy"); } catch (AgeException e ) { // TODO Auto-generated catch block e.printStackTrace(); } catch (GenderException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }