【Java题】01-202.3.6

问题1:

1、在Java中,关于HashMap类的描述,以下错误的是()?
HashMap能够保证其中元素的顺序 ×
HashMap允许将null用作值 √
HashMap允许将null用作键 √
HashMap使用键/值得形式保存数据 √

解析:

1、HashMap 不是有序的.
2、有TreeMap和LinkedHashMap是有序的
3、LinkedHashMap 是根据元素增加或者访问的先后顺序进行排序
4、TreeMap是基于元素的固有顺序 (由 Comparator 或者 Comparable 确定)
5、HashMap对象的key、value值均可为null。
6、HahTable对象的key、value值均不可为null。

问题2:

非抽象类实现接口后,必须实现接口中的所有抽象方法,除了abstract外,方法头必须完全一致. (×)

解析:

在这里插入图片描述
方法头指:修饰符+返回类型 +方法名(形参列表)
接口的访问权限:public,abstract
两同两小一大原则
返回值和参数列表相同
返回值类型小于等于父类的返回值类型
异常小于等于父类抛出异常
访问权限大于等于父类

问题3:

正则表达式中,表示匹配非数字字符的字符是( \D )?

解析:

大写表示“非”,d表示digit数字。非数字就是\D, w表示word,非单词就是\W

问题4:
public void test() {
        int a = 10;
        System.out.println(a++ + a--);
    }

最后输出什么?

21

解析:

a++ : 先使用,后加1
++a : 先加1,后使用

问题5:

当编译并运行下面程序时会发生什么结果()

public class Bground extends Thread{
    public static void main(String argv[]){
        Bground b = new Bground();
        b.run();
    }
    public void start(){
        for(int i=0;i<10;i++){
            System.out.println("Value of i = "+i);
        }
    }
}

编译通过,但是无输出

解析:

对于线程而言,start是让线程从new变成runnable。run方法才是执行体的入口。
但是在Thread中,run方法是个空方法,没有具体实现。
Bground继承了Thread,但是没有重写run方法,那么调用run方法肯定是无输出。

问题6:

下面哪些具体实现类可以用于存储键,值对,并且方法调用提供了基本的多线程安全支持:()

java.util.ConcurrentHashMap(√)
java.util.Map
java.util.TreeMap
java.util.SortMap
java.util.Hashtable(√)
java.util.HashMap

解析:

Hashtable的方法都是synchrnized修饰的线程安全,
ConcurrentHashMap并发容器,JDK7采用分段锁,JDK8采用CAS算法,线程安全,建议使用,Connections工具类提供了一个方法synchrnizedMap可以把Map同步,本质就是给每一个方法加上synchrnized关键字进行同步

问题7:

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

默认情况下,Java应用启动过程涉及三个ClassLoader: Boostrap, Extension, System

一般的情况不同ClassLoader装载的类是不相同的,但接口类例外,对于同一接口所有类装载器装载所获得的类是相同的(x)

类装载器需要保证类装载过程的线程安全
ClassLoader的loadClass在装载一个类时,如果该类不存在它将返回null(x)
ClassLoader的父子结构中,默认装载采用了父优先
所有ClassLoader装载的类都来自CLASSPATH环境指定的路径(x)

解析:

A、java中类的加载有5个过程,加载、验证、准备、解析、初始化;这便是类加载的5个过程,而类加载器的任务是根据一个类的全限定名来读取此类的二进制字节流到JVM中,然后转换为一个与目标类对应的java.lang.Class对象实例,在虚拟机提供了3种类加载器,引导(Bootstrap)类加载器、扩展(Extension)类加载器、系统(System)类加载器(也称应用类加载器)。A正确
B、一个类,由不同的类加载器实例加载的话,会在方法区产生两个不同的类,彼此不可见,并且在堆中生成不同Class实例。所以B前面部分是正确的,后面接口错误
C、类加载器是肯定要保证线程安全的;C正确
D、装载一个不存在的类的时候,因为采用的双亲加载模式,所以强制加载会直接报错,D错误
java.lang.SecurityException: Prohibited package name: java.lang
E、双亲委派模式是在Java 1.2后引入的,其工作原理的是,如果一个类加载器收到了类加载请求,它并不会自己先去加载,而是把这个请求委托给父类的加载器去执行,如果父类加载器还存在其父类加载器,则进一步向上委托,依次递归,请求最终将到达顶层的启动类加载器,如果父类加载器可以完成类加载任务,就成功返回,倘若父类加载器无法完成此加载任务,子加载器才会尝试自己去加载,这就是双亲委派模式,即每个儿子都很懒,每次有活就丢给父亲去干,直到父亲说这件事我也干不了时,儿子自己想办法去完成,所以默认是父装载,E正确
F、自定义类加载器实现 继承ClassLoader后重写了findClass方法加载指定路径上的class,F错误

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值