A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© trj1123131766 中级黑马   /  2015-8-7 23:48  /  160 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

各位对异常有什么看法?本人觉得好像没什么意义.

5 个回复

倒序浏览
分享一点笔记给你。


  1. /**
  2.     异常概述:   
  3.         程序中会出现问题,Java 是完全面向对象的语言,将这些问题也进行了对象的封装.
  4.         这些问题在程序中出现,Java封装成了对象,由于问题比较多,就存在很多对象.这些对象统称为异常.
  5.         由于程序中会出现各种问题,存在各种对象,但是这些都有一些共性,都叫做异常,也就组成一个异常的体系.
  6.     异常体系:
  7.         java.lang.Throwable
  8.             Throwable 类是 Java 语言中所有错误或异常的超类。
  9.         public class Throwable extends Object implements Serializable
  10.             该类父类是Object 类,并且实现了Serializable(序列化)
  11.             该类没有被abstract 修饰->有可能可以创建对象.
  12.             该类没有被final 修饰->该类有可能有子类
  13.             该类有两个子类  Error (错误) Exception(异常)
  14.         |---Throwable 异常体系的顶层父类
  15.             |---Error  错误  
  16.                 NoClassDefFoundError 来加载失败, java 类名  JVM 根据类名加载字节码文件. 字节码文件存在.出现该问题.
  17.                 了解.
  18.                 该类还有子类,并且该类的子类大部分的后缀名都是Error ,表示错误,在程序中无法解决.
  19.             |---Exception 异常
  20.                 程序中出现的问题. 编译出现问题,运行时候也可能出现问题...
  21.         如何查看一个现有的类怎么使用:
  22.             方案一: 直接查看源代码
  23.             方案二: 查看API文档说明. 有关于Java 内置类的详细的说明.
  24.         查看文档:
  25.             类的描述,是否是abstract 是否是final
  26.             如果是abstract 就不能创建对象了
  27.             如果是final 就不能有子类了.
  28.             查看构造函数:
  29.                 如果构造函数非私有的,Java提供的构造函数一般都是public 的,
  30.             查看构造函数的参数类型
  31.                 来决定,调用构造函数传递的实参.
  32.             查看方法:
  33.                 一个方法就是一个独立的功能,找到了合适的方法,就可以方便解决问题.
  34.         Throwable  类的构造函数:
  35.             Throwable() 无参数构造
  36.             Throwable(String message)  有参数构造
  37.         Throwable  类提供的成员方法:
  38.             toString() 该方法返回一个字符串.
  39.                 返回了一个Throwable 对象的描述.
  40.                 重写父类Object 类中的toString 方法.
  41.             getMessage() 获取异常的信息
  42.             printStackTrace()
  43.                 获取异常的栈信息,所有的相关的异常信息.
  44.         学习Sun 公司提供的类.
  45.             学习什么? 学习该类是否可以创建对象,该类提供什么功能,如何使用.
  46.             找到专业的对象,做专业的事情.
  47.             如果Sun 提供的类的内部的编写(实现)感兴趣,可以查看源代码.
  48.         
  49.             
  50.                         
  51.         
  52.    
  53.    
  54.    
  55. */
  56. public class Demo1{
  57.       public static void main(String[] args){
  58.               //printArr();
  59.               //Throwable 创建对象.
  60.               Throwable th=new Throwable();
  61.               // 打印对象名  默认 : 类名@哈希码值  
  62.               // 该对象仅仅打印了一个类名
  63.               System.out.println(th);
  64.               // toString 是父类Object 类中的方法. 子类肯定重写了该方法.
  65.               System.out.println(th.toString());
  66.               
  67.               // 调用Throwable 类的有参数构造.创建对象. 通过有参数构造给Throwable 传递了异常的字符串形式的描述.
  68.               Throwable th1=new Throwable("头晕,恶心");
  69.         System.out.println(th1);
  70.         // 获取异常的描述.
  71.         System.out.println(th1.getMessage());
  72.         // 获取异常对象的所有的相关的异常信息
  73.         System.out.println(th1.printStackTrace());
  74.         
  75.         
  76.         
  77.         
  78.         // 自定义MyThrowable 类
  79.         MyThrowable myth1=new MyThrowable();
  80.         System.out.println(myth1);
  81.         System.out.println(myth1.toString());
  82.         // 自定义类提供了有参数构造,可以接收字符串形式的信息
  83.         MyThrowable myth2=new MyThrowable("头晕,恶心");
  84.         System.out.println(myth2);
  85.         // 获取信息
  86.         System.out.println(myth2.getMessage());
  87.         
  88.         
  89.       }
  90.       public static void printArr(){
  91.               int[] arr=new int[3];
  92.               System.out.println(arr[3]); // 程序运行中,会出现问题,JVM 将问题进行了对象的封装. 就是异常.
  93.       }
  94. }
  95. class MyThrowable{
  96.     private String message;
  97.    
  98.     MyThrowable(){
  99.         
  100.     }
  101.    
  102.     MyThrowable(String mess){
  103.         this.message=mess;
  104.     }
  105.    
  106.     public String getMessage(){
  107.         return this.message;
  108.     }
  109.    
  110.     /**
  111.         重写父类toString方法
  112.     */
  113.     public String toString(){
  114.         return "MyThrowable: "+this.message;
  115.     }
  116. }

  117. /**
  118. Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
  119.         at Demo1.printArr(Demo1.java:7)
  120.         at Demo1.main(Demo1.java:3)
  121.         
  122. Exception in thread "main" java.lang.NoClassDefFoundError   
  123. */
