Java错题集(十)

目录

下面有关java的一些细节问题,描述错误的是?

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

有以下类定义:

关于Java中的ClassLoader下面的哪些描述是错误的:(         )

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

最后输出什么?


下面有关java的一些细节问题,描述错误的是?

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

构造方法不需要同步化
一个子类不可以覆盖掉父类的同步方法
定义在接口中的方法默认是public的
容器保存的是对象的引用

来源:https://www.nowcoder.com/questionTerminal/50179743d0d74a79b00936d5a86ee3e3

构造方法每次都是构造出新的对象,不存在多个线程同时读写同一对象中的属性的问题,所以不需要同步 。

synchronized关键字不能被继承。虽然可以用synchronized来定义方法,但是synchronized却并不属于方法定义的一部分,所以synchronized关键字并不能被继承。如果父类中的某个方法使用了synchronized关键字,而子类中也覆盖了这个方法,默认情况下子类中的这个方法并不是同步的,必须显示的在子类的这个方法中加上synchronized关键字才可。当然,也可以在子类中调用父类中相应的方法,这样虽然子类中的方法并不是同步的,但子类调用了父类中的同步方法,也就相当子类方法也同步了。

 

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

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

一个类的实例
一个实现指定接口的类的实例
全部正确
一个子类的实例

来源:https://www.nowcoder.com/questionTerminal/17f35ba2db294ae0b591bec4eef56ff8

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

 

有以下类定义:

abstract class Animal{

    abstract void say();

}

public class Cat extends Animal{

    public Cat(){

        System.out.printf("I am a cat");

    }

    public static void main(String[] args) {

        Cat cat=new Cat();

    }

}

 

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

I am a cat
Animal能编译,Cat不能编译
Animal不能编译,Cat能编译
编译能通过,但是没有输出结果

来源:https://www.nowcoder.com/questionTerminal/7d941b7ec7de444c9e02d514a93d0872

包含抽象方法的类称为抽象类,但并不意味着抽象类中只能有抽象方法,它和普通类一样,同样可以拥有成员变量和普通的成员方法。注意,抽象类和普通类的主要有三点区别:

1)抽象方法必须为public或者protected(因为如果为private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为public。

2)抽象类不能用来创建对象;

3)如果一个类继承于一个抽象类,则子类必须实现父类的抽象方法。如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类。

在其他方面,抽象类和普通的类并没有区别。

 

关于Java中的ClassLoader下面的哪些描述是错误的:(         )

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

默认情况下,Java应用启动过程涉及三个ClassLoader: Boostrap, Extension, System
一般的情况不同ClassLoader装载的类是不相同的,但接口类例外,对于同一接口所有类装载器装载所获得的类是相同的
类装载器需要保证类装载过程的线程安全
ClassLoader的loadClass在装载一个类时,如果该类不存在它将返回null
ClassLoader的父子结构中,默认装载采用了父优先
所有ClassLoader装载的类都来自CLASSPATH环境指定的路径

来源:https://www.nowcoder.com/questionTerminal/aedefaf3c7ba461997947931e186ded5

A、java中类的加载有5个过程,加载、验证、准备、解析、初始化;这便是类加载的5个过程,而类加载器的任务是根据一个类的全限定名来读取此类的二进制字节流到JVM中,然后转换为一个与目标类对应的java.lang.Class对象实例,在虚拟机提供了3种类加载器,引导(Bootstrap)类加载器、扩展(Extension)类加载器、系统(System)类加载器(也称应用类加载器)。A正确

B、一个类,由不同的类加载器实例加载的话,会在方法区产生两个不同的类,彼此不可见,并且在堆中生成不同Class实例类加载器不加载接口

C、类加载器是肯定要保证线程安全的;C正确

D、装载一个不存在的类的时候,因为采用的双亲加载模式,所以强制加载会直接报错,D错误

java.lang.SecurityException: Prohibited package name: java.lang

E、双亲委派模式是在Java 1.2后引入的,其工作原理的是,如果一个类加载器收到了类加载请求,它并不会自己先去加载,而是把这个请求委托给父类的加载器去执行,如果父类加载器还存在其父类加载器,则进一步向上委托,依次递归,请求最终将到达顶层的启动类加载器,如果父类加载器可以完成类加载任务,就成功返回,倘若父类加载器无法完成此加载任务,子加载器才会尝试自己去加载,这就是双亲委派模式,即每个儿子都很懒,每次有活就丢给父亲去干,直到父亲说这件事我也干不了时,儿子自己想办法去完成,所以默认是父装载,E正确

F、自定义类加载器实现 继承ClassLoader后重写了findClass方法加载指定路径上的class,F错误

 

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

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

不会

Thread.sleep() 和 Object.wait(),都可以抛出 InterruptedException。这个异常是不能忽略的,因为它是一个检查异常(checked exception)

 

public void test() {

        int a = 10;

        System.out.println(a++ + a--);

    }

最后输出什么?

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

19
20
21
22

来源:https://www.nowcoder.com/questionTerminal/9049c05b68af4bb396b8c64e97da6c3d

a++ + a-- 翻译过来等于

a++参与运算时是先运算再++ 

当a--时之前的++已经加好,所以a--时这个a是11,但是a--同a++一样所以整个等于是 10 + 11。

如果在 System.out.println(a++ + a--); 语句后再来个 System.out.println(a); 时,这个输出的是10。结果如图:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值