java面试题(1)

本文列举了几个Java面试中常见的技术问题,包括final方法与private方法的区别、容器组件类型、Math类的取整方法用法、instanceof运算符的用途以及多线程中的变量同步问题。这些问题涵盖了Java基础知识和并发编程的要点。
摘要由CSDN通过智能技术生成

1、final等同于private,这句话是错误的。

private方法只可以在类的内部使用,在类外根本访问不到, 而final方法可以在类外访问,但是不可以重写该方法,就是说可以使用该方法的功能但是不可以改变其功能,这就是private方法和final方法的最大区别。

private说的是访问修饰符,是一个访问权限的问题,final说的是这个方法不能被重写。

2、下列属于容器的组件有()

A、JButton
B、JPanel
C、Thread
D、JTextArea

答案是B

有三种类型的容器:Window、Panel、ScrollPane,常用的有Panel, Frame, Apple

JPanel是Java图形用户界面(GUI)工具包中的面板容器类,包含在javax.swing包中,是一种轻量级容器,可以加入到JFrame窗体中。 JPanel默认的布局管理器是FlowLayout,其自身可以嵌套组合,在不同子容器中可包含其他组件(component),如JButton、JTextArea、JTextField 等,功能是对对窗体上的这些控件进行组合,相当于C++和C#中的Panel类。

3、Math.round(11.5) 等于多少 (). Math.round(-11.5) 等于多少 (  ).

A、11 ,-11
B、11 ,-12
C、12 ,-11
D、12 ,-12

答案是C
需要强调的是,Math.round的“四舍五入”和平常的“小于4不进位,大于4则进位”是不一样的.
参考
(1)负数
Math.round(-11.6) = -12
Math.round(-11.5) = -11
(2)正数
Math.round(11.5) = 12
Math.round(11.6) = 12

Math类中提供了三个与取整有关的方法:ceil,floor,round,这些方法的作用于它们的英文名称的含义相对应,例如:ceil的英文意义是天花板,该方法就表示向上取整,Math.ceil(11.3)的结果为12,Math.ceil(-11.6)的结果为-11;floor的英文是地板,该方法就表示向下取整,Math.floor(11.6)的结果是11,Math.floor(-11.4)的结果-12;最难掌握的是round方法,他表示“四舍五入”,算法为Math.floor(x+0.5),即将原来的数字加上0.5后再向下取整,所以,Math.round(11.5)的结果是12,Math.round(-11.5)的结果为-11.

4、instanceof运算符能够用来判断一个对象是否为:

A、一个类的实例
B、一个实现指定接口的类的实例
C、全部正确
D、一个子类的实例

答案是C

instance是java的二元运算符,用来判断他左边的对象是否为右面类(接口,抽象类,父类)的实例

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

interface A{

     

}

class B implements A{

      

}

class C extends B{

      

}

public class Iinstanceof {

 

    public static void main(String[] args) {

        A ab=new B();

        A ac=new C();

        B bc=new C();

        B bb=new B();

        C cc=new C();

        //对象实现一个接口,用这个对象和这个接口进行instanceof判断,都为true。

        System.out.println("ab instanceof A="+(ab instanceof A));

        System.out.println("ac instanceof A="+(ac instanceof A));

        System.out.println("bc instanceof A="+(bc instanceof A));

        System.out.println("bb instanceof A="+(bb instanceof A));

        System.out.println("cc instanceof A="+(cc instanceof A));

        //对象和父类进行instanceof判断,都为true

        System.out.println("ab instanceof B="+(ab instanceof B));

        System.out.println("ac instanceof B="+(ac instanceof B));

        System.out.println("bc instanceof B="+(bc instanceof B));

        System.out.println("bb instanceof B="+(bb instanceof B));

        System.out.println("cc instanceof B="+(cc instanceof B));

        //对象和他的子类进行instanceof判断为false

        System.out.println("ab instanceof C="+(ab instanceof C));

        System.out.println("ac instanceof C="+(ac instanceof C));

        System.out.println("bc instanceof C="+(bc instanceof C));

        System.out.println("bb instanceof C="+(bb instanceof C));

        System.out.println("cc instanceof C="+(cc instanceof C));

    }

}

程序输出:
ab instanceof A=true
ac instanceof A=true
bc instanceof A=true
bb instanceof A=true
cc instanceof A=true
ab instanceof B=true
ac instanceof B=true
bc instanceof B=true
bb instanceof B=true
cc instanceof B=true
ab instanceof C=false
ac instanceof C=true
bc instanceof C=true
bb instanceof C=false
cc instanceof C=true

5、假设 a 是一个由线程 1 和线程 2 共享的初始值为 0 的全局变量,则线程 1 和线程 2 同时执行下面的代码,最终 a 的结果不可能是()

boolean isOdd = false;

for(int i=1;i<=2;++i)

{

if(i%2==1)isOdd = true;

else isOdd = false;

a+=i*(isOdd?1:-1);

}

A、-1
B、-2
C、0
D、1

答案是D

易知:每个线程对a 均做了两次读写操作,分别是 “ +1 ” 和 “ -2 ”

而题目问了是最终a 的结果,所以 a 的结果取决于各自线程对 a 的先后读写的顺序

结论:a的可能取值为-1、0、-2

如图:

6、下面哪个行为被打断不会导致InterruptedException:( )?

A、Thread.join
B、Thread.sleep
C、Object.wait
D、CyclicBarrier.await
E、Thread.suspend

答案是E

抛InterruptedException的代表方法有:

  • java.lang.Object 类的 wait 方法

  • java.lang.Thread 类的 sleep 方法

  • java.lang.Thread 类的 join 方法

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值