java异常问题

lv6917527 2015-10-26 10:22:18
1///
package sim;

public class NeedCleanup {
private static long counter=1;
private final long id = counter++;
public void dispose(){
System.out.println("NeedsCleanup"+id+"dispised");
}
}
class ConstructionException extends Exception{}

class NeedCleanup2 extends NeedCleanup{
public NeedCleanup2() throws ConstructionException{}
}


2///
package sim;

public class CleanIdiom {
public static void main(String[] args) {
NeedCleanup nc1 = new NeedCleanup();
try{

}finally{
nc1.dispose();
}
NeedCleanup nc2 = new NeedCleanup();
NeedCleanup nc3 = new NeedCleanup();
try{

}finally{
nc3.dispose();
nc2.dispose();
}
try{
NeedCleanup2 nc4 = new NeedCleanup2();
try{
NeedCleanup2 nc5 = new NeedCleanup2();
try{

}finally{
nc5.dispose();
}
}catch(ConstructionException e){
System.out.println(e);
}finally{
nc4.dispose();
}
}catch(ConstructionException e){
System.out.println(e);
}
}

}



看不懂这个,跑单步也看不懂,求网友们解释一下,谢谢了。
...全文
90 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
main方法里不是 顺序执行吗 构造的时候是1 2 3 4 5,调用方法的时候是1 3 2 5 4
lv6917527 2015-10-27
  • 打赏
  • 举报
回复
引用 1 楼 lonrence 的回复:
了解一下finally子句,给你用颜色标注了一下
		try {
			...
		} finally {
			...
		}
		
		
		try {
			...
		} catch (Exception e) {
			...
		}
		
		try {
			...
		} catch (Exception e) {
                    ...
		} finally {
			...
		}
		
		try {
			...
			try {
				...
			} finally {
				...
			}
		} catch (Exception e) {
			...
		}
public class CleanIdiom { public static void main(String[] args) { NeedCleanup nc1 = new NeedCleanup(); try { } finally { nc1.dispose(); } NeedCleanup nc2 = new NeedCleanup(); NeedCleanup nc3 = new NeedCleanup(); try { } finally { nc3.dispose(); nc2.dispose(); } try { NeedCleanup2 nc4 = new NeedCleanup2(); try { NeedCleanup2 nc5 = new NeedCleanup2(); try { } finally { nc5.dispose(); } } catch (ConstructionException e) { System.out.println(e); } finally { nc4.dispose(); } } catch (ConstructionException e) { System.out.println(e); } } }
引用 楼主 lv6917527 的回复:
1/// package sim; public class NeedCleanup { private static long counter=1; private final long id = counter++; public void dispose(){ System.out.println("NeedsCleanup"+id+"dispised"); } } class ConstructionException extends Exception{} class NeedCleanup2 extends NeedCleanup{ public NeedCleanup2() throws ConstructionException{} } 2/// package sim; public class CleanIdiom { public static void main(String[] args) { NeedCleanup nc1 = new NeedCleanup(); try{ }finally{ nc1.dispose(); } NeedCleanup nc2 = new NeedCleanup(); NeedCleanup nc3 = new NeedCleanup(); try{ }finally{ nc3.dispose(); nc2.dispose(); } try{ NeedCleanup2 nc4 = new NeedCleanup2(); try{ NeedCleanup2 nc5 = new NeedCleanup2(); try{ }finally{ nc5.dispose(); } }catch(ConstructionException e){ System.out.println(e); }finally{ nc4.dispose(); } }catch(ConstructionException e){ System.out.println(e); } } } 看不懂这个,跑单步也看不懂,求网友们解释一下,谢谢了。
引用 楼主 lv6917527 的回复:
1/// package sim; public class NeedCleanup { private static long counter=1; private final long id = counter++; public void dispose(){ System.out.println("NeedsCleanup"+id+"dispised"); } } class ConstructionException extends Exception{} class NeedCleanup2 extends NeedCleanup{ public NeedCleanup2() throws ConstructionException{} } 2/// package sim; public class CleanIdiom { public static void main(String[] args) { NeedCleanup nc1 = new NeedCleanup(); try{ }finally{ nc1.dispose(); } NeedCleanup nc2 = new NeedCleanup(); NeedCleanup nc3 = new NeedCleanup(); try{ }finally{ nc3.dispose(); nc2.dispose(); } try{ NeedCleanup2 nc4 = new NeedCleanup2(); try{ NeedCleanup2 nc5 = new NeedCleanup2(); try{ }finally{ nc5.dispose(); } }catch(ConstructionException e){ System.out.println(e); }finally{ nc4.dispose(); } }catch(ConstructionException e){ System.out.println(e); } } } 看不懂这个,跑单步也看不懂,求网友们解释一下,谢谢了。
嗯,就是不知道为什么打印的是 1 3 2 5 4 不是按顺序++的吗,在我看来,应该是12345 才对啊
  • 打赏
  • 举报
回复
了解一下finally子句,给你用颜色标注了一下
		try {
			...
		} finally {
			...
		}
		
		
		try {
			...
		} catch (Exception e) {
			...
		}
		
		try {
			...
		} catch (Exception e) {
                    ...
		} finally {
			...
		}
		
		try {
			...
			try {
				...
			} finally {
				...
			}
		} catch (Exception e) {
			...
		}
public class CleanIdiom { public static void main(String[] args) { NeedCleanup nc1 = new NeedCleanup(); try { } finally { nc1.dispose(); } NeedCleanup nc2 = new NeedCleanup(); NeedCleanup nc3 = new NeedCleanup(); try { } finally { nc3.dispose(); nc2.dispose(); } try { NeedCleanup2 nc4 = new NeedCleanup2(); try { NeedCleanup2 nc5 = new NeedCleanup2(); try { } finally { nc5.dispose(); } } catch (ConstructionException e) { System.out.println(e); } finally { nc4.dispose(); } } catch (ConstructionException e) { System.out.println(e); } } }

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