io流:
异常:
程序出现不正常
int[] arr = {11,22,33,44,55}
arr=null
System.out.println(arr[0])
Throwable:
Exception: 异常,.
RuntimeException : 运行时异常
非runtimeexception 编译器异常
error: 错误. 一般是硬件. 非我们自身错误
throws :
try
system.out.println(1/0).
catch(Exception e)
//system.out.println(e.getNessage()) //获取异常信息 反回字符串
//System.out.println(e.toString) // 调用toString方法,打印异常类名 和异常信息 反悔字符串
e.prinStackTrace(); // jvm默认就用这种方式处理异常, 返回void
jvm处理异常:
异常的处理方式:
1,自己处理,然后程序继续运行
通过 try catch finally 来处理 处理完后.程序接着执行
格式
通过try catch finally 来处理一个异常的格式:
try{
可能出现问题的代码;
}catch(异常类型 变量名) {
出现问题后执行的代码;}catch(异常类型1 变量名) {
出现问题后执行的代码;}catch(异常类型2 变量名) {
出现问题后执行的代码;
}finally{
一般是用来施放资源的;
}
可以有多个catch语句,
安卓,客户端开发 如何处理异常,:try catch(Exception e)
ee,服务端开发 : 一般都是底层开发,从底层象上抛,\\
try后面如果跟多个catch 那么小的异常放前面, 大的异常放后面,根据多态的原理
如果大的放前面就会将所有的子类对象接受.后边的catch就没有意义了.
JDK1.7以后处理多个异常的方式和注意事项:
可以把多个catch 整合成一个.
try
可能出现问题的代码
catch(异常类型1,2,.3,4......变量名)
出现问题后执行的代码,
finally
一般是用来施放资源的.
实际开发中的写法:
try
可能出问题代码
catch(Exception e)
e.printStacktrace()
finally
一般是用来施放资源的.
注意事项:
如果try后边跟的是多个异常类型,那么小的异常类型必须放前边.
大的异常类型放后边, 多态原理
int a = 10
int b = 0
int[] arr = {11,22,33,44,55}
try
System.out.println(a/b)
system.out.println(arr[10])
catch(ArithmeticException | ArrayindexoutofboundsException e)
System.out.println("出错了")
通过. try catch finally 来处理多个异常格式::
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("出师不能为0")
catch (ArrayIndexOutofboundsException e)
System.out.println("索引越界")
catch(Exception e)
System.out.println("出错了")
System.out.println("over");
a:try catch 处理异常的基本面格式
try catct finlly
try catch finally
try finally
try是用来检测异常的
catch:用来捕获异常的
finally:施放资源.
2,如果main函数没有针对该异常的处理方式就交给调用该mian函数的jvm来处理
jvm内部有一个异常处理机智, 会将异常信息,类名,异常出现的位置.显示在控制台
程序结束执行
世界上最真情的相依就是你在try.我在catch. 无论你发神马脾气.
我都静静接受 默默处理
当通过trycatch将问题处理了. 程序会继续执行.
demo d = new demo
int x = d.div(10,0)
System.out.println(x)
class Demo1
public int div(int a , int b)
return a/b;
demo2 d = new demo2()]
try
int x = d.div(10,0)
catch(ArithmeticException a)
system.out.println(x)
System.out.println("出错了. 除数为0了")
System.out.println("11111111111111111111111111")
class demo2
public int div(int a , int b)
return a/b
Exception: 异常,.
RuntimeException : 运行时异常
非runtimeexception 编译时异常
编译时异常(Eclipse 中的红色波浪线). 也叫做.未雨绸缪异常(佳哥)
在做某些事情的时候要做某些准备
编译时异常: 在编译某个程序的时候有可能会有这样那样的事情发生比如文件找不到
这样的异常就必须在编译的时候处理.如果不处理.编译通不过
运行时异常:
就是程序员锁犯的错误, 需要回来修改代码,
可以不用显示处理. 也能通过编译,.
try
fileinputstream fis = new FileInputStream("xxx.txt");
catch(Exception e)
throws: 方式处理异常
public static oidmain(string[] arr )throws Exception
person p = new person()
p.setage(17)
System.out.println(p.getAge)
制造一个人类类.
在定义方法的时候直接throws 即可. 写在方法的生命上,
注意,
如果方法内部抛出的是一个运行时异常,方法上可以不处理(不用加throws)
如果方法内部抛出的是一个编译器异常,方法上必须做处理(必须加throws)
面试题: throws和throw的区别
throws:
定义在方法的声明上,后边跟的是异常类型
可以同时跟多个异常类型, 用,号隔开
表示抛出异常, 交给方法的调用这来处理
throw:
定义在方法的内部 , 后边跟的是异常对象
只能跟一个异常对象
表示抛出异常,在方法内部来处理
public void setage(int age)
if(age > 0 %% age <=150)
this.age = age
else
throw new Exception("年龄非法")
编译时异常的抛出, 必须对其进行处理.
运行时异常的抛出 可以处理也可以不处理.
finally: 讲finally 是为了面试题,
final和finally finalize
的区别,
finally的特点:
被finally控制的语句体一定会执行,
特殊情况,在执行到finally之前jvm退出了.(system.exit)
finally的作用, 用施放资源,在io流操作和数据库操作中会提现,
return 语句相当于是方法的最后一口气.那么在他死前会看一看有没有finally 完成当前遗愿 如果有将finally执行,在鸡巴死
try
System.out.println(10/0)
catch (exception e)
system.out.println(11除数是0除你麻痹)
return;
finally
system.out.println("死前还1得惦记你")
面试题:final和finally finalize
的区别,
final:可以修饰类: 不能被继承 但可以继承其他类
修饰方法 : 不能被重写
修饰变量,:是一个常量 只能赋值一次
finally:
是try语句中的一个语句体 不能单独使用 用来施放资源
finlize:是一个方法,当垃圾回收期确定不存在对该对象更多引用 由对象回收器调用词方法
面试题:catch里边有return语句 请问finally的代码还会执行吗, 请问是前边还是后边
会执行 在return之前.
int a = 1
a = a++
sop(a);
Demo d = new demo
System.out.println(x);
class Demo
public int method
int x = 10
try
x = 20
system.out.println(1/0)
return x;
catch(Exception e)
x=30
return x;
finally // 千万不要在finally 里边写 反回语句.因为finally的作用是为了施放尊严, 是肯定会执行的
如果在这里边写返回语句 那么try和catch 都会被改变.所以,这么写就是犯罪
x=40
自定义异常:
其实就是我们自己写一个累 然后去继承Eception 或者runtimeexception
注意::
|
|