复制代码
回复 使用道具 举报
异常的第一种处理方式: cry  catch

  1. public class Test2{
  2.       public static void main(String[] args){
  3.         System.out.println("程序启动");
  4.         //div(10,5);
  5.         div(10,0);
  6.         System.out.println("程序over");
  7.         
  8.       }
  9.       /**
  10.           定义函数进行除法运算
  11.           该函数如果除数为0,程序无法正常工作... 直接出现异常对象,程序并提前结束.
  12.           解决问题:
  13.               需要即使出现了异常还可以正常的运行...
  14.           解决方案:
  15.               使用try catch  语句
  16.       */
  17.       public static void div(int i,int j){
  18.               System.out.println("除法运算start...");
  19.               try{
  20.                   int result=i/j;  // 该行代码,程序有可能出现问题,当出现问题时,JVM 将问题进行了对象的封装,产生一个异常对象.
  21.                                // 本例中是算术异常 ArithmeticException   如果出现异常程序员不处理,JVM 直接停止程序,并将异常的信息打印在控制台.
  22.                   System.out.println(result);
  23.               }catch(ArithmeticException e){// 在catch 语句中可以捕获try 语句中产生的异常对象. 本质就是接受一个对象.
  24.                                         // 类类型 对象名
  25.                   //具体的异常处理的解决方案...                       
  26.                   System.out.println("你的数学是,英语老师教的吧...");
  27.                   System.out.println(e.toString()); // 打印异常描述
  28.                   System.out.println(e.getMessage());// 打印异常的信息
  29.                   e.printStackTrace() ;// 打印出异常所有的相关信息
  30.               }
  31.               System.out.println("除法运算结束...");
  32.       }
  33. }

  34. public class Demo4{
  35.       public static void main(String[] args){
  36.         // Thread.sleep();// 使用try catch 处理异常.
  37.         for(int i=0;i<10;i++){
  38.             try{
  39.                 Thread.sleep(200);
  40.             }catch(InterruptedException e){
  41.                 System.out.println(e.toString());
  42.             }            
  43.             System.out.println("hello");
  44.         }
  45.       }
  46. }
复制代码
回复 使用道具 举报
异常的第二种处理方式 throws

  1. /**
  2.     异常处理:
  3.         抛出处理
  4.     方法中如果有可能出现异常的语句.
  5.     使用 if 进行拦截,并使用throw 抛出一个异常对象.
  6.     方法中:
  7.         throw new 异常对象;
  8.     如果在方法中使用thow 抛出了异常对象,在方法上需要进行声明,告知方法的调用者,需要注意(函数的调用者需要处理)
  9.     方法上:
  10.         throws 异常类
  11.         可以跟多个异常类
  12.         可以使用多态机制,使用Exception
  13.     使用声明了异常的方法:
  14.         由于方法有异常需要处理;
  15.         一: 使用者继续抛出
  16.         二: 使用者try catch
  17.     初学者:
  18.         写程序时,注重程序的逻辑, 异常可以抛出处理.  代码只是为编译通过(跟没有处理异常时异常的) 没有太大的作用
  19.         但是逻辑实现后,应该使用try catch 进行更专业的处理. ->提供程序的健壮性...
  20.    
  21. */


  22. public class Test2{
  23.     public static void main(String[] args)throws Exception{
  24.         div(10,0);   
  25.             
  26.         Thread.sleep(100);
  27.     }   
  28.     public static void div(int i,int j)throws Exception{
  29.         if(j==0){
  30.             throw new Exception("除数为0了"); // 使用throw 抛出了一个异常对象.
  31.         }
  32.         System.out.println(i/j);
  33.             
  34.     }
  35.    
  36. }
复制代码
回复 使用道具 举报
作为一个基础班的来说,看得我头好晕
回复 使用道具 举报
很详细
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马