java面试题整理(带答案)

1.根据以下程序选出正确答案:

public class Test {

    private static int j = 0;

 

    private static Boolean methodB(int k) {

        j += k;

        return true;

    }

 

    public static void methodA(int i) {

        boolean b;

        b = i < 10 | methodB(4);

        b = i < 10 || methodB(8);

 

    }

 

    public static void main(String args[]) {

        methodA(0);

        System.out.println(j);

    }

}

 

  1. The program prints”0”
  2. The program prints”4”

  3. The program prints”8”
  4. The program prints”12”
解析:

这道题主要考的是"|"与"||"的区别

用法:condition 1 | condition 2、condition 1 || condition 2

"|"是按位或:先判断条件1,不管条件1是否可以决定结果(这里决定结果为true),都会执行条件2

"||"是逻辑或:先判断条件1,如果条件1可以决定结果(这里决定结果为true),那么就不会执行条件2

 

2.以下选项正确的是:

  1. Java中所有的类都直接或间接继承自Object,无论是否明确的指明,无论其是否是抽象类。

  2. Java中的接口(interface)也继承了Object类
  3. 利用“==”比较两个对象时,Java调用继承自Object的equals方法,判断是否相等。
  4. 如果类的定义中没有重新定义toString()方法,则该类创建的对象无法使用toStrig()方法。

解析:

Object 是基类 Java中的所有的类都直接或间接的继承;所以A对
从一个class派生的必然是另一个class。Object是一个class,如果interface继承自Object,那么interface必然是一个class,所以B错
利用equals()方法进行比较时 会调用== 可以看equals()方法的源码,可以这样说, == 比equal更加强大,所以C错
toString()方法是Object类中 即使不重写也能使用 所以D错

 

3.Thread. sleep()是否会抛出checked exception?

  • 不会

解析:Thread.sleep()会抛出InterruptedException,这个属于checked exception,也就是编译时异常,我们必须显式的捕获异常而不能继续上外层抛出,因为这个异常需要该线程自己来解决。

checked exception:指的是编译时异常,该类异常需要本函数必须处理的,用try和catch处理,或者用throws抛出异常,然后交给调用者去处理异常。

runtime exception:指的是运行时异常,该类异常不必须本函数必须处理,当然也可以处理。

Thread.sleep()抛出的InterruptException属于checked exception;IllegalArgumentException属于Runtime exception;

 

4.分析下列程序输出结果

int i = 5;

int j = 10;

System.out.println(i + ~j);

  1. Compilation error because”~”doesn’t operate on integers
  2. -5
  3. -6
  4. 15

解析:记住一个公式 -n=~n+1可推出~n=-n-1,所以~10=-11再加5结果为-6  这里的~n 是指n的补码

 

5.分析下列程序输出结果

Integer f1 = 100, f2 = 100, f3 = 150, f4 = 150;
System. out.println( f1 == f2);
System. out.println( f3 == f4);

答案:

true 

flase

解析: JVM会自动维护八种基本类型的常量池,int常量池中初始化-128~127的范围,所以当为Integer i=127时, 在自动装箱过程中是取自常量池中的数值,而当Integer i=128时,128不在常量池范围内,所以在自动装箱过程中需new 128, 所以地址不一样

6.分析下列程序输出结果.

int x =4;
System.out.println(((x>4)?99.9:9));

答案: 9.0

解析:三目运算符中:第二个表达式和第三个表达式中如果都为基本数据类型,整个表达式的运算结果 由容量高的决定。99.9 是 double 类型 而 9 是 int 类型,double 容量高。

7 关于依赖注入,下列选项中说法错误的是()?

  1. 依赖注入能够独立开发各组件,然后根据组件间关系进行组装
  2. 依赖注入提供使用接口编程
  3. 依赖注入使组件之间相互依赖,相互制约
  4. 依赖注入指对象在使用时动态注入

解析:依赖注入的目的就是降低耦合,降低各个组件之间的依赖,而不是使组件之间相互依赖,相互制约

 

8 下列哪个选项是Java调试器?如果编译器返回程序代码的错误,可以用它对程序进行调试。

  1. java.exe
  2. javadoc.exe
  3. jdb.exe
  4. javaprof.exe

解析:

java,exe是java虚拟机

javadoc.exe用来制作java文档

jdb.exe是java的调试器

javaprof,exe是剖析工具

9 .有关finally语句块说法正确的是( )多选

  1. 不管catch是否捕获异常,finally语句块都是要被执行的
  2. 在try语句块或catch语句块中执行到System.exit(0)直接退出程序
  3. finally块中的return语句会覆盖try块中的return返回
  4. finally 语句块在 catch语句块中的return语句之前执行

解析:

1、不管有木有出现异常,finally块中代码都会执行;
2、当try和catch中有return时,finally仍然会执行;
3、finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,管finally中的代码怎么样,返回的值都不会改变,任然是之前保存的值),所以函数返回值是在finally执行前确定的;
4、finally中最好不要包含return,否则程序会提前退出,返回值不是try或catch中保存的返回值。

 

10 分析下面程序结果为何是0.40000001

double a=4.0f;
double b=3.6f;
System.out.println(a-b);

解析:2进制的小数无法精确的表达10进制小数,计算机在计算10进制小数的过程中要先转换为2进制进行计算,这个过程中出现了误差。

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值