美文网首页
那些你曾错过的Java题(一)

那些你曾错过的Java题(一)

作者: JAVAandPython君 | 来源:发表于2019-02-19 19:26 被阅读0次

    欢迎大家关注笔者的微信公众号:JAVAandPython君

    关注后发送“领取资料”即可领取5T技术资源

    1

    1.下面属于java包装类的是?

    A.String

    B.Long

    C.Character

    D.Short

    分析:

       这应该是一个比较容易的题目了,但是也是得死记硬背的题,所以拿出来给大家记一记。 
    
       Java 语言是一个面向对象的语言,但是Java中的基本数据类型却是不面向对象的,这在实际使用时存在很多的不便,为了解决这个不足,在设计类时为每个基本数据类型设计了一个对应的类进行代表,即包装类。对应的基本类型和包装类如下表:
    
    image

    答案:B,D

    2

    2.对于Java中异常的描述正确的是?

    A.用throws定义了方法可能抛出的异常,那么调用此方法时一定会抛出此异常。

    B.如果try块中没有抛出异常,finally块中的语句将不会被执行。

    C.抛出异常意味着程序发生运行时错误,需要调试修改

    D.Java中的可不检测(unchecked)异常可能来自RuntimeException类或其子类。

    分析:

    A错 在调用此方法的时候 也可以再次申明以将异常交由更高一级处理。

    B错 finally块中的语句一定会被执行。除非catch块中有System.exit(0)。对于finally确实值得深究,下次也写篇文章来分析分析。

    C错 抛出异常不一定是运行时异常,也有可能是编译时异常。这里甩给大家一张图:

    image

    这里多讲几句,Exception(异常)是程序本身可以处理的异常。主要包含RuntimeException等运行时异常IOException,SQLException等非运行时异常

    运行时异常包括:都是RuntimeException类及其子类异常,如NullPointerException(空指针异常)、IndexOutOfBoundsException(下标越界异常)等,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。

    运行时异常的特点是Java编译器不会检查它,也就是说,当程序中可能出现这类异常,即使没有用try-catch语句捕获它,也没有用throws子句声明抛出它,也会编译通过。

    非运行时异常(编译异常) 包括:RuntimeException以外的异常,类型上都属于Exception类及其子类。从程序语法角度讲是必须进行处理的异常(try catch 或者抛出),如果不处理,程序就不能编译通过。如IOException、SQLException等以及用户自定义的Exception异常,一般情况下不自定义检查异常。

    D对 运行时异常的特点是Java编译器不会检查它。

    答案:D

    3

    下列哪个说法是正确的?

    A. ConcurrentHashMap使用synchronized关键字保证线程安全

    B.HashMap实现了Collction接口

    C.Array****.asList方法返回java.util.ArrayList对象

    D.SimpleDateFormat是线程不安全的

    分析:

    A选项中,ConcurrentHashMap 使用segment来分段和管理锁,segment继承自ReentrantLock,因此ConcurrentHashMap使用ReentrantLock来保证线程安全。

    B中,HashMap定义规则如下:

    public class HashMap<K,V>   extends AbstractMap<K,V>   implements Map<K,V>, Cloneable, Serializable
    

    所以HasMap跟Collection没啥关系!

    C中,应该是Arrays.asList(),其将一个数组转化为一个List对象,这个方法会返回一个ArrayList类型的对象, 这个ArrayList类并非java.util.ArrayList类,而是Arrays类的内部

    D.特意去看了一下jdk,如图:

    image.gif

    官方说是不安全的

    答案:D

    4

    java 中哪个关键字可以对对象加互斥锁?
    A.transient
    B.synchronized
    C.serialize
    D.static

    分析:

    这题估计大家都会,但是拿出来主要是说说有一些修饰符具体有啥用的,给大家拓展拓展:

    static 修饰符,用来创建类方法和类变量。

    final 修饰符,用来修饰类、方法和变量,final 修饰的类不能够被继承,修饰的方法不能被继承类重新定义,修饰的变量为常量,是不可修改的。

    abstract 修饰符,用来创建抽象类和抽象方法。

    **synchronized **用于多线程的同步。用来给对象和方法或者代码块加锁,各线程互斥访问。

    volatile 修饰的成员变量在每次被线程访问时,都强制从共享内存中重新读取该成员变量的值。而且,当成员变量发生变化时,会强制线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。

    serialize:Java 对象序列化为二进制文件。

    transient:序列化的对象包含被 transient 修饰的实例变量时,java 虚拟机(JVM)跳过该特定的变量。

    答案:B

    5

    1 .class Parent{2. public float aFun(float a, float b) { }3 .}4 .class Child extends Parent{5 .6 .}
    

    将以下哪种方法插入行5是不合法的?

    A.float aFun(float a, float b){ }

    B.public int aFun(int a, int b) { }

    C.public float aFun(float p, float q){ }

    D.private int aFun(int a, int b){ }

    分析:

    这个题主要是考察了方法的重写,我们来扯一扯:

    方法重写应遵循“三同一小一大”原则

    “三同”:即方法名相同,形参列表相同,返回值类型相同;

    “一小”:子类方法声明抛出的异常比父类方法声明抛出的异常更小或者相等;

    “一大”:子类方法的访问修饰符应比父类方法更大或相等。

    A选项是重写,但是默认访问修饰符比父类小,插入第五行编辑器会报错。 default,默认的访问权限,也是可以省略的访问权限,它不仅能在设置了该权限的类中访问,也可以在同一包中的类或子类中访问。意思就是只能由跟这个类在同一个包中的类来访问,比private限制更少,但比protected限制更多。

    B、D不是重写。因为形参列表和返回值类型不同,不满足“三同”。所以写在第五行以普通方法对待,插入第五行没有错误。

    C选项满足重写的各项条件,是正确的重写,所以插入第五行没有错误。

    相关文章

      网友评论

          本文标题:那些你曾错过的Java题(一)

          本文链接:https://www.haomeiwen.com/subject/smofyqtx.html