Java异常

来源:互联网 发布:轩辕剑披风进阶数据 编辑:程序博客网 时间:2024/06/08 08:42

Java异常

1.异常:java语言中异常的超类(父类):Throwable

 error: 严重问题:实际开发中遇见这种问题,(程序员不可避免的问题:内存异常:OutOfMemeory)
   Exception:
      编译时期异常:一般情况下,出现该异常,程序不能运行,需要我们去解决问题!
  运行时期异常:RuntimeException:不是运行运行时期出现的异常,都是编译时期异常
编译通过了,运行过程中发生的问题,一般情况:代码的不够严谨!

2. 捕获异常:

1)一个异常
  try..catch
  2)2个异常
  分别进行try...catch
  一个try,多个catch的情况

  
  注意:Exception这个类是属于运行时期异常的父类,大异常中包含很的子类,捕获Exception,将该异常类名写到子类的后面而不能写到子类的前面
代码:
public class ExceptionDemo2 {
public static void main(String[] args) {
        int a = 10 ;
int b = 0 ;
int[] arr = {1,2,3} ;
method1();
method2();
method3();
}
private static void method3() {
//两个异常:
//一个try,多个cacth
int a = 10 ;
int b = 0 ;
int[] arr = {1,2,3} ;

try{
System.out.println(arr[3]);
System.out.println(a/b);
}catch(ArithmeticException e){
System.out.println("除数不能为0");
}catch(ArrayIndexOutOfBoundsException e){
System.out.println("你访问了不存在的索引");
}
}


private static void method2() {
//两个异常:
//分别try...catch
int a = 10 ;
int b = 0 ;
try{
System.out.println(a/b);
}catch(ArithmeticException e){
System.out.println("除数不能为0");
}

//定义一个数组
int[] arr = {1,2,3} ;
try{
System.out.println(arr[3]);
}catch(ArrayIndexOutOfBoundsException e){
System.out.println("访问了不存在的索引");
}
}


private static void method1() {
//定义变量
int a = 10 ;
int b = 0 ;

try {
System.out.println(a/b); //
} catch (ArithmeticException e) {
System.out.println("除数不能为0");
}
}
}

3.  JDK7以后出现了一种新的格式:

  try{
  可能出现问题的 代码
  }cahtch(异常类名1 | 异常类名2 |异常类名3 变量名){
  处理异常!
  }
  
  注意:这种格式在一些开可能会使用,弊端:比如在实际开发,可能需要抛出的是同一种类型的异常,

  
  对于这种格式并不是很好(建议使用:try...catch/try...cathc...catch)

4.  如何解决异常!

 
 解决异常:两种方式:
  1)try...cahtch...finally...捕获异常:
  变形格式:try...catch...
  try...catch...cahtch
 
  try{
  可能出现问题的代码
  }catch(异常类名 变量名){
  进行异常的处理
  }
执行流程:如果try中的代码如果出现问题了,并且这个问题和catch后面的描述异常类名一致,那么就会执行catch里面的内容
  
2)throws抛出
  有时候,需要直接系统需要抛出异常:抛出异常使用一个关键字
throws:抛出
  后面的跟的是一个异常类名
  用法:是在方法声明上进行抛出的
     
  抛出的时候建议抛出具体的异常

代码public class ExceptionDemo {
public static void main(String[] args) throws ParseException {
//String--->Date
String s = "2017-8-13" ;

//创建SimpleDateFormat对象
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date d = sdf.parse(s) ;
System.out.println(d);
}
}


 5. 运行时期异常:

无需显示处理,也可以和编译时期处理一样

 编译时期异常:java开发者必须进行处理,否则程序不能运行,显示处理
 
6.
  面试题:

  throws和throw的区别?:两个都是抛出
  
  throws:后面跟的异常类名,并且可以跟多个异常类名,中间用逗号隔开
   throws表示的出现异常的一种可能性,执行throws可能会出现异常
   throws开发中用的比较多
   throws用在方法声明上,在方法声明上进行抛出异常
  throw:后面gender是异常对象,匿名对象
  throw:用在方法中进行抛出(语句中)
  throw:表示异常的肯定,执行throw,一定会抛出这个异常

 
  小结:
  编译时期异常,告诉开发者,有问题,要注意(调用者必须进行处理!)

public class ExceptionDemo {
public static void main(String[] args) {
System.out.println("今天天气很好....");
try {
method1();
} catch (ParseException e) {
e.printStackTrace();
}

method2();
System.out.println("就是不该地震...");
}

public static void method2(){
int a = 10 ;
int b = 0 ;
if(b==0){
throw new ArithmeticException();//代码执行,肯定抛出异常
}else{
System.out.println(a/b);
}
}


//ParseException:编译时期异常:告诉开发者:注意了,我有问题了
public  static void method1() throws ParseException{
String s = "2017-8-15" ;
//SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss") ;//出错了!
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date d = sdf.parse(s) ;
System.out.println(d);
}
}

7. try...catch...捕获:

 
 当try中的代码出现问题的时候,jvm会在try里面会产生一个异常对象,如何异常对象和catch后面的类进行匹配,匹配正确,就会执行catch中的代码
 
  Exception类中有一些方法:
  getMessage():消息子字符串
  toString():
  全路径名称:+空格+getMessage()
 
  printstackTrace():将异常信息打印在控制台:
  异常出现的代码的位置:
  当前出现的异常类名等等

代码:
public class ExceptionDemo2 {
public static void main(String[] args) {
String s = "2017-8-15";

//创建SimpleDateFormat对象
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss") ;

try{
Date d =sdf.parse(s) ;//try中的代码越少越好:java虚拟机在这里产生一个异常对象:ParseExcetion e = new ParseException() ;
System.out.println(d);
}catch (ParseException e) {//匹配一致,就会执行catch中的代码
//e就是异常类名的对象
String ss = e.getMessage() ;
System.out.println(ss);
//Unparseable date: "2017-8-15"

String ss2 = e.toString();
System.out.println(ss2);
//ava.text.ParseException: Unparseable date: "2017-8-15"
e.printStackTrace();

}

}
}
原创粉丝点击