Javatpoint标志
Javatpoint标志

棘手的Java面试问题

Java面试技巧问题这些问题需要一些额外的努力来解决。如果我们试着回答a棘手的问题用常识,我们会失败,因为它们需要一些特定的知识。大多数棘手的Java问题来自令人困惑的概念,如循环、多线程、重载、重写等。

有时我们在解决问题时感到困惑,而问题并不难。有时候我们写代码很随意,但问题的解决方法却很简单。

即使我们不知道答案,我们也可以用分析思维来解决问题。在本节中,我们将介绍一些内容棘手的Java程序而且棘手的面试问题

1)考虑下面的代码并猜测输出。

  1. 你好
  2. 你好
  3. 你好
  4. 错误
  5. \ u000dhello

答:b

解释:当我们看到打印语句时,似乎语句被注释了,但事实并非如此。// \u000d是一个新的行Unicode字符。


2)考虑下面的代码并猜测输出。

  1. 77
  2. 33
  3. 27
  4. 76
  5. 66

答:一个

解释:在程序中,运算符只是用来迷惑人的。运算符既不是增量前也不是增量后。该语句可写成并求解如下:

Int i=20+ (+9)- (-12)+ (+4)- (-13)+ (+19);

我= 20 + 9 + 12 + 4 + 13 + 19

我= 77


3)考虑下面的代码并找到输出。

  1. True只打印一次。
  2. True恰好打印两次。
  3. True恰好打印了三次。
  4. True恰好打印了四次。
  5. 代码无法编译。

答:c

解释:因为字符串字面值是从字符串池中使用的。这意味着s1和s2指向同一个对象并且相等。因此,打印前两个打印语句真正的.第三个print语句打印因为toString()方法使用一个方法来计算值,而不是来自字符串池。最后的打印语句再次打印真正的因为equals()查看String对象的值。


4)下面这段代码的输出是什么?

  1. 安倍
  2. abce
  3. abde
  4. 中的
  5. 抛出一个未捕获的异常。

答:d

解释:因为代码开始运行并在第13行和第15行打印a和b。第16行抛出一个异常,该异常在第17行被捕获。在第18行打印c之后,运行最后一个块并打印d。然后try语句结束,在第22行打印e。


5)以下代码的输出是什么?为什么?

  1. 第1行编译器错误。
  2. 第2行编译器错误。
  3. 第4行编译器错误。
  4. 第5行编译器错误。
  5. 第8行编译器错误。

答:e

解释:局部变量在引用之前需要赋值。选项E不正确,因为类和实例变量有默认值并且允许引用。A_b默认为空值。选项A、B、C和D不正确,因为标识符可能以字母、下划线或美元符号开头。如果a_b是一个实例变量,代码将编译并输出0null。


6)以下代码的输出是什么?为什么?

  1. [8]
  2. [9]
  3. 类似于[Ljava.lang.String;@160bc7c0
  4. 抛出一个异常。
  5. 代码无法编译。

答:b

解释:数组允许使用匿名初始化式,因为它与声明在同一行。ArrayList使用自Java 7以来允许的菱形操作符。它指定与左边的类型匹配的类型,而无需重新输入。将两个元素相加后,list包含[6,8]。我们将索引1处的元素替换为9,得到[6,9]。最后,删除索引0处的元素,留下[9]。选项C是不正确的,因为数组输出类似这样的东西,而不是数组列表。


7)以下代码的输出是什么?为什么?

  1. 真正的真正的
  2. 真正的假
  3. 虚假的真
  4. 假假
  5. 编译失败

答:e

解释:Unicode声明必须用单引号括起来:'\u004e'。


8)以下代码的输出是什么?为什么?

  1. 内存错误输出
  2. 堆栈溢出错误
  3. 孤立情况错误
  4. 断言错误
  5. IO错误

答:c

解释:因为Java不允许我们比较case语句中的值。由于开关语句无效而发生的错误称为孤立大小写错误。


9)输出是什么?

  1. ONE3TWOTHREE7FOURFIVE5
  2. ONE12TWOTHREE7FOURFIVE5
  3. ONE3TWOTHREE34FOURFIVE5
  4. ONETWOTHREEFOURFIVE15
  5. ONE12TWOTHREE34FOURFIVE5

答:e

解释:因为定义的数字是字符串类型,所以它们不会加在一起。因此,上面的代码打印与实际相同的字符串。


10)产出是什么?

  1. 0
  2. 0.0
  3. ArithmaticException
  4. 编译错误

答:b

解释:在Integer类中,MIN_VALUE为负(即-2)31), Double类的MAX_VALUE和MIN_VALUE都是正数。双。MIN_VALUE为2-1074年,一个在所有双值中大小最小的双常数。

因此,与明显的答案不同,这个程序将因为Double而打印0.0。MIN_VALUE大于0。


