棘手的Java面试问题Java面试技巧问题这些问题需要一些额外的努力来解决。如果我们试着回答a棘手的问题用常识,我们会失败,因为它们需要一些特定的知识。大多数棘手的Java问题来自令人困惑的概念,如循环、多线程、重载、重写等。 有时我们在解决问题时感到困惑,而问题并不难。有时候我们写代码很随意,但问题的解决方法却很简单。 即使我们不知道答案,我们也可以用分析思维来解决问题。在本节中,我们将介绍一些内容棘手的Java程序而且棘手的面试问题. 1)考虑下面的代码并猜测输出。
答:b 解释:当我们看到打印语句时,似乎语句被注释了,但事实并非如此。// \u000d是一个新的行Unicode字符。 2)考虑下面的代码并猜测输出。
答:一个 解释:在程序中,运算符只是用来迷惑人的。运算符既不是增量前也不是增量后。该语句可写成并求解如下: Int i=20+ (+9)- (-12)+ (+4)- (-13)+ (+19); 我= 20 + 9 + 12 + 4 + 13 + 19 我= 77 3)考虑下面的代码并找到输出。
答:c 解释:因为字符串字面值是从字符串池中使用的。这意味着s1和s2指向同一个对象并且相等。因此,打印前两个打印语句真正的.第三个print语句打印假因为toString()方法使用一个方法来计算值,而不是来自字符串池。最后的打印语句再次打印真正的因为equals()查看String对象的值。 4)下面这段代码的输出是什么?
答:d 解释:因为代码开始运行并在第13行和第15行打印a和b。第16行抛出一个异常,该异常在第17行被捕获。在第18行打印c之后,运行最后一个块并打印d。然后try语句结束,在第22行打印e。 5)以下代码的输出是什么?为什么?
答:e 解释:局部变量在引用之前需要赋值。选项E不正确,因为类和实例变量有默认值并且允许引用。A_b默认为空值。选项A、B、C和D不正确,因为标识符可能以字母、下划线或美元符号开头。如果a_b是一个实例变量,代码将编译并输出0null。 6)以下代码的输出是什么?为什么?
答:b 解释:数组允许使用匿名初始化式,因为它与声明在同一行。ArrayList使用自Java 7以来允许的菱形操作符。它指定与左边的类型匹配的类型,而无需重新输入。将两个元素相加后,list包含[6,8]。我们将索引1处的元素替换为9,得到[6,9]。最后,删除索引0处的元素,留下[9]。选项C是不正确的,因为数组输出类似这样的东西,而不是数组列表。 7)以下代码的输出是什么?为什么?
答:e 解释:Unicode声明必须用单引号括起来:'\u004e'。 8)以下代码的输出是什么?为什么?
答:c 解释:因为Java不允许我们比较case语句中的值。由于开关语句无效而发生的错误称为孤立大小写错误。 9)输出是什么?
答:e 解释:因为定义的数字是字符串类型,所以它们不会加在一起。因此,上面的代码打印与实际相同的字符串。 10)产出是什么?
答:b 解释:在Integer类中,MIN_VALUE为负(即-2)31), Double类的MAX_VALUE和MIN_VALUE都是正数。双。MIN_VALUE为2-1074年,一个在所有双值中大小最小的双常数。 因此,与明显的答案不同,这个程序将因为Double而打印0.0。MIN_VALUE大于0。 11)评估以下两个陈述并找出输出?
答:一个 解释:计算很简单。第一个语句最后有L,它表示确切的显式长值,即31536000000。另一方面,第二个语句最后没有L,因此它给出了一个不同的值。因为它被视为整数,计算结果为整数。但是结果超出了整数范围的边界。因此,它开始截断值,即1726327040。因此,L的目的是显式地表示长值。 12)考虑以下代码并评估输出?
答:b 解释:我们知道静态块首先执行。因此,x的后递减值将为1111,前递减值将为1109,值之间的差值为2,相同的值将打印在控制台上。注意,静态块之后的块永远不会被执行。 13)考虑以下代码并评估输出?
答:d 解释:在上面的程序中,switch语句在三个可能的选项中进行随机选择。回想一下表达式的值(int) (3 * math . random ())是整数0、1或2中的一个,以相等的概率随机选择,因此下面的switch语句将把“Rock”、“Scissors”、“Paper”中的一个值分配给computerMove,每种情况的概率为1/3。虽然本例中的switch语句是正确的,但整个代码段说明了一个微妙的问题语法错误. 我们可能还没有发现这个错误,因为从人类的角度来看,这不是一个错误。计算机报告最后一行是一个错误,因为变量computerMove可能没有被赋值。在Java中,只有当一个值已经明确地赋给一个变量时,才可以合法地使用该变量的值。这意味着计算机必须能够证明,仅仅通过查看程序编译时的代码,变量必须被赋值。不幸的是,计算机只有一些简单的规则可以用来做出判断。在这种情况下,它看到的是一个switch语句,其中表达式的类型是int,覆盖的情况是0、1和2。对于表达式的其他值,computerMove不会被赋值。因此,计算机认为在switch语句之后computerMove可能仍然是未定义的。现在,事实上,这是不对的:0、1和2实际上是表达式(int)(3*Math.random())的唯一可能值,但计算机还不够聪明,无法计算出这一点。修复这个问题最简单的方法是将case标签case 2替换为default。 在所有情况下,计算机都可以看到一个值被赋给了computerMove。更一般地说,如果从声明变量到代码中该点的每条执行路径都包含对变量的赋值,则我们说,在程序的给定点上,值已经明确地赋给了变量。该规则考虑了循环和if语句以及switch语句。 14)如果我们试图编译和运行这个会发生什么?
答:d 解释:程序将成功编译并运行。Test类是否为空并不重要。 15)在双大括号初始化时,第一对大括号和第二对大括号是什么意思?
答:一个 解释:第一个大括号创建一个新的匿名的内部类。这些内部类能够访问它们的父类的行为。因此,在本例中,我们实际上是在创建HashSet类的子类,因此这个内部类能够使用put()方法。 和第二个套牙套不过是实例初始化.回想一下核心Java的概念,我们可以很容易地将实例初始化器块与静态初始化器关联起来,因为类似于struct的大括号。唯一的区别是静态初始化器添加了static关键字,并且只运行一次;不管我们创建了多少对象。 16)下列哪个陈述是无限的? I. for(;,)
答:d 解释:的循环I, ii, iv,而且v无限地运行,因为第一个for循环默认在条件位置选择真值,第二个for循环指定条件为真,第四个for循环比较值并返回真值,第五个for循环在每次迭代中也返回真值。因此,for循环I, ii, iv,而且v无限运行。 17)考虑下面的程序。 选择正确的输出。
答:一个 解释:如果Java程序同时具有静态块和main()方法,在这种情况下,所有静态块将首先执行,然后执行main()方法。因此,选择A是正确的。 18)考虑下面的程序。 控制台上将打印什么?
答:d 解释:string .split()方法使用指定的分隔符(|)分割字符串。下面的语句也做同样的事情。 19)考虑场景。 如果我们将System.exit(0)放在try或catch块上,在这种情况下,最终块是否执行?还要说明原因。
答:e 解释:通过在try或catch块中调用System.exit(0),我们可以跳过finally块。System.exit(int)方法可以抛出一个SecurityException。 如果System.exit(0)退出JVM而不抛出异常,那么finally block将不会执行。但是,如果System.exit(0)确实抛出SecurityException,那么finally block将被执行。 20)下面的Java程序抛出了哪个异常?
答:b 解释:ArrayStoreException是一个运行时异常。数组必须包含相同的数据类型元素。抛出异常,表示试图将错误类型的对象存储到对象数组中。换句话说,如果你想将整型对象存储在String数组中,你会得到ArrayStoreException。 |