public class X {
public static void main(String [] args) {
try {
badMethod();
System.out.print("A");
}
catch (Exception ex) {
System.out.print("C");
}
finally {
System.out.print("B");
}
System.out.print("D");
}
public static void badMethod() {
throw new Error();
}
}
public class X {
public static void main(String [] args) {
try {
badMethod();
System.out.print("A");
}
catch (Error ex) {
System.out.print("C");
}
finally {
System.out.print("B");
}
System.out.print("D");
}
public static void badMethod() {
throw new Error();
}
}这两段代码,第一段输出“B”,第二段输出“CBD”
第一段代码:为什么在抛出Error的情况下没有终止程序,而继续执行了finally中的代码段?
第二段代码:为什么在catch中捕获Error后,可以执行finally甚至finally后的代码?
以前看到的Exception和Error的介绍是这样的:error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。
exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。
顺便再写一题:如下代码:
public class X {
public X aMethod() { return this;}
}
public class Y extends X {
}
哪两个方法能加到Y类的定义中?
A. public void aMethod() {} B. private void aMethod() {}
C. public void aMethod(String s) {} D. private Y aMethod() { return null; }
E. public X aMethod() { return new Y(); }
这个题题目说满足条件的是两个,为什么在eclipse中编写后,只有C可以通过编译,E为什么不能通过?
public static void main(String [] args) {
try {
badMethod();
System.out.print("A");
}
catch (Exception ex) {
System.out.print("C");
}
finally {
System.out.print("B");
}
System.out.print("D");
}
public static void badMethod() {
throw new Error();
}
}
public class X {
public static void main(String [] args) {
try {
badMethod();
System.out.print("A");
}
catch (Error ex) {
System.out.print("C");
}
finally {
System.out.print("B");
}
System.out.print("D");
}
public static void badMethod() {
throw new Error();
}
}这两段代码,第一段输出“B”,第二段输出“CBD”
第一段代码:为什么在抛出Error的情况下没有终止程序,而继续执行了finally中的代码段?
第二段代码:为什么在catch中捕获Error后,可以执行finally甚至finally后的代码?
以前看到的Exception和Error的介绍是这样的:error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。
exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。
顺便再写一题:如下代码:
public class X {
public X aMethod() { return this;}
}
public class Y extends X {
}
哪两个方法能加到Y类的定义中?
A. public void aMethod() {} B. private void aMethod() {}
C. public void aMethod(String s) {} D. private Y aMethod() { return null; }
E. public X aMethod() { return new Y(); }
这个题题目说满足条件的是两个,为什么在eclipse中编写后,只有C可以通过编译,E为什么不能通过?
第二题不解,正确答案应该是ce,e应该没啥错误啊,最多是需要加个强制转换再return...
{
public static void main(String [] args)
{
try {
badMethod();
System.out.print("A");
}
catch (Exception ex)
{
System.out.print("C");
}
finally { System.out.print("B");
}
System.out.print("D");
}
public static void badMethod()
{
throw new Error();
} }
这个代码我在命令窗口执行编译通过,执行不能通过;public class X
{
public static void main(String [] args)
{
try {
badMethod();
System.out.print("A");
}
catch (Error ex) //捕获异常
{
System.out.print("C");
}
finally
{
System.out.print("B");
}
System.out.print("D");
}
public static void badMethod()
{
throw new Error(); //声明了一个异常
} }
第二个代码输出BCD,
方法声明会抛出一个new Error()的异常;
这个异常抛出后,会调用catch块,类似于方法的调用,从一定意思上讲,catch块就像带参数的方法定义,这些参数匹配抛出值的类型,异常被catch捕获,执行catch块中的代码,从而处理这个异常。
因此,抛出的异常被捕获,就要主要,抛出异常的类型,和catch块捕获异常的类型是否相同,:
第一个代码中,抛出的类型new Error()与catch块接受的类型Exception ex不相同,所以这个异常不会被捕获,代码就不会有执行结果。
第二个代码: 抛出new Error()类型的异常,而catch块捕获的也是Error ex的异常,因此,这个异常会被捕获,从而执行整个异常结构,输出BCD
public class X {
public X aMothod(){return this;}
}public class Y extends X{
// public void aMethod() {}
// private void aMethod() {}
// public void aMethod(String s) {}
// private Y aMethod() { return null; }
// public X aMethod() { return new Y(); }
}
楼主的环境是不是和人家不一致?
第一段代码:在main方法中执行到badMethod()时候抛出new Error(),Error是不能被Exception捕获的,所以会导致程序中断,而只会打印出B。
在任何try{}catch(){}finally{}中,无论出现什么异常或者是错误,程序都会执行finally中的代码,所以在很多关于IO流的关闭中,一部分人都是在finally中执行关闭的,因为放在finally中一定会执行的。 第二段代码:在main方法中执行到badMethod()时候抛出的new Error()被其Error捕获,所以程序不中断,继续执行finally中的内容和后续的内容。
A 编译失败 // 原因:重写的方法和被重写的方法要有相同的返回值
B 编译失败 // 原因:无法覆盖,访问权限太低。要相同(public)
C 编译通过 // 原因: 参数列表不同,属于重载
D 编译失败 // 原因:和B一样,访问权限太低
E 编译通过 // 原因:A的原因,都是返回一个对象。
直接通过cmd 命令编译,不太爱用eclipse,因为初学不久,刚好学过这个知识点,所以,,,还有第一体各位大大解释的都很对,对了,那个大大用eclipse编译的全通过,那我就有点怀疑eclipse,不对,应该是他配置的或其他原因,,哈哈哈哈嘻嘻嘻,纯个人见解。ps:这回应该成功回复了吧,先Ctrl c先,再次吐槽学校的网速下