11)评估以下两个陈述并找出输出?

  1. 31536000000和1726327040
  2. 3.1536e10和1.72632704e9
  3. 31536000000L和1726327040
  4. 编译时错误
  5. 算术异常

答:一个

解释:计算很简单。第一个语句最后有L,它表示确切的显式长值,即31536000000。另一方面,第二个语句最后没有L,因此它给出了一个不同的值。因为它被视为整数,计算结果为整数。但是结果超出了整数范围的边界。因此,它开始截断值,即1726327040。因此,L的目的是显式地表示长值。


12)考虑以下代码并评估输出?

  1. 1
  2. 2
  3. 1110
  4. 1109
  5. 11

答:b

解释:我们知道静态块首先执行。因此,x的后递减值将为1111,前递减值将为1109,值之间的差值为2,相同的值将打印在控制台上。注意,静态块之后的块永远不会被执行。


13)考虑以下代码并评估输出?

  1. 岩石
  2. 剪刀
  3. 语法错误
  4. 异常

答: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)如果我们试图编译和运行这个会发生什么?

  1. 它将无法编译
  2. 运行时错误
  3. 编译并运行,没有输出
  4. 编译并运行打印Hello
  5. 第6行出现错误

答:d

解释:程序将成功编译并运行。Test类是否为空并不重要。


15)在双大括号初始化时,第一对大括号和第二对大括号是什么意思?

  1. 第一组大括号创建了一个新的匿名内部类,第二组大括号创建了一个实例初始化器,类似于类中的静态块。
  2. 第二组大括号创建了一个新的匿名内部类,第一组大括号创建了一个实例初始化器,类似于类中的静态块。
  3. 第一组大括号都不会创建新的匿名内部类,第二组大括号也不会创建类中的静态块之类的实例初始化器。
  4. 在Java中不允许使用双大括号初始化。
  5. 以上都不是

答:一个

解释:第一个大括号创建一个新的匿名的内部类。这些内部类能够访问它们的父类的行为。因此,在本例中,我们实际上是在创建HashSet类的子类,因此这个内部类能够使用put()方法。

第二个套牙套不过是实例初始化.回想一下核心Java的概念,我们可以很容易地将实例初始化器块与静态初始化器关联起来,因为类似于struct的大括号。唯一的区别是静态初始化器添加了static关键字,并且只运行一次;不管我们创建了多少对象。


16)下列哪个陈述是无限的?

I. for(;,)
2(;真的,)
3(;假,)
Iv. for(;2 = = 2;
(int i=1;> = 1;我+ +)

  1. 只有我
  2. Ii和v
  3. I ii和iii
  4. I, ii, iv和v
  5. I, ii, iii, iv和v

答:d

解释:的循环I, ii, iv,而且v无限地运行,因为第一个for循环默认在条件位置选择真值,第二个for循环指定条件为真,第四个for循环比较值并返回真值,第五个for循环在每次迭代中也返回真值。因此,for循环I, ii, iv,而且v无限运行。


17)考虑下面的程序。

选择正确的输出。

  1. 静态块-1,静态块-2,主要方法
  2. 静态块-2,静态块-1,主要方法
  3. 主要方法,静态块-1,静态块-2
  4. 静态块-1,主要方法,静态块-2
  5. 主要方法,静态块-2,静态块-1

答:一个

解释:如果Java程序同时具有静态块和main()方法,在这种情况下,所有静态块将首先执行,然后执行main()方法。因此,选择A是正确的。


18)考虑下面的程序。

控制台上将打印什么?

  1. [Java\\ Python\\ Hadoop]
  2. (Java | Python | Hadoop)
  3. Python \ \ Java \ \ [| | Hadoop]
  4. [Java, Python, Hadoop]

答:d

解释:string .split()方法使用指定的分隔符(|)分割字符串。下面的语句也做同样的事情。


19)考虑场景。

如果我们将System.exit(0)放在try或catch块上,在这种情况下,最终块是否执行?还要说明原因。

  1. 这是无效的情况。
  2. 它跳过最后一个块。
  3. JVM退出SecurityException,最后块将执行。
  4. JVM退出没有SecurityException异常和finally块将不执行。
  5. finally块可以执行,也可以不执行。

答: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程序抛出了哪个异常?

  1. ArrayIndexOutOfBoundsException
  2. ArrayStoreException
  3. NegativeArraySizeException
  4. NullPointerException
  5. ClassCastException

答:b

解释:ArrayStoreException是一个运行时异常。数组必须包含相同的数据类型元素。抛出异常,表示试图将错误类型的对象存储到对象数组中。换句话说,如果你想将整型对象存储在String数组中,你会得到ArrayStoreException。





你可能还会喜欢:


学习最新教程


准备


热门的技术


B.Tech / MCA





Baidu
map