关于这个问题,很多人都觉得很简单,认为语法有问题的是编译时错误,逻辑上出现混乱了,造成得到的结果不是自己想要的就是运行错误,那么看看下面一段代码:
public class ErrorTest{
public void myMethod(String s){
System.out.println("My String");
}
public void myMethod(StringBuffer s){
System.out.println("My StringBuffer");
}
public static void main(String args[]){
ErrorTest et = new ErrorTest();
et.myMethod(null);
}
}
这是一个简单的方法重载,单从语法上说,重载使用的没有错,方法名重复,参数类型不同,可以区分这两个重载方法,那么程序编译应该没有问题了,结果一编译,发现竟然编译不过去,因为在下面的方法调用当中,编译器不知道该调用哪个方法了,这时,一个没有语法错误的逻辑错误就成为了一个编译错误,这时候在调用myMethod方法的参数中放入一个String或者StringBuffer就可以通过编译并且可以运行了,可见,编译错误也有可能是用法出现了错误。那么该如何区分是编译错误呢还是运行错误呢,如果单说编译错误就是编译的时候出现错误,运行错误是运行是出现错误好像有点废话的感觉,在最后要总结性的区别两者,我现在的理解是编译错误是编译时不能通过,是语法或者用法上出现了错误,如果出现编译错误,那么该代码一定不能运行,运行错误一般是逻辑上出现了错误,可以理解是抛出了一个程序员没有想到的Exception。