Java基础之Throwable,文件加载
Java中的异常与错误都继承自Throwable,Exception又分为运行时异常(RuntimeException)和编译时异常。
运行时异常是程序的逻辑不够严谨或者特定条件下程序出现了错误,例如做除法运算时除数为0,运行时异常Java是不要求一定去try,catch进行捕获的。我们调试代码要减少的就是运行时异常,随着代码的调试运行时异常被捕获,程序的健壮性也就得到了提升。
编译时异常例如文件未找到异常,IO异常,SQLException等,这些是可以预知的异常(checked Exception),不像运行时异常是unchecked Exception。我们的代码中进行文件读取,IO操作时就必须对这些异常进行捕获并做相应的处理。
异常捕获后最起码的操作是记录日志,做到有据可查。必要时要抛出异常,让上层调用的代码知道这里已经出现了异常。
方法中抛出新的异常用的是throw,方法声明抛出异常用的是throws,这也是要注意的。throw之后的代码都是不会执行的,会直接到catch或者finally中。
子类方法抛出的异常只能比父类方法抛出的异常少或相等,子类方法抛出的也只能是父类方法抛出的异常或者其子类,而不能是其的父类。
错误(Error)是指JVM的底层出现了错误,是程序所不能控制的,例如StackOverFlowError,OutOfMemoryError。
抛出异常时要带上原异常的信息,可以如下定义自己的异常:
public class DaoException extends RuntimeException //继承RuntimeException的都是运行时异常
{ ...
public DaoException(String message, Throwable cause) {
super(message, cause);
} }
抛出异常时的代码,这里抛出的是运行时异常,引用该方法的地方不要求强制处理:
public static void updateObject(String sql, String[] params) throws DaoRuntimeException {
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
conn = DBConnectionManager.getConnection();
pstmt = conn.prepareStatement(sql);
for (int i = 0; params != null && i < params.length; i++) {
pstmt.setString(i + 1, params[i]);
}
rs = pstmt.executeUpdate();
} catch (Exception e) {
logger.info("Execute sql : " + sql + " fail!!!");
throw new DaoRuntimeException(e.getMessage(),e);
} finally {
DBConnectionManager.free(conn, pstmt, rs);
}
}
文件加载常见的代码如下:
InputStream is = new FileInputStream("src/test.properties");
这样的写法是文件一旦换了路径还要修改,还有打包成运行程序时,是没有src目录的,这时也可以用下面的方法来加载文件:
InputStream is = FileLoadTest.class.getClassLoader.getResourceAsStream(test.properties);
这时只要test.properties在classpath下面即可,和具体的路径无关。
new一个对象时,初始化的顺序是:静态变量和静态代码块,成员变量,构造方法。
public class Tests {
private static Tests t = new Tests();
private static String s = "d";
public Tests(){
s = "abc";
}
public static void main(String [ ] args) {
System.out.println(s);
}
}
上面的代码输出的结果是d,注意初始化的顺序就可以得到正确的结果了。
同步方法锁住的是类本身的class,由于class只会有一个,也就是说一个同步方法锁住了class的话,该类中的其他同步方法就只能等待了。相比较如果使用同步代码块,不同方法可以锁不同的对象,冲突的机会要小一些。
Java基础之Throwable,文件加载的更多相关文章
- Java中的资源文件加载方式
文件加载方式有两种: 使用文件系统自带的路径机制,一个应用程序只能有一个当前目录,但可以有Path变量来访问多个目录 使用ClassPath路径机制,类路径跟Path全局变量一样也是有多个值 在Jav ...
- php基础语法(文件加载和错误)
文件加载 有4个文件加载的语法形式(注意,不是函数): include, include_once, require, require_once; 他们的本质是一样的,都是用于加载/引入/包含/载 ...
- 【Java基础】通过getResourceAsStream() 加载资源文件
Class.getResourceAsStream(String path) path不以"/"开头时,默认是从当前类所在的包下面获取资源 path以"/"开头 ...
- Java基础_类的加载机制和反射
类的使用分为三个步骤: 类的加载->类的连接->类的初始化 一.类的加载 当程序运行的时候,系统会首先把我们要使用的Java类加载到内存中.这里加载的是编译后的.class文件 每个类加载 ...
- java web.xml被文件加载过程及加载顺序小结
web.xml加载过程(步骤): 1.启动WEB项目的时候,容器(如:Tomcat)会去读它的配置文件web.xml.读两个节点: <listener></listener> ...
- java基础—多态(动态加载)
一.面向对象最核心的机制——动态绑定,也叫多态
- java类到底是如何加载并初始化的?
Java虚拟机如何把编译好的.class文件加载到虚拟机里面?加载之后如何初始化类?静态类变量和实例类变量的初始化过程是否相同,分别是如何初始化的呢?这篇文章就 是解决上面3个问题的. 若有不正之处, ...
- (转)java类到底是如何加载并初始化的?
Java虚拟机如何把编译好的.class文件加载到虚拟机里面?加载之后如何初始化类?静态类变量和实例类变量的初始化过程是否相同,分别是如何初始化的呢?这篇文章就 是解决上面3个问题的. 若有不正之处, ...
- php基础知识(3)(文件加载include)
文件加载 综述: 有4个文件加载的语法形式(注意,不是函数): include, include_once, require, require_once; 他们的本质是一样的,都是用于加载/引入/ ...
随机推荐
- linux管理面板
小编在这儿给大家介绍几款linux管理面板,希望感兴趣的童鞋可以去尝试下.个人觉得宝塔和appnode这两个面板不仅从功能和样式都还是做的比较好的,但是部分功能是收费的,但是webmin绝对是一款免费 ...
- c语言基础学习05
=============================================================================涉及到的知识点有:for循环有两种写法.数组. ...
- Angular 选项卡
<div ng-init="now=0;" class="nav"> <h4>选项卡</h4> <div > & ...
- Redis进阶实践之五Redis的高级特性
一.引言 上一篇文章写了Redis的特征,使用场景,同时也介绍了Redis的基本数据类型,redis的数据类型是操作redis的基础,这个必须好好的掌握.今天我们开始介绍一些Redis的高级特性 ...
- 关于keil5使用注意事项(预定义、路径包含)
2017.12.17 下午 终于在不用keil5自带添加库的基础上0 error的新建了一个工程.磕磕绊绊搞了快一个下午,各种小问题搞到崩溃. 首先是库文件添加路径的问题 ,只要是你工程中用到的头文 ...
- linux下yum命令出现Loaded plugins: fastestmirror
yum install的时候提示:Loaded plugins: fastestmirror fastestmirror是yum的一个加速插件,这里是插件提示信息是插件不能用了. 不能用就先别用呗,禁 ...
- CSAPP 第二章随笔
类型转换问题 (1)int -> short 二进制位高位截断,低位保持不变 (2)同类型 unsign -> sign 记住二进制位是不变的 (3)P101页提到的编译器乘法优化问题,一 ...
- jsp中${}
jsp中${}----是EL表达式的常规表示方式目的是为了获取{}中指定的对象(参数.对象等)的值 如:${user.name}<====>User user = (User)reques ...
- Powerdesigner+Execel
1.将Powerdesigner中的表(PDM)导入到execel中 Ctrl+Shift+X/tool->Execute commands ->Edit/Run script 粘贴如下v ...
- Intel DPDK 全面解读
高性能网络技术 随着云计算产业的异军突起,网络技术的不断创新,越来越多的网络设备基础架构逐步向基于通用处理器平台的架构方向融合,从传统的物理网络到虚拟网络,从扁平化的网络结构到基于 SDN 分层的网络 ...