//1.常见异常
package com.mlt.d3_exception; public class ExceptionDemo { public static void main(String[] args) { //1.数组索引越界异常:ArrayIndexOutOfBoundsException int[] arr={1,2,3}; System.out.println(arr[1]); // System.out.println(arr[3]);//运行出错 程序终止 //2.空指针异常:NullPointerException.直接输出没用问题,但是调用空指针的变量就会出错 String name=null; System.out.println(name); // System.out.println(name.length());运行出错 程序终止 //3.类型转换异常:ClassCastExxwption Object o =23; // String s = (String) o;运行出错 程序终止 //4.数字操作异常:ArithmeticException // int a=10/0; 运行出错 程序终止 //5.数字转换异常:NumberFormatException String s1="23a"; //Integer a =Integer.valueOf(s1); 运行出错 程序终止 System.out.println(); System.out.println("程序结束-----"); } }
//2 编译时异常
package com.mlt.d5_exception_javac; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class ExceptionDemo { public static void main(String[] args) throws ParseException {//需要解决 String date="2022-08-01 19:07:22"; //创建一个简单日期格式化对象 SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //解析字符串成为时间对象 Date d =sdf.parse(date); System.out.println(d); } }
//3.默认主线程
package com.mlt.d6_exception_default; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class ExceptionDemo { public static void main(String[] args) throws ParseException { System.out.println("程序开始。。。"); avg(10,0); System.out.println("程序结束。。。"); } public static int avg(int a,int b){ System.out.println(a); System.out.println(b); int c=a/b; return c; } }
//4.可以使用 try catch捕捉
package com.mlt.d7_exception_handle; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.InputStream; import java.text.SimpleDateFormat; import java.util.Date; public class ExceptionDemo03 { public static void main(String[] args) { System.out.println("程序开始。。。"); //创建一个简单日期格式化对象 try { prase1("2022-08-01 19:07:22"); System.out.println("成功!"); } catch (Exception e) { e.printStackTrace(); System.out.println("失败!"); } System.out.println("程序结束。。。"); } public static void prase1(String date) throws Exception { SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //解析字符串成为时间对象 Date d =sdf.parse(date); System.out.println(d); InputStream is=new FileInputStream("e"); } }
//5.运行时异常 代码有问题
package com.mlt.d8_exception_runtime; import java.util.Scanner; public class Test { public static void main(String[] args) { //键盘输入 必须是23.5 Scanner sc =new Scanner(System.in); while (true){ try { System.out.println("请输入你的定价!"); String s= sc.nextLine(); double d= Double.valueOf(s); if (d>0){ System.out.println("定价成功!"+d); break; }else { System.out.println("定价失败请输入正数!"); } } catch (NumberFormatException e) { System.out.println("您输入的格式有误!请输入输入!最好是正数"); } } } }
//6.自定义异常
package com.mlt.d9_exception_custom; public class AgeException extends Exception{ public AgeException() { } public AgeException(String message) { super(message); } }
package com.mlt.d9_exception_custom; public class AgeRuntimeException extends RuntimeException{ public AgeRuntimeException() { } public AgeRuntimeException(String message) { super(message); } }
package com.mlt.d9_exception_custom; public class ExceptionDemo { public static void main(String[] args) { // try { // checkAge(-34); // } catch (AgeException e) { // e.printStackTrace(); // } checkAge2(-34); } private static void checkAge2(int i) { //抛出去异常给调用者 //throw:在方法内部直接创建一个异常对象,并从此点抛出 //throws:用在方法申明上的,抛出方法内部的异常 if(i>200||i<0){ throw new AgeRuntimeException(i+ " is agebaocuo"); }else { System.out.println("执行成功!为"+i); } } private static void checkAge(int i) throws AgeException { //抛出去异常给调用者 //throw:在方法内部直接创建一个异常对象,并从此点抛出 //throws:用在方法申明上的,抛出方法内部的异常 if(i>200||i<0){ throw new AgeException(i+ " is agebaocuo"); }else { System.out.println("执行成功!为"+i); } } }