异常

来源:互联网 发布:大数据时代风险 编辑:程序博客网 时间:2024/06/05 16:26

一、如何处理异常

try{

//可能出现错误的代码

}catch(异常类的类名 e){

//处理错误的代码

}

演示代码:

public class 运行异常 {//数组下标越界  RuntimeException/*public static void main(String[] args) {int [] arr={1,2,3};try {for(int i=0;i<4;i++){System.out.println(arr[i]);System.out.println("我爱你");      }}catch(ArrayIndexOutOfBoundsException e){e.printStackTrace();//打印栈轨迹  System.out.println("异常处理");}}

二、异常的分类


                                Throwable(可抛出物 java中所有异常类的基类)

 

                     Error                                                              Exception

 

                               RuntimeException Others(CheckedException)

三、Error和Exception的区别

Error: 非常严重的错误..程序员在程序这个层次修改不了,例如硬件崩溃、操作系统崩溃、虚拟机崩溃...

内存不够用

一.栈溢出 StackOverflowError

递归

栈深度:  栈能容纳方法调用的方法的个数...

public class 栈溢出 {public void test1(){int num=0;if(num<=200000){num++;test1();System.out.println("出理了 ");}}public static void main(String[] args) {栈溢出  s=new 栈溢出();s.test1();}}

二.堆溢出

public class 堆溢出 {public static void main(String[] args) {long[] arr=new long[1255555000];System.out.println(arr[1]);}}

三.方法区

OutOfMemoryError: permgen space

当项目比较大的时候 同时使用n多类文件  类文件把方法区占满 会报方法区溢出

Exception: 不太严重的错误。程序员可以通过修改程序来完成...

具体又分为两种:

1.RuntimeException

运行时异常 运行的时候发生的错误  可以处理也可以不处理  就像开车中 遇见的小石子

 2.Others(CheckedException)

检查性异常  编译时的异常   必须被处理 不处理编译不通过  就像开车中汽车抛锚

四、RuntimeException

 五种常见的运行时异常

1. 数组下标越界  ArrayIndexOutOfBoundsException

2. 算数异常  ArithmeticException

3. 空指针异常  NullPointerException (重点)

 (1) 在null上调用方法

 (2) null上访问属性

 4. 类转换异常   ClassCastException

 5. 数字格式化异常  NumberFormatException

public class 运行异常 {//数组下标越界  RuntimeException/*public static void main(String[] args) {int [] arr={1,2,3};try {for(int i=0;i<4;i++){System.out.println(arr[i]);System.out.println("我爱你");}}catch(ArrayIndexOutOfBoundsException e){e.printStackTrace();//打印栈轨迹  System.out.println("异常处理");}}//数组下标越界*///算法异常  ArithmeticException//空指针异常  java.lang.NullPointerException/*public void test(){}public static void main(String[] args) {运行异常 a=null;a.test();//如果遇到空指针,用以下方法解决   if(a!=null){  a.test();  }}*///类转换异常    java.lang.ClassCastException/*public static void main(String[] args) {Person  student=new Student();   Teacher teacher=(Teacher)student;    用instanceof来测试 子类 instanceof 父类}*///数字格式化异常   java.lang.NumberFormatException/*public static void main(String[] args) {int a=Integer.parseInt("a");System.out.println(a);}*/}


五、CheckedException

处理方式有两种:

1. 使用try..catch 明确的处理

驾驶员自己会修

 2. 使用throws 抛出给调用者处理

让别人修,让修理工修
代码如下:

//检查性异常  必须被处理 不处理 编译不通过import java.io.FileInputStream;import java.io.FileNotFoundException;public class 检查性异常 {  public static void main(String[] args) {  try{  FileInputStream  s=new FileInputStream ("E:\\456\\aaaa.txt");   System.out.println("aaa");//在jvm抛出  注意 不会回到错误发生的地方 继续往下执行  }catch(FileNotFoundException e){  e.printStackTrace();  System.out.println("文件没有找到");  }finally{  System.out.println("finally");  }  }}/*没有异常时 输出aaa 和finally有异常时 输出 文件没有找到 finally*/

六、throw和throws的区别

throws处理检查性异常的第二种方式:抛给调用者处理,调用者收到异常后,有有两种处理方式:

1.使用try{}catch{}明确处理 2.使用throws向上抛出

throw产生了一个异常 异常产生了 相当于10/0.
 


 


 

 

原创粉丝点击