如果有时学东西概念太多了,可以反着学,从结果到过程,从代码到概念,也许就不会那么枯燥了,比如学反射的时候。
java异常复习
异常和错误的区别?
异常:程序或环境本身出现错误。(程序员可以捕获并处理)
错误:内部系统错误。(程序员不用做什么,程序员通知用户关掉它即可。)
类Scanner、nextInt用法及其含义:
import java.util.Scanner; public class TestException2{ public static void main(String[] args) { Scanner input=new Scanner(System.in); // int a,b; try{ System.out.println("输入被除数:"); a=input.nextInt(); System.out.println("输入除数:"); b=input.nextInt(); System.out.println("两数相除结果为:"+a/b); }catch(InputMismatchException e){ System.out.println("你输入的不是数字,这里必须是数字。"); } } }
/*
类Scanner:一个可以使用正则表达是来解析基本类型
和字符串的简单文本扫描器。
如:用户能够从System.in中读取一个数:
Scanner sc=new Scanner(System.in);
int i=sc.nextInt();
//nextInt():类java.util.Random中的方法,返回下一个伪随机数(这里的随机是相对的)
随机数生成器中的一个均匀分布的一个int值
下面是从一个字符串读取若干项的例子:
String input = "1 fish 2 fish red fish blue fish"; Scanner s = new Scanner(input).useDelimiter("\s*fish\s*"); System.out.println(s.nextInt()); System.out.println(s.nextInt()); System.out.println(s.next()); System.out.println(s.next()); s.close();
输出为:
1
2
red
blue
是如何实现跳读的?
*/
异常语法格式总结:
try{
//程序需要执行的代码,可能有错
}catch(异常类 变量名){
//若出现异常类,要执行的代码块
}
//异常类自定义或继承Exception类或子类定义的,
异常对象一是运行时环境自动抛出的,比如除数不能为零,二是用户自定义的。
finally:任何情况下必须执行的代码,finally唯一不被执行的情况是存在System.exit()终止了JVM的运行。
import Java.util.InputMismatchException; import Java.util.Scanner; public class TestException{ public static void main(String[] args){ Scanner input=new Scanner(System.in); int a,b; try{ System.out.println("输入被除数:"); a=input.nextInt(); System.out.println("输入除数:"); b=input.nextInt(); System.out.println("两数相除结果为:"+a/b); } catch (InputMismatchException e) { System.out.println("你输入的不是数字,这里必须是数字!"); }catch(ArithmeticException e){ System.out.println("你输入的数字除数为0"); Sytem.out.println(e.getMessage()); }catch (Exception e) { System.out.println("程序出错了!") }finally{ System.out.println("无论异常与否,都会执行这里!"); } } }
4.throws
有些异常用户不想处理时,用户可能没办法处理或者不想处理,则可以把方法头加上throws语句来放弃本方法处理。
import Java.util.InputMismatchException; import Java.util.Scanner; public class TestException{ public static void main(String[] args) throws InputMismatchException, ArithmeticException,Exception{ Scanner input=new Scanner(System.int); int a,b; System.out.println("输入被除数:"); a=input.nextInt(); System.out.println("输入除数:"); b=input.nextInt(); Sysem.out.println("两数相除的结果是:"+a/b); } }
如果JVM追溯到调用栈最底部main方法时,仍没有找到异常代码块,则
1)调用异常对象printStackTrace()方法,打印方法调用栈的异常信息。
2)如果出现异常线程为主线程,则程序运行终止;若非主线程,则终止,让其他线程继续。
说明:用throws是一种消极的异常用法,所以不提倡,且耗资源和时间多。
(增加了JVM的运行时间)
5.自定义异常:类java.lang.Throwable是所有类的基类,它包括两个子类:Exception和Error。Exception是
描述程序捕获的异常,如ClassNotFoundException。Error类用于指示合理应用程序但是由于
JVM出现的错误,比如虚拟机错误VirtualMachineError。(错误不允许程序员捕获)
自定义异常可以继承Throwable类或Exception,而不要继承Error类。且自定义异常间可以有继承。
public要为自定义异常设计工作函数,为方便构造自定义异常对象。
public class MyException extends exception{ public MyException(){ super(); } public MyException(String msg){ super(msg); } }
上面这种MyException类才叫异常类,异常类通过throw关键字来手动抛出异常。
手动抛出异常语法格式:
throw new 异常类();
如:
public void setAge(int age) throws MyException{ if(age<0 || age>100){ throw new MyException(“年龄不符合要求”); }else{ this.age=age; } } … //测试类中 try{ t1.setAge(1000); }catch(MyException e){ e.printStackTrace(); }
或者
在测试类中用throws来继承MyException,交给JVM来处理
即public static void main(String[] args)throws MyException{…}