`

谜题36-谜题

F# 
阅读更多
谜题36:优柔寡断
public class Main36 {
	public static void main(String[] args) {
		System.out.println(decision()); //false
	}
	private static boolean decision() {
		try{
			return true;
		}
		finally{
			return false;
		}
	}
}

原因:在一个try-finally语句中,finally总是在控制权离开try语句块时执行的。无论try语句块是正常结束还是意外结束,情况都是如此。
总之,千万不要用return、break、continue或throw来退出finally语句块,并且千万不要允许让受检查的异常传播到finally语句块之外。

谜题37:极端不可思议
先看下面三个程序,都会打印出什么呢?
public class Main1 {

	public static void main(String[] args) {
		 try {
		  System.out.println("Hello world");
		 } catch (IOException e) {
		 System.out.println("I've never seen println fail!");
		 }}}

public class Main2 {

	public static void main(String[] args) {
		 try {
		 //if you have nothing nice to say,say nothing.
		 } catch (Exception e) {
		 System.out.println("This can't happen!");
		 }}}

import java.io.IOException;
interface Type1 {
	void f() throws CloneNotSupportedException;
}
interface Type2 {
	void f() throws InterruptedException;
}
interface Type3 extends Type1, Type2 {

}
public class Main37 implements Type3 {

	public static void main(String[] args) {
		Type3 t3 = new Main37();
		t3.f();//打印Hello world
	}
	@Override
	public void f() {
		System.out.println("Hello world");
	}
}

第一个程序编译不过,因为println方法没有声明会抛出任何受检查异常,而IOException却是一个受检查异常,语言规范中描述到:如果一个catch子句要捕捉一个类型为E的受检查异常,而相应的try子句不能抛出E的某个子类型的异常,那么这就是一个编译错误
第二个可以编译,但什么都不会打印。捕捉Exception或Throwable的catch子句是合法的,不管相应的try子句的内容如何。
第三个也可以编译,一个方法可以抛出的受检查异常集合时它所适用的所有类型声明要抛出的受检查异常的交集,而不是合集。因此静态类型为Type3的对象上的方法f根本就不会抛出异常。
谜题38:不受欢迎的宾客
public class Main38 {

	public static final long GUEST_USER_ID = -1;
	private static final long USER_ID;
	static {
		try {
			USER_ID = getUserIdFromEnvironment();
		} catch (IdUnavailableException e) {
			USER_ID = GUEST_USER_ID;
		}
	}

	public static void main(String[] args) {

		System.out.println("User ID: " + USER_ID);
	}

	private static long getUserIdFromEnvironment()
			throws IdUnavailableException {
		throw new IdUnavailableException();
	}

}

  该程序不能编译,要确定一个程序是否可以不止一次对一个空final进行赋值是很困难的问题,事实上,这是不可能的。一个空final域只有在它的确未赋值的地方才可以被赋值。
谜题39:您好,再见
public class Main39 {
	public static void main(String[] args) {
		try {
			System.out.println("hello world!");
			System.exit(0);
		}
		finally{
			System.out.println("goodbye world!");
		}
	}
}
只打印出hello world!
不论try语句块的执行是正常地还是意外地结束,finally语句块确实都会执行。然而,在这个程序中,try语句块根本没有结束其执行过程。System.exit方法将停止当前线程和所有其他当场死亡的线程。finally子句的出现不能给予线程继续执行的特殊权限。
谜题40:不情愿的构造器
public class Reluctant {

	private Reluctant internalInstance = new Reluctant();
	public Reluctant() throws Exception{
		throw new Exception("I'm not coming out!");
	}
	
	public static void main(String[] args) {
		try {
			Reluctant b = new Reluctant();
			System.out.println("Surprise!");
		} catch (Exception e) {
			System.out.println("I told you so");
		}
	}
}

会抛出java.lang.StackOverflowError异常。 与大多数抛出java.lang.StackOverflowError异常的程序一样本程序也包含了一个无限递归。当你调用一个构造器时,实例变量的初始化操作将先于构造器的程序体而运行。因为java.lang.StackOverflowError是Error的子类型,而不是Exception的子类型,所以
main中的catch子句无法捕捉到它。需要注意,构造器必须声明其实例初始化操作会抛出的所有受检查异常。
分享到:
评论

相关推荐

    算法谜题(算法谜题).pdf

    - **谜题部分**(第2章):按照难度分级,包括了易于上手的谜题、中等难度的谜题以及较为复杂的谜题。 - **提示与解答**(第3章与第4章):为每个谜题提供了详尽的解题思路和答案,便于读者对照学习。 #### 三、...

    算法谜题.pdf

    根据提供的信息,“算法谜题.pdf”这一文档似乎包含了一些与算法相关的谜题或者挑战问题,这类资料对于学习和深入理解算法具有重要的价值。虽然提供的具体内容部分仅包含了“混混藏书阁”的链接,并未直接给出关于...

    Java谜题Java谜题1——表达式谜题

    Java谜题1——表达式谜题 谜题1:奇数性 谜题2:找零时刻 谜题3:长整除 谜题4:初级问题 谜题5:十六进制的趣事 谜题6:多重转型 谜题7:互换内容 谜题8:Dos Equis 谜题9:半斤 谜题10:八两 Java谜题2...

    算法谜题 英文版本

    - **主章节谜题**:分为三个难度等级,包括较易、中等难度和较难谜题。 - **引言谜题**:一个特别的谜题,旨在激发读者的兴趣。 - **提示部分**:提供了每个谜题的提示,帮助读者思考。 - **解答部分**:提供了每个...

    C++-VS2019-FourLights-四灯谜题-MFC应用程序.zip

    《C++与VS2019环境下的MFC应用程序:详解“四灯谜题”实现》 在IT领域,C++是一种广泛使用的编程语言,以其高效性和灵活性深受开发者喜爱。Visual Studio 2019(VS2019)作为微软推出的强大集成开发环境(IDE),为...

    算法谜题(算法谜题)

    算法谜题是结合了传统谜题和计算机算法知识的一种智力游戏,旨在通过谜题的求解过程训练和培养算法思维能力。 本书分为四个部分:概览、谜题、提示和答案。概览部分主要介绍算法设计的通用策略和算法分析技术。算法...

    算法谜题_suanfa_算法谜题_

    《算法谜题》一书是专门为那些热爱挑战和探索算法深度的读者准备的。它将算法与谜题相结合,旨在通过一系列有趣的问题,帮助读者深入理解并提升算法设计与分析的能力。书中涵盖的不仅仅是基础算法,还涉及了高级算法...

    java谜题.rar

    Java谜题1——表达式谜题.htm Java谜题2——字符谜题.htm Java谜题3——循环谜题.htm Java谜题4——异常谜题.htm Java谜题5——类谜题.htm Java谜题6——库谜题.htm Java谜题7——更多的类谜题.htm Java谜题8——更...

    C语言的谜题 | | 酷 壳 - CoolShell1

    C语言的谜题 C语言是一种古老的编程语言,但它依然广泛应用于各种领域。C语言的设计目标是提供一种高效、灵活、可移植的编程语言,能够在各种平台上运行。C语言的设计者Dennis Ritchie和Brian Kernighan认为,C语言...

    Algorithmic puzzles(算法谜题).pdf

    - 第二部分为主要内容,分为三个难度级别的谜题集合:较易谜题(第 1 至 50 题)、中等难度谜题(第 51 至 110 题)以及较难谜题(第 111 至 150 题)。 - 第三部分提供了所有谜题的提示,帮助读者理解解题思路。 ...

    算法谜题 中文版

    《算法谜题》是一本经典算法谜题的合集。书中包括了一些古已有之的谜题,数学和计算机科学有一部分知识就发源于此。 《算法谜题》可以为对算法感兴趣的广大读者提供系统丰富而实用的资料,能够帮助读者提升高阶算法...

    很经典的java谜题

    "很经典的Java谜题"这个压缩包文件中的"Java谜题.chm"很可能包含了各种关于Java语言的巧妙问题和解决方法,这些都是深入理解和提升Java技能的好材料。 首先,Java谜题可能涵盖以下几个方面: 1. **类型转换**:...

    Java谜题

    "Java谜题"通常指的是那些涉及到Java语言特性和编程技巧的问题,这些问题可能需要深入理解Java的语法、类库或者运行机制才能解答。这类谜题旨在提升开发者对Java的理解和问题解决能力。 在《Java谜题》这个主题中,...

    Sudoku:此代码生成随机数独谜题或解决任何给定的数独谜题。-matlab开发

    自从我知道数独游戏以来,我... 这个 m 文件包含随机猜测方案,因此,当给它一个空的数独谜题时,它会解决它,结果,它会生成一个随机数独谜题。 之后,另一个 m 文件 Sudoku.m 被用来生成 SudokuSolver.m 的用户界面。

    Python代码解决数学谜题-百钱买百鸡-问题示例

    "百钱买百鸡" 是一个经典的数学问题,旨在通过逻辑和算术找出所有可能的组合,使得购买的公鸡、母鸡和小鸡总数恰好是100只,而总价正好是100元。这个问题源于中国古代,体现了数学在实际生活中的应用,同时也是教育...

    MATLAB Sodoku Solver - 改进:更快地解决数独谜题。-matlab开发

    本文将深入探讨一个改进后的MATLAB数独求解器,该求解器能够显著提高解决数独谜题的速度,尤其得益于Leif Warland提出的巧妙优化策略。这个新程序不仅能够找到所有可能的解决方案,而且其性能提升约20倍,极大地提升...

Global site tag (gtag.js) - Google Analytics