java里的异常需要学么_Java异常学习

NO.1 简单异常演示

public static void main (String[] args) {

//Java异常学习--Exception

/**

* * A:JVM默认是如何处理异常的

* main函数收到这个问题时,有两种处理方式:

* a:自己将该问题处理,然后继续运行

* b:自己没有针对的处理方式,只有交给调用main的jvm来处理

* jvm有一个默认的异常处理机制,就将该异常进行处理.

* 并将该异常的名称,异常的信息.异常出现的位置打印在了控制台上,同时将程序停止运行

* B:案例演示

* JVM默认如何处理异常

*/

Demo3 d = new Demo3();

// int x = d.div(10,2);

//这样正常调用是没问题的

int x = d.div(10,0);

//我们让除数为0.就会抛出异常

System.out.println(x);//java.lang.ArithmeticException

//以后我们看错误从后往前看,先来到出错的每一行,最后看运行时异常

}

}

class Demo3 {

public int div(int a, int b) {

return a / b;

}

}

NO.2 异常处理的方式

#第一种

public static void main (String[] args) {

/**

* * A:异常处理的两种方式

* a:try⋯catch⋯finally

* try catch

* try catch finally

* try finally

* b:throws

* B:try...catch处理异常的基本格式

* try⋯catch⋯finally

* C:案例演示

* try...catch的方式处理1个异常

try:用来检测异常的

catch:用来捕获异常的

finally:释放资源

世界上最真情的相依就是你在try我在catch,无论你发神马脾气,我都静静接受,默默处理

当通过trycatch将问题处理了,程序会继续执行

*/

Demo2 d = new Demo2();

try{

int x = d.div(10, 0);

System.out.println(x);

}catch(ArithmeticException a) { //ArithmeticException a = new ArithmeticException();

System.out.println("出错了,除数为零了");

}

//我们经过主动异常处理,就可以继续执行程序了

System.out.println("1111111111111111");

}

}

class Demo2 {

/*

* 除法运算

*/

public int div(int a,int b) { //a = 10,b = 0

return a / b; // 10 / 0 被除数是10,除数是0当除数是0的时候违背了算数运算法则,抛出异常

//new ArithmeticException("/ by zero");

}

}

#第二种

/**

* * A:案例演示

* try...catch的方式处理多个异常

* JDK7以后处理多个异常的方式及注意事项

*

* 安卓,客户端开发,如何处理异常?try{}catch(Exception e){}

* ee,服务端开发,一般都是底层开发,从底层向上抛

*

* try后面如果跟多个catch,那么小的异常放前面,大的异常放后面,根据多态的原理,如果大的放前面,就会将所有的子类对象接收

* 后面的catch就没有意义了

*/

public static void main(String[] args) {

//demo1();

int a = 10;

int b = 0;

int[] arr = {11,22,33,44,55};

//JDK7如何处理多个异常

try {

System.out.println(a / b);

System.out.println(arr[10]);

} catch (ArithmeticException | ArrayIndexOutOfBoundsException e) {

System.out.println("出错了");

}

}

public static void demo1() {

int a = 10;

int b = 0;

int[] arr = {11,22,33,44,55};

try {

System.out.println(a / b);

System.out.println(arr[10]);

arr = null;

System.out.println(arr[0]);

} catch (ArithmeticException e) {

System.out.println("除数不能为零");

} catch (ArrayIndexOutOfBoundsException e) {

System.out.println("索引越界了");

} catch (Exception e) { //Exception e = new NullPointerException();

System.out.println("出错了");

}

System.out.println("over");

}

}

NO.3 编译时异常和运行时异常的区别

//Java中的异常分为编译期和运行期异常

//写个编译期异常--编译时异常可以理解为未雨绸缪异常

//编译时异常就是必须对其进行处理,不然编译是不通过的

//这个FileInputStream就是读取文件的,现在在自动编译的时候就报错了。

//因为我们这个文件路径可能是错误的,就读取不到,所以我们做下处理

//运行时异常:就是程序员的代码错误,需要程序员回来修改代码

try {

FileInputStream stre = new FileInputStream("tmac.xxx");

}catch (Exception e){

}

NO.4 Throwable的几个常见方法

/**

* * A:Throwable的几个常见方法

* a:getMessage()

* 获取异常信息,返回字符串。

* b:toString()

* 获取异常类名和异常信息,返回字符串。

* c:printStackTrace()

* 获取异常类名和异常信息,以及异常出现在程序中的位置。返回值void。

* B:案例演示

* Throwable的几个常见方法的基本使用

*/

public static void main(String[] args) {

try {

System.out.println(1/0);

} catch (Exception e) { //Exception e = new ArithmeticException("/ by zero");

//System.out.println(e.getMessage()); //获取异常信息

//System.out.println(e); //调用toString方法,打印异常类名和异常信息

e.printStackTrace(); //jvm默认就用这种方式处理异常

}

}

}

NO.5 throws抛出异常的处理方式

/**

* * A:throws的方式处理异常

* 定义功能方法时,需要把出现的问题暴露出来让调用者去处理。

* 那么就通过throws在方法上标识。

* B:案例演示

* 举例分别演示编译时异常和运行时异常的抛出

* 编译时异常的抛出必须对其进行处理

* 运行时异常的抛出可以处理也可以不处理

* @throws Exception

*/

public static void main(String[] args) throws Exception {

Person p = new Person();

p.setAge(-17);

System.out.println(p.getAge());

}

}

class Person {

private String name;

private int age;

public Person() {

super();

}

public Person(String name, int age) {

super();

this.name = name;

this.age = age;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) throws AgeOutOfBoundsException {

if(age >0 && age <= 150) {

this.age = age;

}else {

//Exception e = new Exception("年龄非法");

//throw e;

throw new AgeOutOfBoundsException("年龄非法");

}

}

}

NO.6 finaly关键字的作用和特点

/**

* * A:finally的特点

* 被finally控制的语句体一定会执行

* 特殊情况:在执行到finally之前jvm退出了(比如System.exit(0))

* B:finally的作用

* 用于释放资源,在IO流操作和数据库操作中会见到

* C:案例演示

* finally关键字的特点及作用

*return语句相当于是方法的最后一口气,那么在他将死之前会看一看有没有finally帮其完成遗愿,如果有就将finally执行

*后在彻底返回

*/

public static void main(String[] args) {

try {

System.out.println(10/0);

} catch (Exception e) {

System.out.println("除数为零了");

System.exit(0); //退出jvm虚拟机

return;

} finally {

System.out.println("看看我执行了吗");

}

}

NO.7 简单面试题

//面试题

//final,finally和finalize的区别

//final:可以修饰类,不能被继承,修饰方法,不能被重写,修饰变量,只能赋值一次

//finally:是try语句中的一个语句体,不能被单独使用,用来释放资源

//finalize:是一个方法,当垃圾回收器确定存在对该对象的过多引用时,由该对象的垃圾回收器调用此方法

//第二题:

//问:如果catch里面有return语句,finally的代码还会执行吗?如果会,请问是在return前还是return后

//答:是在return先建立返回路径,然后执行finally语句,最后返回

//看这个例子

Test test = new Test();

int num = test.method();

System.out.println(num);

}

}

class Test {

public int method(){

int x = 10;

try{

x = 20;

System.out.println(1/0);

return x;

}catch (Exception e){

x = 30;

return x;

}finally {

x = 40;

System.out.println("finally执行了嘛");

//千万不要在finally里面写返回语句,因为finally的作用是释放资源,是肯定执行的。如果在这里面写了返回语句,那么try和catch的结果都会被改变

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值