1.A
在一个子类被创建的时候,首先会在内存中创建一个父类对象,然后在父类对象外部放上子类独有的属性,两者合起来形成一个子类的对象。所以所谓的继承使子类拥有父类所有的属性和方法其实可以这样理解,子类对象确实拥有父类对象中所有的属性和方法,但是父类对象中的私有属性和方法,
子类是无法访问到的,只是拥有,但不能使用。就像有些东西你可能拥有,但是你并不能使用。所以子类对象是绝对大于父类对象的,
所谓的子类对象只能继承父类非私有的属性及方法的说法是错误的。可以继承,只是无法访问到而已。
2.A
B选项中,接口是一种特殊的抽象类。其中,成员变量都是默认public static final修饰的,方法都是public abstract修饰的,并且除了default和static的以外,只有声明,没有方法体。
C选项中,抽象类的方法,可以是抽象abstract的,也可以是普通的。就算全部是普通方法,也可以用abstract修饰。
D选项中,导出类,及子类,抽象类的子类可以是抽象的,也可以是普通的。
3.C
解析:
count是静态变量,为所有对象所共享,因此不管a.increment()还是b.increment()都会使count持续增加。
increment()方法返回当前count值,然后count增加1
antoherIncrement()方法让count增加1,然后返回count值
第一次a.increment()返回值为0,此时count值为1
第二次a.anotherIncrement()先让count+1再返回,返回值为2
第三次b.increment()先返回count当前值2,然后count+1
4.B
先通过GBK编码还原字符串,在该字符串正确的基础上得到“UTF-8”所对应的字节串。
String就没有decode和encode方法
5.A
byte ,1字节,值域-128至127 B boolean并非包装对象Boolean,不能赋值为null C 16进制
6.DE
1、ThreadLocal的类声明:
public class ThreadLocal<T>
可以看出ThreadLocal并没有继承自Thread,也没有实现Runnable接口。所以AB都不对。
2、ThreadLocal类为每一个线程都维护了自己独有的变量拷贝。每个线程都拥有了自己独立的一个变量。
所以ThreadLocal重要作用并不在于多线程间的数据共享,而是数据的独立,C选项错。
由于每个线程在访问该变量时,读取和修改的,都是自己独有的那一份变量拷贝,不会被其他线程访问,
变量被彻底封闭在每个访问的线程中。所以E对。
3、ThreadLocal中定义了一个哈希表用于为每个线程都提供一个变量的副本:
static class ThreadLocalMap {
static class Entry extends WeakReference<ThreadLocal> {
/** The value associated with this ThreadLocal. */
Object value;
Entry(ThreadLocal k, Object v) {
super(k);
value = v;
}
}
/**
* The table, resized as necessary.
* table.length MUST always be a power of two.
*/
private Entry[] table;
}
所以D对。
7.B
A基本类型和包装类是两回事,不是同一个概念。包装类像普通的类一样,封装了一系列的方法
C默认的浮点数据类型是float
D基本数据类型没有静态方法的,包装类却可以,因为包装类像普通的类一样,封装了一系列的方法
1、整数类型byte(1个字节)short(2个字节)int(4个字节)long(8个字节)
2、字符类型char(2个字节)
3、浮点类型float(4个字节)double(8个字节)
8.C
A,java中的字符串存储在字符串常量区,不会改变,发生改变是会新创建一个对象
B,StringBuffer是线程安全的StringBuilder
C,StringBuilder跟StringBuffer功能相同,区别是StringBuilder不是线程安全的
D,StringBuilder和StringBuffer底层都是以字符数组存放的,可以修改内容
9.A向上转型是无条件的
10.Ashort类型转为byte类型出错
a1*a2结果为int类型,转为byte类型出错