关于测试的部分我们来看看assert关键字。需要使用assert关键字需要在Eclipse中的Run Configuration中的VM arguments配置上“-ea”,之后我们可以在代码中添加assert false语句来测试assert代码。
我们来看看简单的测试程序:
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();
}
}
}