java笔试错题集(二)

题目以及答案来源:牛客网https://www.nowcoder.com/test/question

1.

关于sleep和wait,以下描述错误的是

正确答案: D   你的答案: B (错误)

sleep是线程类的方法,wait是object的方法
sleep不释放对象锁,wait放弃对象锁
sleep暂停线程,但监控状态依然保持,结束后会自动恢复
wait进入等待锁定池,只有针对此对象发出notify方法获得对象锁进入运行状态

解析:

A.Sleep是Thread类中的方法,而wait()是Object中的方法

C.sleep()方法导致了程序暂停,但它的监控状态依然保持,到了指定时间又会恢复

在sleep()方法中线程不会释放对象锁。

  wait()方法会导致线程放弃对象锁,只有针对此对象调用notify()方法后本线程才进入对象锁定池准备获取对象锁进入运行状态。

2.

下面程序的输出结果是?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

package algorithms.com.guan.javajicu; 

public class TestDemo { 

    public static String output =""

    public static void foo(int i){ 

       try

           if(i == 1){ 

              throw new Exception(); 

           

       }catch(Exception e){ 

           output += "2"

           return

       }finally{ 

           output += "3"

       

       output += "4"

    

    

    public static void main(String[] args) { 

       foo(0); 

       foo(1); 

       System.out.println(output);

    

}

正确答案: D   你的答案: D (正确)

出错
342
34234
3423

解析:

1、try中没有抛出异常,则catch语句不执行,如果有finally语句,则接着执行finally语句,继而接着执行finally之后的语句;

2、try中抛出异常,有匹配的catch语句,则catch语句捕获,如果catch中有return语句,则要在finally执行后再执行;

3.在运行时,由java解释器自动引入,而不用import语句引入的包是()。

正确答案: A   你的答案: B (错误)

java.lang
java.system
java.io
java.util

牛客-007

答案:A

java.lang包是java语言的核心包,lang是language的缩写

java.lang包定义了一些基本的类型,包括Integer,String之类的,是java程序必备的包,有解释器自动引入,无需手动导入

4.

package Wangyi;

class Base

{

    public void method()

    {

        System.out.println("Base");

    

}

class Son extends Base

{

    public void method()

    {

        System.out.println("Son");

    }

     

    public void methodB()

    {

        System.out.println("SonB");

    }

}

public class Test01

{

    public static void main(String[] args)

    {

        Base base = new Son();

        base.method();

        base.methodB();

    }

}

问这个程序的输出结果。
 

正确答案: D   你的答案: B (错误)

Base SonB
Son SonB
Base Son SonB
编译不通过

5.

方爷

Base base=new Son(); 是多态的表示形式。父类对象调用了子类创建了Son对象。

base调用的method()方法就是调用了子类重写的method()方法。

而此时base还是属于Base对象,base调用methodB()时Base对象里没有这个方法,所以编译不通过。

要想调用的话需要先通过SON son=(SON)base;强制转换,然后用son.methodB()调用就可以了

 

 

以下关于final关键字说法错误的是

正确答案: A C   你的答案: C (错误)

final是java中的修饰符,可以修饰类、接口、抽象类、方法和属性
final修饰的类肯定不能被继承
final修饰的方法不能被重载
final修饰的变量不允许被再次赋值

final修饰类、方法、属性!不能修饰抽象类,因为抽象类一般都是需要被继承的,final修饰后就不能继承了。

final修饰的方法不能被重写而不是重载! 

final修饰属性,此属性就是一个常量,不能被再次赋值! 

6.链接:https://www.nowcoder.com/questionTerminal/b15b6a4450814167b8cc2b84392f6c2f
来源:牛客网

子类A继承父类B, A a = new A(); 则父类B构造函数、父类B静态代码块、父类B非静态代码块、子类A构造函数、子类A静态代码块、子类A非静态代码块 执行的先后顺序是?

  • 父类B静态代码块->父类B构造函数->子类A静态代码块->父类B非静态代码块->子类A构造函数->子类A非静态代码块
  • 父类B静态代码块->父类B构造函数->父类B非静态代码块->子类A静态代码块->子类A构造函数->子类A非静态代码块
  • 父类B静态代码块->子类A静态代码块->父类B非静态代码块->父类B构造函数->子类A非静态代码块->子类A构造函数
  • 父类B构造函数->父类B静态代码块->父类B非静态代码块->子类A静态代码块->子类A构造函数->子类A非静态代码块

链接:https://www.nowcoder.com/questionTerminal/b15b6a4450814167b8cc2b84392f6c2f
来源:牛客网

当实例化子类对象时,首先要加载父类的class文件进内存,静态代码块是随着类的创建而执行,所以父类静态代码块最先被执行,子类class文件再被加载,同理静态代码块被先执行;实例化子类对象要先调用父类的构造方法,而调用父类构造方法前会先执行父类的非静态代码块

7.

如果一个接口Glass有个方法setColor(),有个类BlueGlass实现接口Glass,则在类BlueGlass中正确的是?  ( )

 

 

正确答案: C   你的答案: C (正确)

protected void setColor() { …}
void setColor() { …}
public void setColor() { …}
以上语句都可以用在类BlueGlass中
JAVA 子类重写继承的方法时,不可以降低方法的访问权限,子类继承父类的访问修饰符要比父类的更大,也就是更加开放,假如我父类是protected修饰的,其子类只能是protected或者public,绝对不能是friendly(默认的访问范围)或者private,当然使用private就不是继承了。还要注意的是,继承当中子类抛出的异常必须是父类抛出的异常的子异常,或者子类抛出的异常要比父类抛出的异常要少。

8.

以下哪项陈述是正确的?

正确答案: E   你的答案: D (错误)

垃圾回收线程的优先级很高,以保证不再 使用的内存将被及时回收
垃圾收集允许程序开发者明确指定释放 哪一个对象
垃圾回收机制保证了JAVA程序不会出现 内存溢出
进入”Dead”状态的线程将被垃圾回收器回收
以上都不对

A: 垃圾回收在jvm中优先级相当相当低。
B:垃圾收集器(GC)程序开发者只能推荐JVM进行回收,但何时回收,回收哪些,程序员不能控制。
C:垃圾回收机制只是回收不再使用的JVM内存,如果程序有严重BUG,照样内存溢出。
D:进入DEAD的线程,它还可以恢复,GC不会回收

深入理解Java虚拟机 书籍中p66,真正宣布一个对象死亡,至少需要经历2次标记过程。当第一次标记时会同时进行一次筛选(判断此对象是否有必要执行finalize方法)。如果对象没有覆盖该方法,就面临死亡,所以说这个方法是对象逃脱死亡命运的最后一次机会。 大家顶我上去,让更多的人看到。看前面没人讲的很详细,如果想深究,去看书。

9.

关于匿名内部类叙述正确的是? ( )

 

正确答案: B   你的答案: B (正确)

匿名内部类可以继承一个基类,不可以实现一个接口
匿名内部类不可以定义构造器
匿名内部类不能用于形参
以上说法都不正确

匿名内部类的创建格式为: new 父类构造器(参数列表)|实现接口(){

                                             //匿名内部类的类体实现

                                        }

  1. 使用匿名内部类时,必须继承一个类或实现一个接口
  2. 匿名内部类由于没有名字,因此不能定义构造函数
  3. 匿名内部类中不能含有静态成员变量和静态方法
  4. 补充:.使用匿名内部类时,我们必须继承一个类或者实现一个接口,但是两者不可兼得,同时也只能继承一个类或者实现一个接口
     * 2.匿名内部类时不能定义构造函数的
     * 3.匿名内部类时不能存在任何的静态成员变量和静态方法
     * 4.匿名内部类为局部内部类,所以局部类的限制同样对内部类
     * 5.匿名内部类不能是抽象的,它必须要实现继承的类或接口
     * 当所在的方法的形参需要被内部类里面使用时,该形参必须为final
     * 利用构造代码块能够达到为匿名内部类创建一个构造器的效果

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值