Java实训第十二天8/09

一.异常相关的知识
1.概念:程序运行过程发生一些意料以外的事情
2.异常的层次结构
Object
Throwable
Exception Error
CheckedException RuntimeException
编译时异常 运行是异常
检查异常
IOException ArithmeticException  0做除数
SQLException ArrayIndexOutOfBoundsException
FileNotFoundException NullPointerException
3.常用异常发生的原因
InputStream in=new FileInputStream("d:\\user.txt");
NullPointerException:引用类型 没有初始化操作
public class Student{
public void show(){

}
}
public static void main(String[] args){
Student stu=null;
stu.show();
}
ArithmeticException:一个整数除以 0 
int i=12/0;

ArrayIndexOutOfBoundsException:下标超过了数组的范围
4.注意:以下程序
public class Student{
public void show(){

}
public static void print(){

}
}
Student stu=null;
stu.show();//发生空指针,在new 时 才存在
stu.print();//正常运行,print 是static修饰 属于类被所有对象共有
((Student)null).print();//正确运行
5.进行处理,保持我们代码能继续向下执行
try:负责监视
catch:负责捕获异常
finally:不管是否发生异常 都会执行的代码
throws:向外声明异常,谁调用谁处理
throw :引发异常,人为的产生一个异常
throw new 异常();
通常都会在catch块中 通过 throw 把产生异常信息抛出
通过throw 产生的异常 都是 RuntimeException类型的异常

6.发生异常的代码后面的内容不在执行

try{
System.out.println("1111");
int i=12/0;
System.out.println("2222");
}catch(Exception ex){

}
7.多重catch如何执行,多选一的情况
try{
String str=null;
int i=str.length();//产生一个异常类型 
}catch(NullPointerException n){

}catch(RuntimeException r){

}catch(Exception ex){

}
依次从第一个catch开始匹配,如果不同在匹配后续的catch
如果匹配成功,后续catch不在执行
必须由小到大 由子类到父类的顺序
Exception 必须放在最后
实际开发,建议 使用 一个catch 捕获 Exception 即可
jdk1.7以后 catch可以合并


try{
String str=null;
int i=str.length();//产生一个异常类型 
}catch(NullPointerException n ||RuntimeException r){

}catch(Exception ex){

}
try{
String str=null;
int i=str.length();//产生一个异常类型
}catch(Exception ex){

}
8.java中处理异常的三种情况
a)没有发生异常:try块中代码完全执行,catch中的内容不执行,接着执行后续代码
b)发生异常,catch正常捕获
catch括号中的异常类高于等于 发生异常的类型
try执行到发生异常的代码后,进入catch块中,在执行后续的内容
c)发生异常,catch不能捕获异常
catch括号中异常类型与发生的异常不匹配
try执行到发生异常的代码后,程序终止


尽量在catch中使用Exception捕获异常
9.finally:不管是否有异常,也不管能否处理,其中代码都要执行
而且在return之前执行 System.exit(0) finally 不执行
通常使用finally块 释放资源 比如链接数据库时 关闭链接


10.面试题:
a)finally 和return 关系
finally 中的代码必须执行,在return 之前执行
b)final、finalize、finally 之间的关系
彼此独立,没有任何关系
final:是java中修饰符,表示终态
修饰类 该类不能被继承
修饰变量 该变量的值不能修改 是常量
修饰方法 该方法不能被重写
finally:java中异常处理的关键字,表示不管是否有异常都会执行的代码
在return之前执行
finalize:java中用于垃圾回收实现资源的一个方法
来自Object中










二.记录异常产生的信息
log4j使用

4 for
dom4j
2 j2ee
O2O
B2C

1.添加log4j.xxx.jar 文件到项目中
2.把 jar 文件添加到构建路径
在其上点击右键 选择 build path----add build path
3.在 src下(必须是src的根目录)创建名为 log4j.properties的资源文件
名称固定
其中内容 基本固定
两块
1.控制台输出 ,研发阶段
2.输出到文件 ,产品阶段
1.配置控制台输出的信息
System.out
#添加一个输出源 print 使用ConsoleAppender 完成信息的输出
log4j.appender.print=org.apache.log4j.ConsoleAppender
#通过System.out 打印信息
log4j.appender.print.target=System.out
#设置显示信息的格式
log4j.appender.print.layout=org.apache.log4j.PatternLayout
#指定格式的内容
#%d 表示产生异常的时间
#%l 发生异常的所在类的行数
#%m 异常的消息
#%n 换行
log4j.appender.print.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} l% %m%n
#记录日志的级别,和输出数据源
log4j.rootlogger=debut,print
4.创建一个日志的记录工具,并记录

------------------------------------------
1.异常的层次结构 
Throwable
Exception Error
RuntimeException checkedException

2.处理异常的5个关键字
try
catch 
finally 
throws 
throw throw new RuntimeException();
3.java处理异常的三种情况
a)没有发生异常 
b)发生异常,catch正常捕获
c)发生异常,catch不能捕获异常
4.finally与return的关系
5.final、finally、finalize
6.使用log4j记录异常信息
a)添加log4j 的jar文件到项目中
必须通过右键 把该jar文件添加到 构建 路径
在 jar 文件上点击右键 ---build path----add to build path 
b)在源文件夹中创建 名为 log4j.properties 的资源文件
c)在需要记录异常信息的java 类中创建 日志记录器并记录日志
public class StudentDao{
private Logger log=Logger.getLogger(StudentDao.class);
public int save(String name,String sex){
try{

}catch(Exception ex){
log.debug("dddd");
}
}
}
7.try 必须和catch或finally结合使用
8.自定义异常
a)创建一个继承自Exception或其子类的java类
提供相应的构造方法,在其构造方法中通过super()的形式把数据传递给父类
在catch中使用
b)直接在throw new 异常的时候,其实就是自定义异常

throw new RuntimeException("信息",e);

我们建议使用第二种

9.编写底层或者需要把程序打包( jar ),处理异常时必须 
使用throw new RuntimeException() 把异常 抛出
jdbc 
sql语句都不用你写 java代码自动拼接

10.构建对象的方式
a)new 
b)对象.clone();
c)利用反射
Class cla=Class.forName("com.neu.entity.Student");
//执行构造方法,尽量提供空参数的构造方法
Object obj=cla.newInstance();
11.接口的分类:
a)标识接口:其中没有任何方法和常量,就是一个空的
Cloneable :就表示 该类的对象可以被克隆
Serializable :该类可以被序列化
b)常量接口:存放大量的常用,用于设置系统参数
public interface InitParam{
int PAGE_NUM=5;
String ADMIN="admin";
String PASSWORD="admin123";
}
c)功能性接口:包含各种方法
i)单功能接口:只有一个方法
public interface IRun{
public void run();
}
ii)多功能接口:有多个方法



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值