Java的一些高级特性(五)——测试和异常处理
2012-11-21 19:24
896 查看
关于测试的部分我们来看看assert关键字。需要使用assert关键字需要在Eclipse中的Run Configuration中的VM arguments配置上“-ea”,之后我们可以在代码中添加assert false语句来测试assert代码。
我们来看看简单的测试程序:
实际上一个更好的方法应该是在开发中引入单元测试,所以这一部分并不多说。
接下来我们讨论一下try...finally语句块:
package com.freesoft.javaadvanced;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.nio.CharBuffer;
public class TestFinally {
public static void main(String[] args) throws IOException {
FileReader reader = null;
try {
reader = new FileReader("aaa.txt");
CharBuffer cbuf = null;
reader.read(cbuf);
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
// 必须判断,否则会抛出异常
if (reader != null)
reader.close();
}
}
}
我们看到,需要将我们最终一定需要执行的语句放到finally段之内,保证资源的释放。
我们看到刚才的方法是用起来非常不方便,所以我们在Java 7中可以简化代码,我们使用了Try...With段,代码看起来简单多了,并且我们不用手动去释放资源了(注意这里释不需要手动释放的是文件句柄):
package com.freesoft.javaadvanced;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class TestTryWith {
public static void main(String[] args) throws IOException {
try (FileReader filereader = new FileReader("Testa.txt");
BufferedReader bufReader = new BufferedReader(filereader);) {
String s;
while((s = bufReader.readLine()) != null) {
System.out.println(s);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
最后我们看看自定义的异常:
首先我们需要定义一个异常:
package com.freesoft.exception;
public class CustomException extends Exception {
private static final long serialVersionUID = -2942598387157493698L;
}
之后我们开始编写测试代码:
package com.freesoft.javaadvanced;
import com.freesoft.exception.CustomException;
public class TestCustomException {
public static void main(String[] args) {
try {
// if something happens
throw new CustomException();
} catch (CustomException e) {
e.printStackTrace();
}
}
}
我们来看看简单的测试程序:
package com.freesoft.javaadvanced; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class TestAssert { public static void main(String[] args) { try { System.out.print("Please Input the 1st number:"); String o1 = new BufferedReader(new InputStreamReader(System.in)).readLine(); checkInput(o1); System.out.print("Please Input the 2nd number:"); String o2 = new BufferedReader(new InputStreamReader(System.in)).readLine(); checkInput(o2); System.out.print("Please Input the + - * / operator:"); String o = new BufferedReader(new InputStreamReader(System.in)).readLine(); switch (o) { case "+": System.out.println(Integer.parseInt(o1) + Integer.parseInt(o2)); break; case "-": System.out.println(Integer.parseInt(o1) - Integer.parseInt(o2)); break; case "*": System.out.println(Integer.parseInt(o1) * Integer.parseInt(o2)); break; case "/": System.out.println(Integer.parseInt(o1) / Integer.parseInt(o2)); break; default: assert false; } } catch (IOException e) { e.printStackTrace(); } } public static boolean checkInput(String s) { try { Integer.parseInt(s); return true; } catch (Exception e) { return false; } } }
实际上一个更好的方法应该是在开发中引入单元测试,所以这一部分并不多说。
接下来我们讨论一下try...finally语句块:
package com.freesoft.javaadvanced;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.nio.CharBuffer;
public class TestFinally {
public static void main(String[] args) throws IOException {
FileReader reader = null;
try {
reader = new FileReader("aaa.txt");
CharBuffer cbuf = null;
reader.read(cbuf);
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
// 必须判断,否则会抛出异常
if (reader != null)
reader.close();
}
}
}
我们看到,需要将我们最终一定需要执行的语句放到finally段之内,保证资源的释放。
我们看到刚才的方法是用起来非常不方便,所以我们在Java 7中可以简化代码,我们使用了Try...With段,代码看起来简单多了,并且我们不用手动去释放资源了(注意这里释不需要手动释放的是文件句柄):
package com.freesoft.javaadvanced;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class TestTryWith {
public static void main(String[] args) throws IOException {
try (FileReader filereader = new FileReader("Testa.txt");
BufferedReader bufReader = new BufferedReader(filereader);) {
String s;
while((s = bufReader.readLine()) != null) {
System.out.println(s);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
最后我们看看自定义的异常:
首先我们需要定义一个异常:
package com.freesoft.exception;
public class CustomException extends Exception {
private static final long serialVersionUID = -2942598387157493698L;
}
之后我们开始编写测试代码:
package com.freesoft.javaadvanced;
import com.freesoft.exception.CustomException;
public class TestCustomException {
public static void main(String[] args) {
try {
// if something happens
throw new CustomException();
} catch (CustomException e) {
e.printStackTrace();
}
}
}
相关文章推荐
- JAVA异常处理分析高级进界(下)
- Java异常处理、异常处理使用的一些注意点(例如,基类和子类捕获的顺序问题)
- JVM高级特性与实践(一):Java内存区域 与 内存溢出异常
- 黑马程序员-JAVA高级视频_IO输入与输出-18天-3(IO异常处理方式)
- Java高级语法笔记-多个异常处理
- ⊙⊙!下面是一些java异常集 与处理方法
- java中的 FileWriter类 和 FileReader类的一些基本用法包括对于异常的处理
- Java的一些高级特性(三)——类部分
- Java的一些高级特性(三)——关于反射
- Java学习笔记---其他类特性与异常处理
- java的一些高级特性总结
- 浅析java异常处理机制—高级篇
- 【IOS 开发】Objective - C 面向对象高级特性 - 包装类 | 类处理 | 类别 | 扩展 | 协议 | 委托 | 异常处理 | 反射
- Spring batch 的高级特性--监听,异常处理,事务
- java web开发中常见的一些异常和处理办法【持续更新】
- Java的一些高级特性(二)——初始化和赋值部分
- 【IOS 开发】Objective - C 面向对象高级特性 - 包装类 | 类处理 | 类别 | 扩展 | 协议 | 委托 | 异常处理 | 反射
- Java的一些高级特性(八)——Java7中的线程
- JVM高级特性与实践(一):Java内存区域 与 内存溢出异常
- Java的一些高级特性(六)——Java7中的目录和文件管理