黑马程序员技术交流社区
标题:
继续晒老师笔记,很用心,谢谢老师
[打印本页]
作者:
于冬辉
时间:
2014-10-12 21:45
标题:
继续晒老师笔记,很用心,谢谢老师
异常
就是程序运行过程中,遇到了问题,这就叫异常。
1,异常的体系
Throwable 其实应该分三种
Error
通常出现重大问题如:服务器宕机数据库崩溃等。不编写针对代码对其处理。
Exception
除了 RuntimeException 和其所有子类,其他所有的异常类都是在编译的时候必须要处理的,要么try,要么抛
RuntimeException
RuntimeException 和其所有的子类,都不会在编译的时候报异常,而是在运行时报异常,这时候我们就需要回头看看我们的代码是否有问题,比如角标越界,空指针等
2,jvm是如何处理异常的
jvm发现运算是已经违反了数学运算规则,java将这种常见的问题进行描述,并封装成了对象叫做ArithmeticException当除0运算发生后,jvm将该问题打包成了一个异常对象.并将对象抛给调用者main函数,new ArithmeticException("/by zero");main函数收到这个问题时,有两种处理方式:1,自己将该问题处理,然后继续运行2,自己没有针对的处理方式,只有交给调用main的jvm来处理jvm有一个默认的异常处理机制,就将该异常进行处理.并将该异常的名称,异常的信息.异常出现的位置打印在了控制台上同时将程序停止运行那么jvm里都封装了哪些对异常的处理呢
3,处理异常处理方式:
A:try...catch
格式: try { 需要检测的代码; } catch(异常类 变量) {//异常类名 对象名= new 异常类名(); 异常处理代码; }世界上最真情的相依,就是你在try,我在catch,无论你发神马脾气,我都默默接受,静静处理public class Demo1_Exception { public static void main(String[] args) { Demo d = new Demo(); //创建对象 try { int num = d.div(10, 0); //调用div方法并将10和0给方法的参数 System.out.println(num); //打印调用方法的结果 } catch (Exception e) { //当try检测出异常的时候,就跳到catch语句中 //接收异常Exception e = new ArithmeticException("/ by zero"); System.out.println(e); //打印异常对象的toString方法 System.out.println(e.toString()); System.out.println("错了,除数为零了"); //提示 } System.out.println("11111111111111111111"); //异常处理完代码可以继续执行 }}class Demo { public int div(int a,int b) { //a = 10,b = 0 return a / b; // new ArithmeticException("/ by zero"); }}
try...catch(...)...finally
说一下final,finalize,finally的区别1,final可以修饰类,可以修饰方法,可以修饰变量2,finalize,在对象没有更多引用,垃圾回收的时候调用3,finally 关闭流,数据库等,释放资源public class Test1 { /** * @param args * finally的面试题 */ public static void main(String[] args) { Test t = new Test(); //创建对象 int num = t.getNum(); //调用getNum()方法 System.out.println(num); }}class Test { public int getNum() { int x = 10; try { System.out.println(1/0); //执行1/0会出现异常,创建new ArithmetiException(\ by zero);对象 return x; //return语句 } catch (Exception e) { x = 20; //将x值改为20 return x; //return语句 } finally { x = 30; //将x值改为30 System.out.println("finally执行了吗"); //输出语句 //return x; finally中不要写return语句 } } /* * 当程序执行到try语句的时候,1/0违背了数学的运算规则出现异常,创建出new ArithmetiException(\ by zero)对象,程序跳转到catch语句中 * 当程序跳转到catch语句中,又将x值改为了20,遇到return语句,return语句会建立一个返回路径,将x里面的20相当于装到一个箱子里,准备返回,在返回之前 * 看有没有finally语句,如果有执行finally语句,但是虽然将x的值改为了30,也不会影响到返回路径中的值,所以最后的返回还是20 */}
可以有下面三种搭配形式:
try...catch(...)try...catch(...)...finallytry...finally 是不能进行异常处理的,必须抛出
B:抛出 throws throw
throws:用于标识函数暴露出的异常。thorws用在函数上,后面跟异常类名(可以由多个,隔开)。throw:用于抛出异常对象。throw用在函数内,后面跟异常对象。new Exception();public class Demo3_Throws { /** * @param args * @throws Exception * try catch和throws的区别 * 如果后续代码想要继续执行,只能try * 如果后续代码不想继续执行,只能throws * * Exception 和RuntimeException的区别 * RutimeException是运行时异常,需要程序员回来修改自己的代码 * Exception是编译时异常,遇到编译时异常,必须处理,要么try,要么throws(未雨绸缪异常) */ public static void main(String[] args) throws Exception { Person p = new Person(); p.setAge(-17); System.out.println(p.getAge()); System.out.println("222222222222222222222"); }}class Person { private int age; public Person() { //alt + shift + s + c 生成空参数的构造函数 super(); } public Person(int age) { //alt + shift + s + o 根据字段生成有参数的构造函数 super(); this.age = age; } public int getAge() { //alt + shift + s + r 生成set和get方法 return age; } public void setAge(int age) throws Exception { if(age > 0 && age < 200) { this.age = age; }else { /*Exception e = new Exception("年龄非法"); throw e;*/ throw new Exception("年龄非法"); //用异常处理 //System.out.println("年龄非法"); //以前是这样处理的 } /* * throw和throws的区别 * throw写在方法内,后面跟的是异常对象 * throws写在方法上,后面跟的是异常类名 */ } @Override public String toString() { //alt + shift + s + s 生成toString方法 return "Person [age=" + age + "]"; }}
C:到底用谁?
你能处理,建议处理。try...catch...finally你处理不了,抛出。在实际开发中,是分层开发,底层代码是能抛出尽量抛出,用日志记录住异常信息,并提供解决方案
4,异常体系常见方法
A:getMessage() :返回此 throwable 的详细消息字符串。class Throwable { String detailMessage; Throwable(){} Throwable(String message) { this.detailMessage = message; } public String getMessage() { return detailMessage; }}B:toString():获取异常类名和异常信息,返回字符串。C:printStackTrace():获取异常类名和异常信息,以及异常出现在程序中的位置。返回值void。
File
1.什么是File类
File类对象可以代表一个路径, 此路径可以是文件也可以是文件夹, 该类方法可以对这个路径进行各种操作
2.创建对象
给File类构造函数传一个String类型的路径就可以创建对象
路径分为两种: 绝对路径, 相对路径
绝对路径: 从盘符开始, 是一个固定的路径
相对路径: 不从盘符开始, 相对于某个位置. 在Eclipse中的Java工程如果使用相对路径, 那么就相对于工程根目录. cmd则相对应于当前目录.
3.常用方法
*****boolean exists() 判断是否存在boolean isAbsolute(); 是否是绝对路径*****boolean isDirectory(); 是否是文件夹*****boolean isFile(); 是否是文件boolean isHidden(); 是否是隐藏getAbsolutePath(); 获取绝对路径getFreeSpace(); 获取当前盘符剩余空间getTotalSpace(); 获取当前盘符总空间getUsableSpace(); 获取当前盘符可用空间*****getParent()); 获取父级路径*****getName()); 获取文件或文件夹名setReadable(false); 设置是否可读setWritable(false); 设置是否可写setExecutable(false); 设置是否可执行canRead(); 是否可读canWrite(); 是否可写canExecute(); 是否可执行setLastModified(); 设置文件的最后修改时间*****lastModified(); 获取文件的最后修改时间 *****createNewFile() 创建文件*****mkdir(); 创建文件夹(仅一级)*****mkdirs(); 创建文件夹(父级不存在也创建)**renameTo(); 改名, 可以移动文件*****delete() 删除, 文件可以直接删除, 文件夹只能删空的*****length() 文件大小String[] list() *****File[] listFiles()
作者:
☆枫の云
时间:
2014-10-12 22:30
感谢楼主分享!
作者:
liuxiang
时间:
2014-10-12 23:13
谢谢楼主分享,不多说,复制粘贴拿走
作者:
韶山
时间:
2014-10-12 23:20
学习了感谢分享。
作者:
2406035442
时间:
2014-10-12 23:22
你发就可以 ,我发警告我。。
作者:
sk0806
时间:
2014-10-13 00:17
谢谢楼主分享!!!
作者:
lishuliang28
时间:
2014-10-13 17:16
不错!!!!
作者:
解冻
时间:
2014-10-13 21:55
感谢分享
作者:
zz_job
时间:
2014-10-13 22:19
你这是什么排版啊... 能不能发代码?发帖的时候在字体那一堆图标里能找到代码的....
作者:
mengzi987
时间:
2014-10-13 22:38
果断收藏!!
作者:
shileishihai
时间:
2014-10-13 23:57
感谢楼主分享!
作者:
郭.威
时间:
2014-10-14 02:09
谢谢楼主分享,一起加油
作者:
爱吃小土豆
时间:
2014-10-14 02:11
感谢楼主分享
作者:
黄宽
时间:
2014-10-14 07:00
好羡慕。希望能早日加入黑马
:)
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2