java switch配合return_Java 面试系列:常见面试题翻车合集

1.去掉 main 方法的 static 修饰符,程序会怎样?

A:程序无法编译

B:程序正常编译,正常运行

C:程序正常编译,正常运行一下马上退出

D:程序正常编译,运行时报错

答:D

题目解析:运行时异常如下:

错误: main 方法不是类 xxx 中的 static, 请将 main 方法定义为:

public static void main(String[] args)

2.以下程序运行的结果是?

public class TestClass {

public static void main(String[] args) {

System.out.println(getLength());

}

int getLength() {

private String s = "xyz";

int result = s.length();

return result;

}

}

复制

A:3

B:2

C:4

D:程序无法编译

答:D

题目解析:局部变量 s 不能使用任何修饰符(private/protected/public)修饰,调用的方法要加上 static,否则编译会报错。

3.以下程序有几处错误?

abstract class myAbstractClass

private abstract String method(){};

}

复制

A:1

B:2

C:3

D:4

答:C

题目解析:类少一个“{”类开始标签、抽象方法不能包含方法体、抽象方法访问修饰符不能为 private,因此总共有 3 处错误。

4.以下程序执行的结果是?

class A {

public static int x;

static {

x = B.y + 1;

}

}

public class B {

public static int y = A.x + 1;

public static void main(String[] args) {

System.out.println(String.format("x=%d,y=%d", A.x, B.y));

}

}

复制

A:程序无法编译

B:程序正常编译,运行报错

C:x=1,y=2

D:x=0,y=1

答:C

5.switch 语法可以配合 return 一起使用吗?return 和 break 在 switch 使用上有何不同?

答:switch 可以配合 return 一起使用。return 和 break 的区别在于 switch 结束之后的代码,比如以下代码:

String getColor(String color) {

switch (color) {

case "red":

return "红";

case "blue":

return "蓝";

}

return "未知";

}

String getColor(String color) {

String result = "未知";

switch (color) {

case "red":

result = "红";

break;

case "blue":

result = "蓝";

}

return result;

}

复制

对于以上这种 switch 之后没有特殊业务处理的程序来说,return 和 break 的效果是等效的。然而,对于以下这种代码:

String getColor(String color) {

switch (color) {

case "red":

return "红";

case "blue":

return "蓝";

}

return "未知";

}

String getColor(String color) {

String result = "未知";

switch (color) {

case "red":

result = "红";

break;

case "blue":

result = "蓝";

}

if (result.equals("未知")) {

result = "透明";

} else {

result += "色";

}

return result;

}

复制

如果 switch 之后还有特殊的业务处理,那么 return 和 break 就有很大的区别了。

6.一个栈的入栈顺序是 A、B、C、D、E 则出栈不可能的顺序是?

A:E D C B A

B:D E C B A

C:D C E A B

D:A B C D E

答:C

题目解析:栈是后进先出的,因此:

A 选项:入栈顺序 A B C D E 出栈顺序就是 E D C B A 是正确的;

B 选项:A B C D 先入栈,D 先出栈,这个时候 E 在入栈,E 在出栈,顺序 D E C B A 也是正确的;

C 选项:D 先出栈,说明 A B C 一定已入栈,因为题目说了入栈的顺序是 A B C D E,所以出栈的顺序一定是 C B A,而 D C E A B 的顺序 A 在 B 前面是永远不可能发生的,所以选择是 C;

D 选项 A B C D E 依次先入栈、出栈,顺序就是 A B C D E。

7.可以在 finally 块中使用 return吗?

答:不可以,finally 块中的 return 返回后方法结束执行,不会再执行 try 块中的 return 语句。

8.FileInputStream 可以实现什么功能?

A:文件夹目录获取

B:文件写入

C:文件读取

D:文件夹目录写入

答:C

题目解析:FileInputStream 是文件读取,FileOutputStream 才是用来写入文件的,FileInputStream 和 FileOutputStream 很容易搞混。

9.以下程序打印的结果是什么?

Thread t1 = new Thread(){

@Override

public void run() {

System.out.println("I'm T1.");

}

};

t1.setPriority(3);

t1.start();

Thread t2 = new Thread(){

@Override

public void run() {

System.out.println("I'm T2.");

}

};

t2.setPriority(0);

t2.start();

复制

答:程序报错 java.lang.IllegalArgumentException,setPriority(n) 方法用于设置程序的优先级,优先级的取值为 1-10,当设置为 0 时,程序会报错。

10.如何设置守护线程?

答:设置 Thead 类的 setDaemon(true) 方法设置当前的线程为守护线程。

守护线程的使用示例如下:

Thread daemonThread = new Thread(){

@Override

public void run() {

super.run();

}

};

// 设置为守护线程

daemonThread.setDaemon(true);

daemonThread.start();

复制

11.以下说法中关于线程通信的说法错误的是?

A:可以调用 wait()、notify()、notifyAll() 三个方法实现线程通信

B:wait() 必须在 synchronized 方法或者代码块中使用

C:wait() 有多个重载的方法,可以指定等待的时间

D:wait()、notify()、notifyAll() 是 Object 类提供的方法,子类可以重写

答:D

题目解析:wait()、notify()、notifyAll() 都是被 final 修饰的方法,不能再子类中重写。选项 B,使用 wait() 方法时,必须先持有当前对象的锁,否则会抛出异常 java.lang.IllegalMonitorStateException。

12.ReentrantLock 默认创建的是公平锁还是非公平锁?

答:默认创建的是非公平锁,看以下源码可以得知:

/**Creates an instance of {@code ReentrantLock}.

This is equivalent to using {@code ReentrantLock(false)}.

*/

public ReentrantLock() {

sync = new NonfairSync();

}

复制

Nonfair 为非公平的意思,ReentrantLock() 等同于代码 ReentrantLock(false)。

13.ReentrantLock 如何在一段时间内无阻塞尝试访问锁?

答:使用 tryLock(long timeout, TimeUnit unit) 方法,就可以在一段时间内无堵塞的访问锁。

14.枚举比较使用 equals 还是 ==?

答:枚举比较调用 equals 和 == 的结果是一样,查看 Enum 的源码可知 equals 其实是直接调用了 ==,源码如下:

public final boolean equals(Object other) {

return this==other;

}

复制

15.在 Spring 中使用 @Value 赋值静态变量为什么 null?怎么解决?

答:因为在 Springframework 框架中,当类加载器加载静态变量时,Spring 上下文尚未加载,因此类加载器不会在 bean 中正确注入静态类,导致了结果为 null。可使用 Setter() 方法给静态变量赋值,代码如下:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值